- Как загружать и выгружать модули ядра в Linux
- Список всех загруженных модулей ядра в Linux
- Как загрузить или выгрузить (удалить) модули ядра в Linux
- Управление модулями ядра с помощью команды modprobe
- Как я могу правильно перезагрузить модуль ядра?
- Kernel module (Русский)
- Contents
- Обзор
- Получение информации
- Автоматическое управление модулями
- Управление модулями вручную
- Настройка параметров модуля
- С помощью файлов в /etc/modprobe.d/
- С помощью командной строки ядра
- Создание псевдонимов
- Запрет загрузки
- С помощью файлов в /etc/modprobe.d/
- С помощью командной строки ядра
- Команда Modprobe в Linux
- Добавление модулей ядра
- Удаление модулей ядра
- Выводы
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Модули ядра Linux
- Оглавление
- Что такое модули ядра
- Получение информации о модулях
- Автоматическая загрузка модуля с помощью systemd
- Ручная обработка модуля (включение и отключение модулей и драйверов)
- Как задействовать драйвер без его установки
- Запрет на включение модулей (чёрный список модулей)
- Как заблокировать все сетевые интерфейсы на компьютере
- Как надёжно выключить веб камеру
- Настройка параметров модуля
- Псевдонимы
- Ошибки при работе с модулями
- Модули не загружаются
- modprobe: ERROR: could not insert ‘…’: Unknown symbol in module, or unknown parameter (see dmesg)
- modprobe: FATAL: Module … not found in directory /lib/modules/…
Как загружать и выгружать модули ядра в Linux
Оригинал: How to Load and Unload Kernel Modules in Linux
Автор: Aaron Kili
Дата публикации: 13 июня 2017 года
Перевод: А. Кривошей
Дата перевода: июль 2017 г.
Модуль ядра — это программа, которая может быть загружена в ядро операционной системы, или выгружена из него по запросу без перекомпиляции ядра или перезагрузки системы. Модули предназначены для расширения функциональности ядра. Другими словами можно сказать, что модули похожи на плагины к программам, например к WordPress. Плагины расширяют функциональность программы без включения их в исходный код.
Аналогично, без модулей ядро должно быть собрано с включением всей необходимой функциональности непосредственно в образ ядра. Это приводит к увеличению его размеров, кроме того, для добавления любой новой функциональности системным администраторам необходимо перекомпилировать ядро.
Простой пример модуля — драйвер, который предоставляет ядру доступ к аппаратному устройству, подключенному к компьютеру.
Список всех загруженных модулей ядра в Linux
В Linux названия всех модулей заканчиваются расширением .ko, и обычно они загружаются автоматически при обнаружении оборудования во время загрузки системы. Однако системный администратор может управлять модулями с помощью специальных команд.
Для вывода списка всех загруженных модулей в Linux может использоваться команда lsmod (list modules), которая читает содержимое /proc/modules.
Как загрузить или выгрузить (удалить) модули ядра в Linux
Для загрузки модуля ядра мы можем использовать команду insmod (insert module). Здесь необходимо задать полный путь к модулю. Приведенная ниже команда загружает модуль speedstep-lib.ko.
Для выгрузки модуля ядра мы будем использовать команду rmmod (remove module). Следующая команда выгрузит модуль speedstep-lib.ko.
Управление модулями ядра с помощью команды modprobe
modprobe — это интеллектуальная команда для чтения списка, загрузки и выгрузки модулей ядра. Она производит поиск всех модулей и соответствующих файлов в директории /lib/modules/$(uname -r), но не включает в поиск альтернативные конфигурационные файлы в директории /etc/modprobe.d. Таким образом, здесь вам не нужно вводить полный путь к модулю — в этом преимущество modprobe по сравнению с ранее описанными командами.
Для загрузки модуля просто введите его имя.
Для выгрузки модуля используется флаг -r.
Замечание: в modprobe выполняется автоматическое преобразование подчеркивания, поэтому при вводе названий модулей нет никакой разницы между _ и -.
Более подробно ознакомиться с опциями можно на man-странице modprobe.
Источник
Как я могу правильно перезагрузить модуль ядра?
Я не могу перезагрузить модуль ядра, чтобы попробовать новые флаги.
Пример: по thinkpad_acpi умолчанию без fan_control=1 . Поэтому, если мой компьютер работает очень горячо, а вентиляторы не работают на полной скорости, иногда может быть полезно просто временно загрузить модуль fan_control и установить вентилятор на несколько минут на максимально возможную скорость и изменить все обратно на обычные послесловия.
Это невозможно, потому что кажется, что некоторые модули ядра зависят от других, и кажется, что современные ядра Linux проверяют это.
Итак, что я сделал до сих пор:
- Проверка зависимостей
- modinfo -F depends thinkpad_acpi
- Попробуйте выгрузить эти модули
- rmmod или modprobe -r $dependencies
- Некоторые модули снова зависят от других, попробуйте выгрузить их тоже. Не работает, даже если нет «зависимостей» (или хотя бы modinfo говорит мне об этом)
- Google много для modprobe: FATAL: Module x is in use.
- Чтение ТЛДП
Если принудительная выгрузка включена в ядре ( zgrep FORCE_UNLOAD /proc/config.gz говорит =y ), вы можете rmmod -f проблемный модуль ядра, чтобы принудительно выгрузить его.
Согласно патчу, который включает это , это только для разработчиков ядра и отчаявшихся людей.
Лучше всего выяснить, почему модуль используется и каким процессом, но, по крайней мере, принудительная разгрузка должна позволить перезагрузить модуль снова.
Источник
Kernel module (Русский)
Модули ядра — это отдельные кусочки кода, которые могут быть загружены и выгружены из ядра по мере необходимости. Они расширяют функциональность ядра без необходимости перезагрузки системы.
Contents
Обзор
Чтобы создать модуль ядра, вы можете прочитать The Linux Kernel Module Programming Guide. Модуль можно сконфигурировать как вкомпилированный, а можно как загружаемый. Чтобы иметь возможность динамически загружать или выгружать модуль, его необходимо сконфигурировать как загружаемый модуль в настройке ядра (в этом случае строка, относящаяся к модулю должна быть отмечена буквой M ).
Модули хранятся в /usr/lib/modules/kernel_release . Чтобы узнать текущую версию вашего ядра, используйте команду uname -r .
Получение информации
Чтобы узнать, какие модули ядра загружены в настоящий момент:
Чтобы показать информацию о модуле:
Чтобы вывести список опций, с которыми загружен модуль:
Чтобы отобразить настройки для всех модулей:
Чтобы отобразить настройки для отдельного модуля:
Чтобы узнать зависимости модуля (или его псевдонима), включая сам модуль:
Автоматическое управление модулями
Сегодня все необходимые загрузки модулей делаются автоматически с помощью udev, поэтому если вам не нужно загружать какие-либо модули, не входящие в стандартное ядро, вам не придётся прописывать модули, требующиеся для загрузки в каком-либо конфигурационном файле. Однако, бывают случаи, когда вам необходимо загружать свой модуль в процессе загрузки или наоборот не загружать какой-то стандартный модуль, чтобы ваш компьютер правильно функционировал.
Чтобы дополнительные модули ядра загружались автоматически в процессе загрузки, создаются статические списки в конфигурационных файлах в директории /etc/modules-load.d/ . Каждый конфигурационный файл называется по схеме /etc/modules-load.d/
.conf . Эти конфигурационные файлы содержат список названий модулей ядра, которые необходимо грузить, разделённых переносом строки. Пустые строки и строки, в которых первым непробельным символом является # или ; , игнорируются.
Смотрите modules-load.d(5) для дополнительной информации.
Управление модулями вручную
Управление модулями ядра производится с помощью утилит, предоставляемых пакетом kmod . Вы можете использовать эти утилиты вручную.
Загрузка модуля из другого места (для тех модулей, которых нет в /lib/modules/$(uname -r)/ ):
Альтернативный вариант выгрузки модуля:
Настройка параметров модуля
Чтобы передать параметр модулю ядра, вы можете воспользоваться конфигурационным файлом в modprobe или использовать командную строку ядра.
С помощью файлов в /etc/modprobe.d/
Файлы в директории /etc/modprobe.d/ можно использовать для передачи настроек модуля в udev, который через modprobe управляет загрузкой модулей во время загрузки системы. Конфигурационные файлы в этой директории могут иметь любое имя, оканчивающееся расширением .conf . Синтаксис следующий:
С помощью командной строки ядра
Если модуль вкомпилирован в ядро, вы также можете передать параметры модулю с помощью командной строки ядра. Для всех стандартных загрузчиков, подойдёт следующий синтаксис:
Просто добавьте это в загрузчике в строку с ядром, как описано в параметрах ядра.
Создание псевдонимов
Псевдонимы (алиасы) — это альтернативные названия для модуля. Например: alias my-mod really_long_modulename означает, что вы можете использовать modprobe my-mod вместо modprobe really_long_modulename . Вы также можете использовать звёздочки в стиле shell, то есть alias my-mod* really_long_modulename будет иметь тот же эффект, что и modprobe my-mod-something . Создайте алиас:
У некоторых модулей есть алиасы, которые используются для их автоматической загрузки, когда они потребуются определённой программе. Отключение этих алиасов может предотвратить их автоматическую загрузку, при этом остаётся возможность из загрузки вручную.
Запрет загрузки
В терминах модулей ядра blacklisting означает механизм, предотвращающий загрузку какого-то модуля. Это может понадобиться, например если вам не нужна работа какого-то оборудования или если загрузка данного модуля вызывает проблемы: например, могут быть два модуля ядра, которые пытаются управлять одним и тем же оборудованием, и их совместная загрузка приводит к конфликту.
Некоторые модули загружаются как часть initramfs. Команда mkinitcpio -M напечатает все автоматически обнаруженные модули: для предотвращения initramfs от загрузки каких-то из этих модулей, занесите их в чёрный список в /etc/modprobe.d/modprobe.conf . Команда mkinitcpio -v отобразит все модули, которые необходимы некоторым хукам (например, filesystems хук, block хук и т.д.). Не забудьте добавить этот .conf файл в секцию FILES в /etc/mkinitcpio.conf , если вы этого ещё не сделали, пересоберите initramfs после того, как вы запретили загрузку модулей, а затем перезагрузитесь.
С помощью файлов в /etc/modprobe.d/
Создайте .conf файл в /etc/modprobe.d/ и добавьте строку для каждого модуля, который вы хотите запретить, используя ключевое слово blacklist . Например, если вы хотите запретить загружать модуль pcspkr :
Можно изменить такое поведение. Команда install заставляет modprobe запускать вашу собственную команду вместо вставки модуля в ядро как обычно. Поэтому вы можете насильно сделать так, чтобы модуль никогда не загружался:
Это запретит данный модуль и все модули, зависящие от него.
С помощью командной строки ядра
Вы также можете запрещать модули из загрузчика.
Источник
Команда Modprobe в Linux
Ядро Linux — это основной компонент операционной системы Linux. Он управляет ресурсами системы и является мостом между оборудованием и программным обеспечением вашего компьютера.
Ядро Linux имеет модульную конструкцию. Модуль ядра, или часто называемый драйвером, — это фрагмент кода, расширяющий функциональность ядра. Модули либо скомпилированы как загружаемые модули, либо встроены в ядро. Загружаемые модули могут быть загружены и выгружены в работающем ядре по запросу без необходимости перезагрузки системы.
Обычно модули загружаются по запросу через udev (диспетчер устройств). Однако иногда вам может потребоваться точная настройка того, как загружаются модули. Например, вам может потребоваться загрузить модуль с дополнительными параметрами или предотвратить автоматическую загрузку модуля.
Вы можете вручную загрузить модуль в ядро с помощью команды modprobe или автоматически во время загрузки с помощью файлов /etc/modules или /etc/modules-load.d/*.conf .
В этой статье мы объясним, как использовать modprobe для добавления и удаления модулей из ядра Linux. modprobe является частью kmod , двоичного kmod , который реализует несколько программ, используемых для управления модулями ядра Linux.
Добавление модулей ядра
Модули ядра хранятся в каталоге /lib/modules/ . Вы найдете версию работающего ядра , используйте команду uname -r .
Только пользователи с правами администратора могут управлять модулями ядра.
Чтобы загрузить модуль, вызовите команду modprobe за которой следует имя модуля:
Команда modprobe загрузит данный модуль и любые дополнительные зависимости модуля. В командной строке можно указать только один модуль.
Используйте команду lsmod чтобы убедиться, что модуль загружен:
Чтобы загрузить модуль с дополнительными параметрами, используйте синтаксис parameter=value :
Команда принимает несколько пар parameter=value разделенных пробелом.
Как правило, вам необходимо загрузить модуль во время загрузки системы. Вы можете сделать это, указав модуль и его параметры в файле внутри каталога /etc/modules-load.d . Файлы должны заканчиваться на .conf и иметь любое имя:
Параметры, указанные в этих файлах, считываются программой udev , которая загружает модули при запуске системы с помощью modprobe .
Удаление модулей ядра
Чтобы удалить модуль, вызовите команду modprobe с параметром -r за которым следует имя модуля:
modprobe также удалит неиспользуемые зависимости модуля.
При вызове с -r команда принимает несколько модулей в качестве аргументов:
Если вы хотите предотвратить загрузку модуля ядра во время загрузки, создайте файл .conf с любым именем внутри /etc/modprobe.d . Синтаксис:
Если вы хотите внести в черный список дополнительные модули, укажите модули в новой строке или создайте новый файл .conf .
Выводы
Команда modprobe позволяет добавлять и удалять модули ядра Linux.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Модули ядра Linux
Оглавление
Что такое модули ядра
Модули ядра — это фрагменты кода, которые могут быть загружены и выгружены в ядро по требованию. Они расширяют функциональность ядра без необходимости перезагрузки системы. Модуль может быть настроен как встроенный в ядро или загружаемый во время работы операционной системы.
Примеры модулей ядра — это драйверы различных устройств.
В этой статье вы узнаете:
- как узнать, какие модули ядра запущены (загружены)
- как узнать, какой используется драйвер для указанного устройства и как получить информацию о данном драйвере
- как надёжно отключит устройства (например, сетевые карты, веб камеры и другие), чтобы их невозможно было включить и использовать
- как попробовать новый драйвер без его установки в систему
Получение информации о модулях
Модули храняться в директории /usr/lib/modules/ВЫПУСК_ЯДРА. Текущую папку с модулями можно узнать командой:
Имена модулей часто содержат символы подчёркивания (_) или дефисы (—); при этом данные символы являются взаимозаменяемыми в командах modprobe и в конфигурационных файлах в директории /etc/modprobe.d/.
Команда lsmod показывает драйверы и другие модули, которые загружены в данный момент. Чтобы увидеть, какие модули загружены в данный момент, выполните:
На самом деле, это одно и то же. Информация считывается из /proc/modules и данные команды только выводят её в более понятном для восприятия виде.
Для показа информации о модуле используется команда modinfo:
Если вы получили ошибку:
То запустите modinfo с sudo.
К примеру, чтобы узнать информацию о модуле iwlwifi:
Как понять вывод modinfo
Вывод modinfo обширен и содержит много информации.
Строка «filename» показывает полный путь до файла модуля.
В строке «author» содержится информация о создателе модуля, например, «Copyright(c) 2003- 2015 Intel Corporation
»
В строке «description» описание модуля, например, «Intel(R) Wireless WiFi driver for Linux».
Рассмотрим, как интерпретировать строки
- firmware
- alias
- intree
- vermagic
на примере модуля i915
firmware:
Многим устройствам для правильной работы нужны две вещи: драйвер и прошивка. Драйвер запрашивает прошивку из файловой системы в /lib/firmware. Это специальный файл, необходимый для аппаратного обеспечения, это не бинарный файл. Затем дайвер делает всё, что нужно для загрузки прошивки в устройство. Прошивка выполняет программирование оборудования внутри устройства.
alias:
Эту запись можно разделить на части символами двоеточия (:)
- pci: тип устройства, pci или usb
- v00008086: v обозначает идентификатор поставщика, он идентифицирует производителя оборудования. Этот список поддерживается Специальной группой интересов PCI (PCI Special Interest Group). Номер 0x8086 означает «Корпорация Intel».
- d00005A84: d обозначает идентификатор устройства, выбранный производителем. Этот идентификатор обычно соединяется с идентификатором поставщика, чтобы создать уникальный 32-битный идентификатор для аппаратного устройства. Официального списка нет.
- sv*, sd*: версия поставщика подсистемы и версия устройства подсистемы для дальнейшей идентификации устройства (* указывает, что оно будет соответствовать чему угодно)
- bc03: базовый класс. Это определяет, что это за устройство; Интерфейс IDE, контроллер Ethernet, контроллер USB, … bc03 означает контроллер дисплея. Вы можете заметить их из вывода lspci, потому что lspci сопоставляет число и класс устройства.
- sc*: подкласс базового класса.
- i*: интерфейс
intree:
Все модули ядра начинают свои разработки как вне дерева. Как только модуль принимается для включения, он становится модулем внутри дерева. Модули без этого флага (установленного в N) могут испортить ядро.
vermagic:
При загрузке модуля строка vermagic проверяются на совпадение с текущей версией ядра. Если они не совпадают, вы получите ошибку, и ядро откажется загружать модуль. Вы можете преодолеть это, используя в modprobe флаг —force. Естественно, эти проверки существуют для вашей защиты, поэтому использование этой опции опасно.
Для вывода списка опций, установленных для загруженного модуля:
Если вы получили ошибку:
То установите пакет sysfsutils.
Пример вывода для модуля iwlwifi:
Для отображения полной конфигурации всех модулей:
Чтобы отобразить конфигурацию определённого модуля:
Чтобы перечислить зависимости модуля (или псевдонима), включая сам модуль:
Автоматическая загрузка модуля с помощью systemd
Сегодня загрузка всех необходимых модулей выполняется udev автоматически, поэтому нет необходимости помещать модули в какой-либо файл конфигурации. Однако в некоторых случаях вам может потребоваться загрузить дополнительный модуль во время процесса загрузки компьютера или добавить в чёрный список другой модуль для правильной работы компьютера.
Модули ядра могут быть явно перечислены в файлах в /etc/modules-load.d/ для systemd, чтобы загрузить их во время включения компьютера. Каждый файл конфигурации имеет имя в стиле /etc/modules-load.d/
.conf. Файлы конфигурации просто содержат список имён модулей ядра для загрузки, разделённых символами новой строки. Пустые строки и строки, чей первый непробельный символ — # (решётка) или ; (точка с запятой) игнорируются
Пример файла /etc/modules-load.d/virtio-net.conf
Кроме указанной директории, также считываются файлы конфигурации из /run/modules-load.d/*.conf и /usr/lib/modules-load.d/*.conf.
Обратите внимание, что обычно лучше полагаться на автоматическую загрузку модулей с помощью идентификаторов PCI, USB-идентификаторов, идентификаторов DMI или аналогичных триггеров, закодированных в самих модулях ядра, вместо статической конфигурации, подобной этой. Фактически, большинство современных модулей ядра уже подготовлены для автоматической загрузки.
Ручная обработка модуля (включение и отключение модулей и драйверов)
Модули ядра обрабатываются инструментами, предоставляемыми пакетом kmod. Вы можете использовать эти инструменты вручную.
Примечание. Если вы обновили ядро, но ещё не перезагрузили компьютер, modprobe завершится с ошибкой без сообщения об ошибке и выйдет с кодом 1, поскольку путь /usr/lib/modules/$(uname -r)/ больше не существует.
Чтобы загрузить модуль применяется команда вида:
Чтобы загрузить модуль по имени файла (то есть, тот, который не установлен в /usr/lib/modules/$(uname -r)/):
Для выгрузки (выключения) модуля:
Или альтернативная команда:
Как задействовать драйвер без его установки
Рассмотрим реальный пример, когда может пригодиться запуск драйвера из файла.
Эти драйвера предназначены для работы таких современных карт с поддержкой стандарта Wi-Fi AC как:
- Alfa AWUS1900 (чипсет: Realtek RTL8814AU)
- TRENDnet TEW-809UB (чипсет: Realtek RTL8814AU)
- ASUS USB-AC68 (чипсет: Realtek RTL8814AU)
- Alfa AWUS036ACH (чипсет: Realtek RTL8812AU)
- Alfa AWUS036AC (чипсет: Realtek RTL8812AU)
- ASUS USB-AC56 (чипсет: Realtek RTL8812AU)
Эти драйвера поддерживают режим монитора и беспроводную инъекцию, то есть подходят для аудита безопасности Wi-Fi сетей на 2.4 и 5 Ghz, в том числе с поддержкой Wi-Fi стандарта AC.
В принципе, в репозиториях Kali Linux уже имеется данный драйвер:
Но его версия 5.6.4. Но уже доступна версия 5.7.0. Предположим, мы хотим попробовать версию 5.7.0 без установки её в систему.
Итак, удаляем версию из репозитория (если она была установлена)
Проверим, что модуль не загружен:
И при попытке его загрузить возникает ошибка:
модуль не найден:
Или такая ошибка:
То есть, неизвестный символ в модуле. Суть такая же — модуль не найден, но ранее существовал, поэтому от него остались упоминания в списках зависимостей.
Установим зависимости, необходимые для компиляции данного драйвера:
Клонируем репозиторий — обратите внимание на использование опции -b с которой указана интересующая нас ветка (в данном случае название ветки совпадает с версией драйвера):
Компилируем, но не делаем установку, поскольку мы в принципе не хотим устанавливать этот модуль:
У нас есть два способа загрузить (включить) модуль — с помощью insmod или с помощью команды modprobe. Команда insmod удобнее, т. к. можно указать скомпилированный файл драйвера, а команда modprobe лучше обрабатывает зависимости, поэтому рассмотрим оба варианта.
Загрузка модуля без установки (используя insmod)
Для включения модуля из файла используйте команду вида:
Файлы модулей имеют расширение .ko, в нашем случае имя файла 88XXau.ko, поэтому команда следующая:
Проверяем, был ли загружен модуль:
Первая строка показывается, что модуль 88XXau загружен, а в последующих строках показаны модули, которые использует 88XXau (то есть которые являются для него зависимостями).
Загрузка модуля без установки (используя modprobe)
Второй вариант чуть более сложный в настройке, но для загрузки модуля не нужно указывать полный путь до файла драйвера.
Выгрузим модуль, если он был загружен ранее:
Теперь мы сделаем так, что система будет думать, что модуль установлен, хотя на самом это не так. Для этого мы создадим символическую ссылку от файла .ko в папку /lib/modules/`uname -r`:
В нашем случае для этого нужно выполнить такую команду:
Обновим список зависимостей всех модулей (кстати, ключ -a в следующей команде можно пропускать, т.к. он предполагается по умолчанию):
Теперь для загрузки модуля можно использовать обычную команду modprobe:
Проверим версию модуля:
Обратите внимание на строки:
Используется версия v5.7.0 — именно этого мы и добивались.
Описанные методы запуска модулей подходят для единоразового или эпизодического запуска драйверов. Для постоянного использования рекомендуется выполнить нормальную установку модуля, в этом случае он будет поддерживать DKMS.
Драйверы можно установить с помощью DKMS. Это система, которая автоматически перекомпилирует и устанавливает модуль ядра при установке или обновлении нового ядра. Чтобы использовать DKMS, установите пакет dkms.
С помощью DKMS устанавливаются драйверы из официальных репозиториев. Также с помощью DKMS можно установить и драйверы из прочих репозиториев (например, rtl8812au, который чуть выше был взять в качестве примера, это поддерживает) — для этого следуйте официальным инструкциям по установке от разработчиков, а описанный чуть выше метод запуска драйвера без установки предназначен для тестирования.
Запрет на включение модулей (чёрный список модулей)
Чёрный список в контексте модулей ядра — это механизм, предотвращающий загрузку модуля ядра. Это может быть полезно, если, например, связанное оборудование не требуется или если загрузка этого модуля вызывает проблемы: например, могут быть два модуля ядра, которые пытаются управлять одним и тем же компонентом оборудования, и загрузка их вместе приведёт к конфликту.
Использование файлов в /etc/modprobe.d/
Создайте файл .conf внутри /etc/modprobe.d/ и добавьте строку для каждого модуля, который вы хотите добавить в черный список, используя ключевое слово blacklist. Например, если вы хотите запретить загрузку модуля pcspkr, создайте файл /etc/modprobe.d/nobeep.conf и добавьте в него строку:
Некоторые модули загружаются как часть initramfs. То есть можно выделить модули, которые:
- загружаются из файлов .ko
- загружаются как часть initramfs (initial ramdisk)
Для запрета загрузки модулей первого типа (загружаемые из файлов .ko) достаточно внести запись об этом модуле в файл /etc/modprobe.d/*.conf с директивой blacklist.
Для модулей второго типа (загружаемые как часть initramfs), кроме создания конфигурационного файла, также необходимо пересоздать initramfs.
Примечание: initramfs (initial ramdisk) — это начальная среда ramdisk для загрузки ядра Linux. Начальный ramdisk — это, по сути, очень маленькая среда (раннее пользовательское пространство), которая загружает различные модули ядра и настраивает необходимые вещи перед передачей управления init. Это позволяет, например, иметь зашифрованные корневые файловые системы и корневые файловые системы на программном массиве RAID.
Примечание. Команда blacklist внесёт модуль в чёрный список, чтобы он не загружался автоматически. Но при этом модуль может быть загружен, если от него зависит другой модуль, не включенный в чёрный список, а также по прежнему можно загрузить модуль вручную. Тем не менее есть обходной путь для этого поведения; Команда install указывает modprobe запускать пользовательскую команду вместо того, чтобы как обычно вставлять модуль в ядро, поэтому вы можете принудительно заставить модуль всегда не загружаться с помощью рассмотренной далее конструкции. Допустим, вы создали файл /etc/modprobe.d/blacklist.conf чтобы заблокировать загрузку модуля ИМЯ_МОДУЛЯ. Чтобы это сделать надёжно, добавьте в этот файл:
Это надёжно заблокирует загрузку указанного модуля, а также любого другого, зависящего от него.
Как пересоздать initramfs для блокировки модулей
Если вы блокируете модули, которые загружаются из initramfs, то после их добавления в файл /etc/modprobe.d/*.conf, необходимо пересоздать initramfs.
На Debian, Kali Linux, Linux Mint, Ubuntu и их производных это делается так:
В Arch Linux, BlackArch и их производных это делается так:
В Arch Linux команда
распечатает все автоматически обнаруженные модули: чтобы предотвратить загрузку некоторых из этих модулей initramfs, внесите их в чёрный список в файле .conf в /etc/modprobe.d, и он будет добавлен хуком modconf во время генерации образа. Запуск
выведет список всех модулей, задействованных различными хуками (например, хук filesystems, хук block и т. д.).
Блокировка модулей в начале загрузки Linux (отключение модулей в командной строке ядра)
Это может быть очень полезно, если неисправный модуль делает невозможным загрузку вашей системы. Вы можете занести в чёрный список модули в меню загрузчика. Просто добавьте
в строку с параметрами загрузки ядра.
Примеры редактирования параметров загрузки ядра для популярных дистрибутивов вы найдёте в статье «Как в Linux сбросить забытый пароль входа». Также смотрите статью «Как изменить параметры загрузки Linux в UEFI».
Примечание. Если вы заносите в чёрный список более одного модуля, имейте в виду, что они разделены только запятыми. Пробелы или что-либо ещё могут нарушить синтаксис.
Рассмотрим практические примеры, когда пользователю может понадобиться блокировать загрузку модулей ядра.
Как заблокировать все сетевые интерфейсы на компьютере
Предположим, необходимо, чтобы на компьютере была заблокирована любая сетевая активность, то есть и проводные, и беспроводные сети. Существует команда rfkill, но она предназначена для блокировки только беспроводных сетей. Поэтому найдём другой способ.
Алгоритм действий следующий:
- Мы определим, какие драйверы используются сетевыми устройствами
- Заблокируем эти драйверы
Чтобы узнать, какие драйверы задействованы в Linux для работы сетевых карт, выполните команду:
Строки «configuration:» содержат информацию о драйверах. Для беспроводной карты это «driver=iwlwifi», а для проводного сетевого интерфейса это «driver=r8169».
Создаём файл /etc/modprobe.d/block-network.conf и добавляем в него:
Так выглядит настройка сети в нормальном состоянии, виден проводной и беспроводной адаптеры:
После перезагрузки невозможно будет включить сеть, поскольку компьютер не сможет использовать сетевые интерфейсы без драйверов:
При попытке загрузить модули вручную, например:
Эти модули не будут загружаться благодаря команде install.
Вы не сможете включить любую сеть вплоть до удаления файла /etc/modprobe.d/block-network.conf и перезагрузки. Тем не менее при подключении других сетевых адаптеров, они будут использоваться. Данный способ надёжно защитит от случайного использования сети при условии, что вы контролируете подключение новых физических устройств к компьютеру.
Как надёжно выключить веб камеру
На некоторых новых моделях ноутбуков веб камеру можно закрыть шторкой — на тот случай, если вы опасаетесь, что хакер может взломать ваш компьютер и следить за вами.
Сейчас мы научимся отключать драйвер веб камеры, чтобы её невозможно было использовать.
Даже если у вас ноутбук, скорее всего, веб камера подключена внутри корпуса к USB хабу, то есть это USB устройство. Вывести список USB устройств в системе можно командой:
Обратите внимание на IMC Networks USB2.0 HD UVC WebCam в приведённом списке — это и есть веб камера ноутбука.
Чтобы определить драйверы, которые нужны для работы любого USB или с PCI устройства в вашей системе, обратитесь к статье «Как узнать, какие модули (драйверы) связаны с USB и PCI устройствами».
Воспользуемся следующей командой:
Видим, что для устройства USB2.0 HD UVC WebCam используется драйвер uvcvideo.
Создаём файл /etc/modprobe.d/block-webcam.conf и блокируем в нём запуск модуля ядра uvcvideo:
После перезагрузки система не сможет использовать вебкамеру, пока не будет удалён файл block-webcam.conf и выполнена перезагрузка.
Настройка параметров модуля
Чтобы передать параметр в модуль ядра, вы можете передать их вручную с помощью modprobe или убедиться, что определённые параметры всегда применяются с помощью файла конфигурации modprobe или с помощью командной строки ядра.
Вручную во время загрузки, используя modprobe
Основной способ передачи параметров в модуль — использование команды modprobe. Параметры указываются в командной строке с использованием простых назначений ключ=значение:
Используя файлы в /etc/modprobe.d/
Файлы в каталоге /etc/modprobe.d/ можно использовать для передачи настроек модуля в udev, который будет использовать modprobe для управления загрузкой модулей во время загрузки системы. Файлы конфигурации в этом каталоге могут иметь любое имя, если они заканчиваются расширением .conf, например /etc/modprobe.d/myfilename.conf. Синтаксис:
Например, содержимое файла /etc/modprobe.d/thinkfan.conf:
Добавление опций модуля во время загрузки системы (ииспользование командной строки ядра)
Если модуль встроен в ядро, вы также можете передать опции модулю с помощью командной строки ядра. Для всех распространённых загрузчиков правильный синтаксис:
Псевдонимы
Псевдонимы — это альтернативные имена для модуля. Например:
означает, что вы можете использовать
Вы также можете использовать подстановочные знаки в стиле оболочки, поэтому
имеет тот же эффект.
Чтобы создать псевдоним в конфигурационном файле /etc/modprobe.d/myalias.conf:
Некоторые модули имеют псевдонимы, которые используются для автоматической их загрузки, когда они нужны приложению. Отключение этих псевдонимов может предотвратить автоматическую загрузку, но все равно позволит загружать модули вручную.
Пример файла /etc/modprobe.d/modprobe.conf
Ошибки при работе с модулями
Модули не загружаются
Если определённый модуль не загружается и в журнале загрузки
говорится, что модуль находится в чёрном списке, но в каталоге /etc/modprobe.d/ нет соответствующей записи, проверьте другую папку modprobe на наличие записи о занесении в чёрный список: /usr/lib/modprobe.d/.
Модуль не будет загружен, если строка «vermagic», содержащаяся в модуле ядра, не соответствует значению текущего запущенного ядра. Если известно, что модуль совместим с текущим работающим ядром, проверку «vermagic» можно игнорировать с помощью modprobe —force-vermagic.
Предупреждение. Игнорирование проверок версий для модуля ядра может привести к сбою ядра или непредсказуемому поведению системы из-за несовместимости. Используйте —force-vermagic только с максимальной осторожностью.
modprobe: ERROR: could not insert ‘…’: Unknown symbol in module, or unknown parameter (see dmesg)
Ошибка вызвана тем, что ранее модуль присутствовал в системе и о нём оставлена запись в списке зависимостей, но на момент ошибки модуль отсутствует (удалён).
Для обновления списка зависимостей выполните команду:
Ещё одна возможная причина ошибки — не загружена зависимость, требуемая для модуля. Например, для Wi-Fi адаптеров обязательной зависимостью является cfg80211, чтобы загрузить этот модуль, выполните команду:
modprobe: FATAL: Module … not found in directory /lib/modules/…
Означает, что модуль, который вы пытаетесь запустить, не существует.
- описка в названии модуля
- не установлен или удалён содержащий указанный модуль пакет
Если ранее модуль (драйвер) запускался, но затем появилась указанная ошибка, то она может быть связана с тем, что было обновлено ядро, а модуль для новой версии ядра не был скомпилирован.
Источник