Как добавить USB-драйверы (модули ядра) в белый список на Fedora?

Вопрос или проблема

Я ищу способ настройки белого списка разрешенных 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 — это эффективный способ контроля за модульной загрузкой и повышением уровня безопасности вашей системы. С помощью предложенного скрипта вы можете легко управлять разрешенными драйверами, исключая все остальные. Регулярно обновляйте белый список, добавляя или удаляя драйверы в зависимости от своих нужд.

Оцените материал
Добавить комментарий

Капча загружается...