Мониторинг подключения USB накопителей и логирование операций с файлами
Для выполнения данной задачи я использовал свойство udev, которое позволяет выполнять скрипт при наступлении какого-либо события. Создадим правило, которое будет отвечать за подключение и отключение usb устройств:
touch /etc/udev/rules.d/usb.rules
Содержимое файла usb.rules:
ACTION=="add", SUBSYSTEM=="block", ENV=="usb|mmc|memstick|ieee1394", RUN+="/bin/bash /etc/udev/usb_on.sh %E %E %E" ACTION=="remove", SUBSYSTEM=="block", ENV=="usb|mmc|memstick|ieee1394", RUN+="/bin/bash /etc/udev/usb_off.sh %E %E %E"
- ACTION – отслеживаемое действие, add – подключение устройств, remove – отключение;
- ENV – перечень отслеживаемых устройств по типу;
- RUN – исполняемое действие. В данном случае, в зависимости от события, запускаются скрипты usb_on.sh и usb_off.sh.
- %E – серийный номер USB устройства;
- %E – модель USB устройства;
- %E – производитель USB устройства.
/usr/bin/curl -d "host=$(hostname)&serial=$1&name=$2&vendor=$3&file=on&sub=true" --noproxy 10.0.40.16 http://10.0.40.16/usb/input.php
/usr/bin/curl -d "host=$(hostname)&serial=$1&name=$2&vendor=$3&file=off&sub=true" --noproxy 10.0.40.16 http://10.0.40.16/usb/input.php
- host – имя компьютера результат выполнения команды hostname;
- serial — серийный номер USB устройства (%E)
- name — модель USB устройства (%E)
- vendor — производитель USB устройства (%E)
- file – действие. on – подключение, off — отключение (file — название поля выбрано по той причине, что сюда же будет вноситься и информация о файлах, над которыми производились какие-либо действия)
- sub=true – имитация нажатия кнопки на веб-форме.
2.Сервер сбора информации
Как видно из запускаемых скриптов usb_on.sh и usb_off.sh – вся информация передается на php скрипт, который состоит из простой веб-формы и обработчика запроса.
Обработчик делает одно – складывает принятые данные в таблицу usb БД MySQL
mysql_query("INSERT INTO `usb` (`id`, `date`, `host`, `ip`, `serial`, `name`, `vendor`, `file`) VALUES (NULL, '$time', '$_POST[host]', '$_SERVER[REMOTE_ADDR]', '$_POST[serial]', '$_POST[name]', '$_POST[vendor]', '$_POST[file]')");
CREATE TABLE IF NOT EXISTS `usb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` bigint(20) NOT NULL, `ip` varchar(15) COLLATE utf8_bin NOT NULL, `host` varchar(50) COLLATE utf8_bin NOT NULL, `serial` varchar(100) COLLATE utf8_bin NOT NULL, `name` varchar(100) COLLATE utf8_bin NOT NULL, `vendor` varchar(100) COLLATE utf8_bin NOT NULL, `file` text COLLATE utf8_bin, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
3. Мониторинг операций с файлами
Для выполнения функции отслеживания операций, которые выполнялись на файлами на подключенном носителе был написан следующий скрипт:
touch /var/tmp/usb.check # обновляем время модификации файла check=1 while [ $check ] # бесконечный цикл do if [ -f /var/tmp/usb.check ] # если существует файл then ACCESS='' # обнуляем переменные CREATE='' MODIFY='' # Далее, ищем в папке /media файлы, значения времен создания, изменения, доступа которых больше, чем только что созданным файлом /var/tmp/usb.check ACCESS=`find /media -anewer /var/tmp/usb.check -type f` CREATE=`find /media -cnewer /var/tmp/usb.check -type f` MODIFY=`find /media -newer /var/tmp/usb.check -type f` if [ ! -z "$ACCESS" ] then ACCESS="access "$ACCESS # Передача информации на сервер /usr/bin/curl -d "host=$(hostname)&serial=$2&name=$3&vendor=$4&file=$ACCESS&sub=true" --noproxy 10.0.40.16 http://10.0.40.16/usb/input.php fi if [ ! -z "$CREATE" ] then CREATE="create "$CREATE /usr/bin/curl -d "host=$(hostname)&serial=$2&name=$3&vendor=$4&file=$CREATE&sub=true" --noproxy 10.0.40.16 http://10.0.40.16/usb/input.php fi if [ ! -z "$MODIFY" ] then MODIFY="modify "$MODIFY /usr/bin/curl -d "host=$(hostname)&serial=$2&name=$3&vendor=$4&file=$MODIFY&sub=true" --noproxy 10.0.40.16 http://10.0.40.16/usb/input.php fi fi touch /var/tmp/usb.check # обновляем время sleep 5 # пауза done
Данный скрипт добавляется в автозапуск и работает в фоновом режиме.
Для получения выборки сохраненной информации написан php скрипт, выбирающий из БД записи за указанный период и по выбранным ПК. Пример вывод информации:
4. Распростренение по ПК
Т.к. ПК с сети расположено достаточно много, было решено сделать это в полу-автоматическом режиме. А именно: написан скрипт, который считывает из файла список ПК для распространения и передает на них необходимые файлы. Выполняется это с помощью утилит sshpass (для автоматического ввода пароля) и scp (копирование).
Для начала в /etc/ssh/ssh_config меняем директиву StrictHostKeyChecking:
Делается это для того, что бы ssh ключи автоматически добавлялись в список доверенных.
Непосредственно сам скрипт распространения:
#!/bin/bash while read line; do array[$index]="$line" index=$(($index+1)) done < hosts.conf for ((a=0; a < $; a++)) do remote=`echo $ | awk '< print $1 >'` echo "$remote begin"; /usr/bin/sshpass -p "root_password" /usr/bin/scp /home/user/usb_mon/usb.rules admin@$remote:/etc/udev/rules.d/usb.rules /usr/bin/sshpass -p "root_password" /usr/bin/scp /home/user/usb_mon/*.sh admin@$remote:/etc/udev/ /usr/bin/sshpass -p "root_password" /usr/bin/scp /home/user/usb_mon/boot.local admin@$remote:/etc/rc.d/boot.local echo "$remote end"; done
Т.к. некоторые ПК могут быть выключенными, запуск скрипта выполняется с выводом всей информации в лог и последующим анализом:
PS. Планы на будущее
- безопасность передачи информации при POST запросе
- убрать логирование служебных файлов (например Thumbs.db)
- теневое копирование файлов, над которыми были произведены какие-либо действия.
Как в Linux Astra узнать какие флешки подключались к компьютеру?
В операционной системе Linux, в том числе в дистрибутиве Astra Linux, существует несколько способов узнать, какие флешки (USB-накопители) были подключены к компьютеру. В этой статье мы рассмотрим несколько методов, включая использование командной строки и графического интерфейса пользователя (GUI).
Метод: Использование командной строки
Эта команда отобразит вывод команды dmesg, который содержит информацию о системных сообщениях, связанных с USB-устройствами. Команда grep используется для фильтрации вывода и поиска строк, содержащих ключевое слово «usb». В результате вы увидите список USB-устройств, подключенных к компьютеру, с указанием их идентификаторов и другой информации, такой как производитель, модель и серийный номер.
Метод: Использование утилиты lsusb
Эта команда отобразит список USB-устройств, подключенных к компьютеру, в формате, удобном для чтения. Вы увидите информацию о производителе, модели, идентификаторе устройства и других параметрах USB-устройств.
Метод: Использование графического интерфейса
Метод 3: Использование графического интерфейса пользователя (GUI) Astra Linux также предоставляет графический интерфейс пользователя (GUI) с инструментами для просмотра информации о подключенных USB-устройствах.
- Откройте файловый менеджер, такой как Dolphin или Nautilus, в зависимости от используемого окружения рабочего стола.
- В левой панели файлового менеджера найдите раздел «Другие места» или «Устройства» и щелкните на нем.
- Вы увидите список подключенных USB-устройств, которые могут быть отображены в виде иконок или названий устройств. Вы также можете открыть каждое устройство, чтобы увидеть его содержимое и другую информацию о нем.
Метод: Использование системного журнала
Эта команда отобразит системный журнал в режиме р «journalctl -f» означает, что журнал будет отслеживаться в режиме реального времени, что позволит вам видеть новые записи, связанные с USB-устройствами, по мере их появления в журнале.
- Подключите USB-устройство к компьютеру.
- В журнале будут появляться записи, связанные с подключением и распознаванием USB-устройства. Вы можете найти информацию о производителе, модели и других параметрах устройства в этих записях.
[ 347.269380] usb 2-2: new high-speed USB device number 4 using ehci-pci
[ 347.402234] usb 2-2: New USB device found, idVendor=0781, idProduct=5567
[ 347.402240] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 347.402243] usb 2-2: Product: Cruzer Blade
[ 347.402246] usb 2-2: Manufacturer: SanDisk
[ 347.402249] usb 2-2: SerialNumber: 4C530000290612104105
Bus 002 Device 004: ID 0781:5567 SanDisk Corp. Cruzer Blade
Это примеры вывода команд dmesg и lsusb, которые содержат информацию о подключенном USB-устройстве, такую как производитель, модель, идентификатор устройства и другие параметры.
Таким образом, в Linux Astra Linux есть несколько способов узнать информацию о подключенных USB-устройствах, включая использование командной строки и графического интерфейса пользователя (GUI). Эти методы могут быть полезными для отслеживания подключенных USB-устройств и получения информации о них в операционной системе Linux.