Удалить модуль ядра полностью
Я хотел бы спросить вас, как я могу полностью удалить какой-либо модуль ядра? Я имею в виду действительно удалять, а не выгружать или мешать загружать. Я пытался использовать 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 , запретив кому-либо горячее переключение на другой двоичный файл ядра (довольно недавняя функция ядра, используемая для применения обновлений ядра на серверах без простоев)
Если модуль ядра не загружен, это то же самое, как если бы он не существовал, если только он не был встроен в ядро (я объясню это ниже), единственным исключением является то, что вы обычно можете позже перезагрузить его с помощью команды.
Причина, по которой вы получаете путь в сообщении об ошибке, заключается в том, что он жестко запрограммирован для проверки стандартных местоположений модулей (ссылка). Там нет файла конфигурации или чего-то говорящего
Модули загружаются каким-то механизмом вне ядра после запуска ядра.
Есть две причины, по которым вы можете получить эту ошибку о `/proc/modules:
В вашем примере с
а затем ошибка, с которой вы получаете - это может быть не сработало, но сообщение об ошибке не было напечатано. Проверьте свои журналы ( и т. д.) на наличие ошибок. The
виртуальная файловая система не смонтирована. Такие вещи, как SELinux и возможности ядра, могут помешать вам получить доступ или подключиться даже с правами root. Проверьте, можете ли вы и получите что-то вроде списка каталогов для каждого PID в вашей системе. Если вы запускаете это, вам нужно привязать монтирование в твой .
В ядро можно встроить модуль . Это делает его частью ядра. На данный момент это уже не модуль, так что
Раньше было обычным делом встраивать поддержку контроллеров дисков и тому подобного, а некоторые встроенные платформы по-прежнему могут делать то же самое для устройств, необходимых для доступа к программному обеспечению.