2.4.7.4.4 Настройка принадлежности USB-накопителей
Скачать документВ данной статье будет рассмотрен пример разграничения правил для разных пользователей.
Сначала необходимо создать udev-правило, содержащее разрешения на определенные usb-устройства, по выбранным пользователем параметрам.
nano /etc/udev/rules.d/80-alloweduserlist1.rules
ACTION!="add", GOTO="dont_remove_usb"
ENV{DRIVER}!="usb-storage", GOTO="dont_remove_usb"
ATTRS{product}=="USB DISK 2.0",GOTO="dont_remove_usb"
ENV{DRIVER}=="usb-storage",RUN+="/bin/python3 /usr/local/bin/remove_usb.py $devpath"
LABEL="dont_remove_usb"
ENV{DRIVER}=="usb-storage", ENV{UDISKS_AUTO}="0"
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount-list1@%k.service"
KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop usb-mount-list1@%k.service"
Затем необходимо создать скрипт для запрета монтирования устройств со следующим содержимым:
nano /usr/local/bin/remove_usb.py
#!/usr/bin/python3
import os
import sys
var = sys.argv[1].strip()
var2 = os.popen(f"echo {var} | sed 's/.*usb[[:digit:]]//' | sed 's/[a-z].*//'| sed 's/[0-9]-[0-9].//'").readlines()[0]
os.system(f"echo 0 > '/sys/bus/usb/devices{var2.strip()}authorized'")
Далее создайте сервис, отвечающий за запуск скрипта, проверяющего список доступных пользователей для данного udev-правила.
nano /etc/systemd/system/usb-mount-list1@.service
[Unit]
Description=Mount USB Drive on %i
[Service]
RemainAfterExit=true
Type=oneshot
ExecStart=/usr/bin/python3 /usr/local/bin/usb-mount.py add %i /etc/udev/rules.d/80-alloweduserlist1.rules
ExecStop=/usr/bin/python3 /usr/local/bin/usb-mount.py remove %i /etc/udev/rules.d/80-alloweduserlist1.rule
Следующим этапом формируется список разрешенных пользователей.
Допустимые значения umask:
- 0 - rwx - полные права; rw - чтение/запись;
- 2 - r - чтение.
Создайте список разрешенных пользователей (в примере user1 c правами на чтение) без проверки на группы:
mkdir /etc/udevlist nano /etc/udevlist/userlist1.json
{"user1": 2}
Если необходимо указать несколько пользователей, список указывается в виде {"user1": 2, "user2": 0, ...}
.
Затем создайте файл соответствия udev-правила со списком разрешенных пользователей:
nano /etc/udevlist/listudev.json
со следующим содержимым:
{"/etc/udev/rules.d/80-alloweduserlist1.rules": "/etc/udevlist/userlist1.json"}
Создайте список разрешенных групп:
mkdir /etc/udevlist/group/ nano /etc/udevlist/group/grouplist1.json
{}
Если в правиле необходимо использовать разграничение по группам, список указывается в виде {"name_group1": 0, "name_group2": 2}
.
После этого создайте файл соответствия udev-правила со списком разрешенных групп:
nano /etc/udevlist/group/listudev.json
со следующим содержимым:
{"/etc/udev/rules.d/80-alloweduserlist1.rules": "/etc/udevlist/group/grouplist1.json"}
Создайте файл для других списков, если используются:
mkdir /etc/udevlist/otherlists/ nano /etc/udevlist/otherlists/otherlists1.json
с содержимым вида:
{"others": 7}
После этого создайте файл соответствия udev-правила с новым списком:
nano /etc/udevlist/group/listudev.json
со следующим содержимым:
{"/etc/udev/rules.d/80-alloweduserlist1.rules": "/etc/udevlist/otherlists/otherlists1.json"}
Затем загрузите скрипт проверки доступа пользователей и монтирования устройств, распакуйте архив и переместите файл скрипта в каталог /usr/local/bin/:
wget https://redos.red-soft.ru/upload/usb-mount.zip unzip ./usb-mount.zip -d /usr/local/bin/
Для применения настроек перезапустите службы командой:
systemctl daemon-reload
Дата последнего изменения: 03.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.