Удалить модуль ядра полностью

Я хотел бы спросить вас, как я могу полностью удалить какой-либо модуль ядра? Я имею в виду действительно удалять, а не выгружать или мешать загружать. Я пытался использовать rmmod, но это только что выгруженный модуль, так же, как modprobe -r, Итак, я получил список всех модулей, использующих modprobe -n -v и удалил их вручную.

rmmod cramfs:
ERROR: Module cramfs does not exist in /proc/modules

поэтому, когда я пытаюсь загрузить модуль, я получил:

modprobe -v -n cramfs:
FATAL: Could not open '/lib/modules/2.6.32-573.12.1.el6.x86_64/kerne/fs/cramfs/cramfs.ko': No such file or directory

но это означает, что система все еще получила некоторую информацию об удаленном модуле, потому что она знает путь к cramfs.ko файл. Пример не загруженного, но загружаемого модуля:

modprobe -v -n jffs2
insmod /lib/modules/2.6.32-573.12.1.el6.x86_64/kernel/lib/zlib_deflat/zlib_deflate.ko 
insmod /lib/modules/2.6.32-573.12.1.el6.x86_64/kernel/fs/jffs2/jffs2.ko

rmmod jffs2
ERROR: Module jffs2 does not exist in /proc/modules

Есть ли способ как правильно удалить модули?

3 ответа

Модули загружаются в оперативную память (и связаны с работающим ядром) во время выполнения, когда это необходимо. Пока это не произойдет, они (только) используют дисковое пространство (или его эквивалент).

Вы можете сэкономить немного дискового пространства, собрав собственное ядро ​​с настроенным модулем. Ядро будет работать чуть-чуть быстрее с использованием соответствующей функциональности, если вы соберете ядро, которое включает (не как модули, встроено) все, что вам нужно. Но это огромный удар по гибкости и хлопотам.

Это зависит от вашего дистрибутива/системы.

Загружаемые модули Linux — это файлы ko, расположенные в/lib/modules/$(uname -r)/, рассортированные по подпапкам. Несколько файлов в этой папке помогают справиться со всеми ними, особенноmodules.dep[.bin]иmodules.order[.bin]. прочитайте эти файлы, чтобы получить полный путь к модулю и его зависимостям.

Обычные компьютерные дистрибутивы Linux

В большинстве дистрибутивов Linux файлы модулей устанавливаются пакетами вашего менеджера пакетов. Основной их набор устанавливается с помощью довольно общего пакета с именемkernel-modulesнапример, в некоторых дистрибутивах дополнительные, менее используемые модули могут быть установлены отдельными пакетами (модули разделены на несколько пакетов). Вы можете узнать, какие пакеты содержат нежелательные модули, и удалить их.

Имейте в виду:

  • Даже если вы удалите определенный пакет дополнительного модуля, его имя и путь все равно будут указаны в списке.module.orderиmodules.depфайлы. Эти файлы не представляют угрозы, и они нужны вам для использованияmodprobe. Они будут удалены только в том случае, если вы удалите пакет основных модулей.
  • Удаление модулей может сломать вашу систему, удалив ключевые функции вашего ядра. Вероятно, вы захотите выполнитьlsmodчтобы получить минимальный список модулей, которые не следует удалять.

У вас может возникнуть соблазн отредактировать текстовые файлы, чтобы удалить ссылки на нежелательные модули, но редактирование аналогов двоичных файлов, вероятно, утомительно, и эти файлы будут восстанавливаться каждый раз, когда их пакет обновляется.

Встроенные системы

Небольшие встроенные системы по-прежнему могут полагаться на загружаемые модули, но могут не предоставлять менеджеров пакетов. Возможно, вам придется полностью перестроить встроенную систему, чтобы изменить ее, поскольку некоторые встроенные системы используют корневые файловые системы, доступные только для чтения.

Полностью пересоберите ядро ​​или встроенную систему.

В зависимости от ваших потребностей вы можете пересобрать ядро, чтобы

  • удалить поддержку нежелательных функций
  • снизить использование загружаемых модулей, по возможности встраивая их внутри самого ядра
  • включите подписывание модулей, чтобы ваше ядро ​​отклоняло исправленные или сторонние модули
  • и даже удалить поддержку ядра для загружаемых модулей, чтобы загрузка одного из них была вообще невозможна.

Однако для этого необходимы некоторые навыки.

Другие методы усиления безопасности ядра

Несколько других простых в использовании механизмов могут повысить безопасность вашего ядра от динамически загружаемых модулей:

  • Запись 1 в специальный файл sysctl kernel.modules_disabled(на самом деле /proc/sys/kernel/modules_disabled) запрещает любую дальнейшую загрузку или выгрузку загружаемых модулей, замораживая их.
  • То же самое можно сделать с помощью kernel.kexec_load_disabled , запретив кому-либо горячее переключение на другой двоичный файл ядра (довольно недавняя функция ядра, используемая для применения обновлений ядра на серверах без простоев)

Если модуль ядра не загружен, это то же самое, как если бы он не существовал, если только он не был встроен в ядро ​​(я объясню это ниже), единственным исключением является то, что вы обычно можете позже перезагрузить его с помощью команды.

Причина, по которой вы получаете путь в сообщении об ошибке, заключается в том, что он жестко запрограммирован для проверки стандартных местоположений модулей (ссылка). Там нет файла конфигурации или чего-то говорящегосделать это. (Если вашего модуля нет в стандартных путях и вы хотите его вставить, вы всегда можете использовать ).

Модули загружаются каким-то механизмом вне ядра после запуска ядра.может загружать модули, поэтому может. Вам необходимо выяснить, какой механизм использует ваша система, и занести в черный список соответствующий модуль.

настоятельно рекомендуется делать это на маршрутизаторе или другом устройстве, например телефоне Android. Чтобы дать вам конкретный совет, вам нужна дополнительная информация о марке/модели устройства.

Есть две причины, по которым вы можете получить эту ошибку о `/proc/modules:

  1. В вашем примере са затем ошибка, с которой вы получаете - это может бытьне сработало, но сообщение об ошибке не было напечатано. Проверьте свои журналы (и т. д.) на наличие ошибок.

  2. The виртуальная файловая система не смонтирована. Такие вещи, как SELinux и возможности ядра, могут помешать вам получить доступ или подключиться даже с правами root. Проверьте, можете ли выи получите что-то вроде списка каталогов для каждого PID в вашей системе. Если вы запускаете это, вам нужно привязать монтированиев твой.


В ядро ​​можно встроить модуль . Это делает его частью ядра. На данный момент это уже не модуль, так чтои другие вещи не будут работать. Я не уверен, что произойдет, если вы попытаетесьмодуль, который является частью ядра (вероятно, он выдаст вам загадочную ошибку «файл используется», относящуюся к уже используемым ресурсам ядра).

Раньше было обычным делом встраивать поддержку контроллеров дисков и тому подобного, а некоторые встроенные платформы по-прежнему могут делать то же самое для устройств, необходимых для доступа к программному обеспечению.

Другие вопросы по тегам