Вопрос или проблема
Я ищу способ настройки белого списка разрешенных USB-драйверов на Fedora. Все другие USB-драйверы не должны загружаться.
Каковы самые простые способы сделать это?
Я знаю, как заблокировать драйверы с помощью конфигурационного файла, но как мне добиться противоположного? Белого списка предварительно выбранных USB-драйверов?
Хорошо, возможно, простой скрипт, который получает список в данный момент загруженных модулей (с помощью lsmod) и всех модулей (как это сделать? только используя ls в директории этих модулей?) => тогда он просто блокирует все, что не загружено в данный момент (или даже может переместить эти файлы в другую папку, чтобы избежать случайной загрузки в зависимости от / и т.д.). Теперь, если у кого-то есть этот скрипт, было бы неплохо, если бы они поделились им.
#!/bin/sh
usbdrivers="[добавьте сюда]"
# Получить все первые слова из команды "lsmod", удаляя первое слово "module" из белого списка
whiteList=$(echo $(lsmod | grep -Po '^\s*\K\S+') | sed 's/^[^ ]* //')
# Если "./wlist" существует, удалить
if [ -f ./wlist ]; then
rm ./wlist
fi
# Показать белый список в новых строках в файле "wlist"
for file in $whiteList; do
echo "$file" >> ./wlist
done
# Добавить "usbdrivers"
for file in $usbdrivers; do
echo "$file" >> ./wlist
done
# Перечислить все имена файлов в директории модулей ядра
allList=$(find /lib/modules/$(uname -r)/kernel -type f -exec basename {} \;)
# Если "./alist" существует, удалить
if [ -f ./alist ]; then
rm ./alist
fi
# Показать "allList" в новых строках в файле "blist", удаляя ".ko.xz" из всех имен файлов
for file in $allList; do
echo "$(basename "$file" .ko.xz)" >> ./alist
done
# Если "blacklist.conf" существует, удалить
if [ -f ./blacklist.conf ]; then
rm ./blacklist.conf
fi
# Удалить модули ядра в "./alist", которые также есть в "./wlist" (мы не хотим блокировать весь белый список)
blacklist=$(grep -v -w -f ./wlist ./alist)
# Показать черный список в новых строках в файле "blacklist.conf"
for file in $blacklist; do
## Либо "blacklist", либо "install ... /bin/false" будет работать
### blacklist
#echo "blacklist $file" >> ./blacklist.conf
### install ... /bin/false
echo "install $file /bin/false" >> ./blacklist.conf
done
# Если "./check" существует, удалить
if [ -f ./check ]; then
rm ./check
fi
# Вывести сообщение в файл "./check"
echo -e "#======================================================#\n
Если вы все еще видите некоторые модули ядра ниже этого\n
сообщения, Тогда этот скрипт **пропустил** их!!\n
#======================================================#\n" >> ./check
# То же самое, удалить модули ядра в "./wlist", которые есть в "./alist"
grep -v -w -f ./alist ./wlist >> ./check
echo "Проверьте, остались ли еще модули ядра в файле ./check!"
.
Ответ или решение
Как создать белый список USB-драйверов (модулей ядра) на Fedora
Создание белого списка USB-драйверов в операционной системе Fedora позволяет обеспечить контроль за загружаемыми модулями и безопасность системы. Процесс белого листа основан на запрете загрузки всех модулей, кроме тех, которые вы заранее одобрили. Ниже представлен шаг за шагом подход к реализации этого подхода, включая написание скрипта на bash.
1. Подготовка скрипта
Сначала разработаем скрипт, который будет автоматически генерировать белый список, получая данные о загруженных модулях и всем доступном наборе модулей. Вот пример реализации такого скрипта:
#!/bin/bash
# Укажите здесь ваши разрешенные USB-драйвера
usb_drivers=("usb_storage" "usbhid")
# Получение списка текущих загруженных модулей
loaded_modules=$(lsmod | awk '{print $1}' | tail -n +2)
# Файл для белого списка
whitelist_file="./wlist"
blacklist_file="./blacklist.conf"
alist_file="./alist"
# Удаление существующих файлов, если они есть
rm -f $whitelist_file $blacklist_file $alist_file
# Создаем белый список
echo "$loaded_modules" > $whitelist_file
for driver in "${usb_drivers[@]}"; do
echo "$driver" >> $whitelist_file
done
# Создание списка всех модулей ядра
find /lib/modules/$(uname -r)/kernel -type f -name '*.ko*' | awk -F/ '{print $(NF)}' | sed 's/.ko.xz//;s/.ko//' > $alist_file
# Формирование черного списка
grep -Fxv -f $whitelist_file $alist_file > $blacklist_file
sed -i 's/^/blacklist /' $blacklist_file
2. Объяснение действий скрипта
- Объявление переменных: В скрипте сначала определяется белый список USB-драйверов, которые вы хотите разрешить.
- Получение загруженных модулей: Используется команда
lsmod
для получения списка загруженных модулей, где выводим только названия модулей, игнорируя первую строку. - Создание файла белого списка: Генерируется файл белого списка, содержащий как загруженные модули, так и указанные пользователем разрешенные драйверы.
- Создание списка всех модулей ядра: Используется команда
find
для сбора всех модулей ядра в систему и их фильтрации. - Формирование черного списка: Модули из общего списка, которые не присутствуют в белом списке, добавляются в черный список для блокировки.
3. Применение черного списка
После выполнения скрипта необходимо убедиться, что он был внедрен в систему. Для этого следует добавить сгенерированный blacklist.conf
в конфигурацию загрузки ядра.
Запишите файл в стандартное место для конфигураций черного списка, например:
sudo cp ./blacklist.conf /etc/modprobe.d/
4. Перезагрузка системы
После завершения всех процедур перезагрузите компьютер, чтобы изменения вступили в силу. Это позволит вашей системе загружаться без нежелательных USB-драйверов.
Заключение
Создание белого списка USB-драйверов на Fedora — это эффективный способ контроля за модульной загрузкой и повышением уровня безопасности вашей системы. С помощью предложенного скрипта вы можете легко управлять разрешенными драйверами, исключая все остальные. Регулярно обновляйте белый список, добавляя или удаляя драйверы в зависимости от своих нужд.