Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Common Edition 2.12
Постановка задачи
На компьютере под управлением Astra Linux требуется настроить разделение прав прямого доступа пользователей к оптическим дискам. При этом должны быть разграничены права пользователей на прямое копирование и запись оптических дисков.
Особенности применения
Приводы оптических дисков представлены устройствами /dev/sr* с дискретными правами доступа на чтение и запись для владельца root и группы cdrom:
brw-rw----+ 1 root cdrom 11, 0 авг 4 08:05 /dev/sr0
brw-rw----+ 1 root cdrom 11, 1 авг 4 08:05 /dev/sr1
getfacl: Removing leading '/' from absolute path names
# file: dev/sr0
# owner: root
# group: cdrom
user::rw-
user:<имя_пользователя>:rw-
group::rw-
mask::rw-
other::---
# file: dev/sr1
# owner: root
# group: cdrom
user::rw-
user:<имя_пользователя>:rw-
group::rw-
mask::rw-
other::---
Решение
Для отключения автоматически предоставляемого общего доступа следует отменить назначение ACL, этот доступ разрешающий, то есть удалить тэг uaccess из атрибутов устройства. Для этого:
Создать правило udev, которое будет выполняться после правила 70-uaccess.rules и удалять тэг uaccess. Например, создать файл 71-uaccess-astra.rules (порядок выполнения правил определяется алфавитной сортировкой имен файлов с правилами). Файл разместить в том же каталоге, в котором находится правило 70-uaccess.rules. Пример правила:
SUBSYSTEM=="block", KERNEL=="sr[0-9]*", TAG-="uaccess", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
В правиле:
- команды SUBSYSTEM=="block", KERNEL=="sr[0-9]*" выбирают блочные устройства с именем sr*;
команда TAG-=uaccess удаляет ранее назначенный тэг uaccess
- команда RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'" выполняет запись в системный журнал (необязательное действие);
Для того, чтобы указанное выше правило работало корректно следует удалить ранее назначенные устройству ACL. Для этого можно перезагрузить компьютер.
Удаление ACL, назначенных systemd, командой setfacl из сессии администратора не работает. ACL должны быть удалены с помощью правила udev.Для того чтобы ACL удалялись автоматически без перезагрузки компьютера при смене носителя можно привести правило к виду:
SUBSYSTEM=="block", KERNEL=="sr[0-9]*", TAG-="uaccess", RUN+="/usr/bin/setfacl -b %E{DEVNAME}", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
В правило добавлена команда RUN+="/usr/bin/setfacl -b %E{DEVNAME}" удаляющая все ранее назначенные ACL. Для применения этого правила достаточно сменить носитель в приводе.
После выполнения указанных действий прямой доступ к оптическим дискам на чтение и запись будет разрешен только суперпользователю (sudo) и пользователям, входящим в группу cdrom.
Для более точного разделения прав дополнительно можно определить права только на прямое чтение без права прямой записи. Для этого:
Создать группу, которой будет разрешено чтение. При работе в домене это может быть доменная группа, или это может быть локальная группа, например, локальная группа cdrom_ro:
sudo groupadd --system cdrom_roВ правиле 71-uaccess-astra.rules назначить устройству (устройствам) ACL, разрешающий чтение участникам группы cdrom_ro, для чего привести правило к виду:
SUBSYSTEM=="block", KERNEL=="sr[0-9]*", TAG-="uaccess", RUN+="/usr/bin/setfacl -b %E{DEVNAME} ; /usr/bin/setfacl -m g:cdrom_ro:r %E{DEVNAME}", RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
В правило добавлена команда /usr/bin/setfacl -m g:cdrom_ro:r %E{DEVNAME предоставляющая права на чтение участникам группы cdrom_ro;
- Для применения правила сменить носитель в приводе.
После выполнения указанных действий прямой доступ к оптическим дискам на чтение и запись будет разрешен суперпользователю (sudo) и пользователям, входящим в группу cdrom, а также разрешен доступ на чтение пользователям, входящим в группу cdrom_ro.
Проверка корректности работы
При правильно настроенных правах доступа:
Команда прямого чтения носителя должна успешно выполняться от имени суперпользователя (sudo), пользователей, входящих в группу cdrom или cdrom_ro и не должна выполняться от имени остальных пользователей. Пример команды:
dd if=/dev/sr0 of=`mktemp` count=100- Запись образов на носитель должна успешно выполняться от имени суперпользователя (sudo) и пользователей, входящих в группу cdrom не должна выполняться от имени остальных пользователей. Примеры команд записи образов см. в статье Запись оптических дисков в Astra Linux.