Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Special Edition РУСБ.10015-16 исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12


Постановка задачи

На компьютере под управлением Astra Linux требуется настроить разделение прав прямого доступа пользователей к оптическим дискам. При этом должны быть разграничены права пользователей на прямое чтение (копирование) и запись оптических дисков.

Предупреждение
Приведенные ниже правила ограничивают только прямой доступ к носителям (доступ к данным, находящимся на устройствах накопителям информации, использующим в качестве носителя информации оптические диски (устройства /dev/sr*). Права на монтирование оптических дисков и файловых систем таких устройств и права доступа к примонтированным файловым системам управляются отдельно. Доступ к носителям может быть отдельно ограничен для учтенных носителей и при работе в сессиях с ненулевой классификационной меткой. Подробнее  см. Съемные носители устройства хранения данных в Astra Linux.

Особенности применения

Приводы оптических дисков представлены устройствами /dev/sr* с дискретными дискреционными правами доступа на чтение и запись для пользователя root (владельца root ) и группы cdrom:

Command
Titlels -l /dev/sr*

brw-rw----+ 1 root cdrom 11, 0 авг  4 08:05 /dev/sr0
brw-rw----+ 1 root cdrom 11, 1 авг  4 08:05 /dev/sr1

При этом В дополнение к правам доступа, предоставляемым владельцу и группе, прямой доступ на чтение и запись к таким этим устройствам по умолчанию предоставляется всем пользователям автоматически при входе пользователя в сессию. Это делается с помощью правила UDEV правил UDEV и служб systemd:

  1. Правило UDEV, присваивающее устройству тег uaccess. Это правило /usr/lib/udev/rules.d/70-uaccess.rules (
правила
  1. правило /lib/udev/rules.d/70-uaccess.rules для Astra Linux выпущенных ранее обновления x.7). В указанном правиле перечислены различные
устройства
  1. типы устройств, доступ к которым должен быть общим. При подключении
таких
  1. устройств такого типа правило присваивает устройству тег uaccess.
  2. Правило UDEV, присваивающее устройствам, имеющим тег uaccess, списки доступа (ACL), разрешающие доступ из сессий активных пользователей. Это правило 73-seat-late.rules, расположенное в том же каталоге, что и правило 70-uaccess.rules
присваивает устройству тэг uaccess. Тэг обрабатывается
  1. . Подробнее про ACL см. статью Списки управления доступом к файловым объектам (ACL) в Astra Linux.
  2. Далее наличие тега uaccess проверяется службами systemd при входе в пользовательскую сессию и
таким
  1. устройствам, имеющим тег, присваивается атрибут ACL (см. Списки управления доступом к файловым объектам (ACL) в Astra Linux) разрешающий пользователю прямое чтение и запись.

Из сессии пользователя права доступа к устройству выглядят так:

Command
Titlegetfacl /dev/sr0

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::---

Где строка user:<имя_пользователя>:rw- задает индивидуальное разрешение прямого чтения и прямой записи для указанного в ней пользователя.

Решение

Для отключения автоматически предоставляемого общего доступа следует отменить назначение ACL, этот доступ разрешающий, то есть удалить тэг тег uaccess из атрибутов устройства. Для этого:

  1. Создать правило udev, которое будет выполняться после правила 7073-seat-uaccesslate.rules и удалять тэг uaccess(переназначать) ACL. Например, создать файл 7174-uaccess-astra.rules (порядок выполнения правил определяется алфавитной сортировкой имен файлов с правилами). Файл разместить в том же каталоге, в котором находится правило 7073-seat-uaccesslate.rules. Пример правилаПример правила:

    Блок кода
    SUBSYSTEM=!="block", KERNEL=GOTO="END"
    KERNEL!="sr[0-9]*", TAG-GOTO="uaccessEND", 
    RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
    LABEL="END"

    Данное правило не выполняет никаких действий кроме записи в журнал. В В правиле:

    1. команды SUBSYSTEM=="block", KERNEL=="sr[0-9]*" выбирают блочные устройства с именем sr*;команда TAG-=uaccess удаляет ранее назначенный тэг uaccess
    2. команда RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'" выполняет запись в системный журнал (необязательное действие);
  2. Для того, чтобы при входе пользователя устройству автоматически не назначалось разрешение доступа для этого пользователя удалить тег uaccess:
    Блок кода
    SUBSYSTEM!="block", GOTO="END"
    KERNEL!="sr[0-9]*", GOTO="END"
    TAG-="uaccess"
    RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
    LABEL="END"
  3. Для того, чтобы правило удаляло ранее назначенные устройству ACL привести правило к следующему виду: указанное выше правило работало корректно следует удалить ранее назначенные устройству ACL. Для этого можно перезагрузить компьютер.

    Предупреждение
    Удаление ACL, назначенных systemd, командой setfacl из сессии администратора не работает. ACL должны быть удалены с помощью правила udev.

    Для того чтобы ACL удалялись автоматически без перезагрузки компьютера при смене носителя можно привести правило к виду: 

    Блок кода
    SUBSYSTEM=!="block", GOTO="END"
    KERNEL!=="sr[0-9]*", GOTO="END"
    TAG-="uaccess", 
    RUN+="/usr/bin/setfacl -b %E{DEVNAME}", 
    RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
    LABEL="END"

    В правило добавлена команда RUN+="/usr/bin/setfacl -b %E{DEVNAME}" удаляющая все ранее назначенные ACL. Для применения этого правила достаточно сменить носитель в приводе.

После выполнения указанных действий прямой доступ к оптическим дискам на чтение и запись будет разрешен только суперпользователю (sudo) и пользователям, входящим в группу cdrom.

Для более точного разделения прав дополнительно можно определить права только на прямое чтение без права прямой записи. Для этого:

  1. Создать группу пользователей, которой будет разрешено чтение. При работе в домене это может быть доменная группа (см. документацию на используемый домен), или это может быть локальная группа, например, локальная группа cdrom_ro. Создать локальную группу:

    Command
    sudo groupadd --system cdrom_ro


  2. В правиле 7174-uaccess-astra.rules назначить устройству (устройствам) ACL, разрешающий чтение участникам группы cdrom_ro, для чего привести правило к виду:

    Блок кода
    SUBSYSTEM=!="block", KERNEL=GOTO="END"
    KERNEL!="sr[0-9]*", GOTO="END"
    TAG-="uaccess", 
    RUN+="/usr/bin/setfacl -b %E{DEVNAME} ; "
    RUN+="/usr/bin/setfacl -m g:cdrom_roro@ipadomain0.ru:r %E{DEVNAME}", 
    RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
    LABEL="END"

    В правило добавлена команда  /usr/bin/setfacl -m g:cdrom_ro:r %E{DEVNAME предоставляющая права на чтение участникам группы cdrom_ro;

  3. Для применения правила сменить носитель в приводе.

После выполнения указанных действий прямой доступ к оптическим дискам на чтение и запись будет разрешен суперпользователю (sudo) и пользователям, входящим в группу cdrom, а также разрешен доступ на чтение пользователям, входящим в группу cdrom_ro.

Разграничение прав доступа при работе в доменах

При работе в доменах (FreeIPA, Samba, ALD, Windows AD) для разграничения доступа рекомендуется использовать доменные группы.  Принципы их применения аналогичны изложенным выше принципам применения локальных групп. При этом для разрешения записи можно использовать несколько модифицированное правило для разрешения чтения:

Блок кода
SUBSYSTEM!=="block", KERNEL=GOTO="END"
KERNEL!="sr[0-9]*", GOTO="END"
TAG-="uaccess", 
RUN+="/usr/bin/setfacl -b %E{DEVNAME} ; "
RUN+="/usr/bin/setfacl -m g:domain_cdrom_rwrw@ipadomain0.ru:rw %E{DEVNAME}", 
RUN+="/usr/bin/logger 'Astra UDEV: set access for device %E{DEVNAME}'"
LABEL="END"

Отличие от ранее приведенного правила, разрешающего чтение:

  • использовано имя группы domain_cdrom_rw;
  • устройству присваивается ACL разрешающий и чтение и запись: g:domain_cdrom_rw:rw.

Проверка корректности работы

При правильно настроенных правах доступа:

  1. Команда прямого чтения носителя должна успешно выполняться от имени из сессий суперпользователя (sudo) , и пользователей, входящих в группу группы cdrom или cdrom_ro и не должна выполняться от имени из пользовательских сессий остальных пользователей. Пример команды прямого чтения:

    Command
    dd if=/dev/sr0 of=`mktemp` count=100


  2. Запись образов на носитель должна успешно выполняться от имени из сессий суперпользователя (sudo) и пользователей, входящих в группу cdrom не должна выполняться от имени из сессий остальных пользователей. Примеры команд записи образов см. в статье Запись оптических дисков в Astra Linux.