Дерево страниц

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

Ключ

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

Оглавление


Информация
titleДанная статья применима к:
  • Astra Linux



Введение. Что такое ACL

Списки управления доступом (Access Control Lists, ACL) предоставляют администраторам ОС Astra Linux расширенные возможности точного определения индивидуальных правил дискреционного доступа к файловым объектам (далее — ФО). При использовании ACL правила могут быть заданы индивидуально для любых пользователей и/или групп пользователей, дополняя и расширяя базовый механизм «пользователь-владелец — группа-владелец - прочие».

С помощью ACL доступ может быть предоставлен пользователю или группе независимо от доступа других пользователей, участия в группах и предоставления доступа к иным ФО. Дополнительно появляются:

  • механизм Механизм масок, позволяющий ограничивають права доступа;

  • механизм Механизм наследования ACL (ACL по умолчанию), позволяющий определять порядок присвоения атрибутов доступа создаваемым новым ФО.

Обозначения

Дискреционные права доступа управляют возможностью выполнения следующих операций:

  • чтение Чтение (read, буквенный код r, числовой код 4, битовая маска 100);

  • изменение Изменение (write, буквенный код w, числовой код 2, битовая маска 010);

  • выполнение Выполнение (execute, буквенный код x, числовой код 1, битовая маска 001).

Набор прав может обозначаться строками, числами и битовыми масками, при этом на первом месте всегда операция "чтение", на втором — операция "изменение" и на третьем — операция "выполнение". Порядок записи:

  • При обозначении символьной строкой каждое из прав обозначается соответствующим ему буквенным кодом, а отсутствие права — символом «-» в соответствующе соответствующей позиции, например:

    • rwx — разрешены все операции;

    • r-x — разрешены операции чтения и выполнения (r и x), Э а операция изменения запрещена;

  • При обозначении числами используются суммы числовых кодов разрешенных прав, например:

    • буквенному коду rwx соответствует число 7 (4+2+1);

    • буквенному коду r-x соответствует число 5 (4+1);

  • При обозначении битовыми масками суммируются битовые маски разрешенных прав:

    • буквенному коду rwx соответствуют число 7 и битовая маска 111;

    • буквенному коду r-x соответствуют число 5 и битовая маска 101.

Для каждого ФО базовые дискреционные права доступа определяются для трех субъектов доступа:

  • Пользователь-владелец;

  • Группа-владелец;

  • Прочие;

Соответственно, полный набор прав ФО может быть представлен:

  • Символьной строкой из 9 символов, по три символа для каждого субъекта доступа:

    Блок кода
    rwxr-xr-x
    ;


  • Числом из трех восьмеричных цифр, по одной цифре для каждого субъекта доступа:

    Блок кода
    755
    ;


  • Битовой маской, по три бита для каждого субъекта доступа:

    Блок кода
    111 101 101


При этом В любом способе представления на первом месте всегда записываются права пользователя-владельца, на втором — права группы-владельца, на третьем — прочих субъектов доступа.

Базовая модель управления дискреционным доступом к ФО

Как указано выше, каждому ФО присваивается набор из трех групп прав доступа:

  • Для пользователя-владельца (user);

  • Для группы-владельца (group);

  • Для прочих (other).

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

  • Либо сменить пользователя-владельца — тогда доступ потеряется у исходного пользователя-владельца;

  • Либо включить нового пользователя в группу-владельца - но тогда этот пользователь получит доступ ко всем ФО, у которых владельцем является эта группа;

  • Либо разрешить доступ «всем остальным», но доступ будет предоставлен всем, а не только новому пользователю.

Такая точность управления доступом недостаточна для решения практических задач, поэтому в дополнение к базовым атрибутам используются списки управления доступом (Access Control Lists, ACL).

Создание новых ФО и umask

При создании новых ФО в рамках базовой модели по умолчание умолчанию применяются следующие права доступа:

  • Для файлов: 666 т.е для всех субъектов доступа разрешены чтение и изменение;

  • Для каталогов: 777, т.е для всех разрешено субъектов доступа разрешены чтение, запись и изменение и выполнение (операция "выполнение" для каталогов имеет значение «поиск в каталогах»"поиск ФО, находящихся в каталоге");

Однако внутри системных вызовов, создающих файловые объекты, к запрошенным по умолчанию правам доступа применяется системное значение umask - маски режима создания файлов.

Umask — это битовая маска, в которой единичные биты обозначают запрет выставления соответствующего бита разрешения. По умолчанию значение umask равно 022, то есть:

  • Для файлов при запрошенных для принятых по умолчанию правах прав доступа 666 (rw-rw-rw-, 110 110 110) после применения umask 022 (000 010 010) файл будет создан с правами 644 (rw-r--r--, 110 100 100):

    Блок кода
     110 110 110

    
    -
     000 010 010

    
    =
     110 100 100


  • Для каталогов при запрошенных для принятых по умолчанию правах прав доступа 777 (rwxrwxrwx, 111 111 111) после применения umask 022 (000 010 010) файл будет создан с правами 755 (rwxr-xr-x, 111 101 101):

    Блок кода
     111 111 111

    
    -
     000 010 010

    
    =
     111 101 101


Umask применяется в текущей среде исполнения. Получить текущее значение umask можно командой:

Command
umask

Изменить значение umask можно командой umask с указанием нового значения:

Command
umask 077

В приведенном примере команды устанавливается значение umask равное 077, то есть:

  • Файлы будут создаваться с правами по умолчанию 600 (rw-------, 110 000 000), т.е. будет применяться полный запрет доступа всем, кроме пользователя-владельца);

  • Каталоги будут создаваться с правами по умолчанию правами  700 (rwx------, 111 000 000),  также полный запрет доступа всем, кроме пользователя-владельца);

Поддерживает ли используемая ОС работу с ACL

На момент написания данной статьи все варианты исполнения Astra Linux поддерживают работу с  ACL на уровне ядра. Также работа с ACL поддерживается рекомендованной к использованию в Astra Linux файловой системой ext4 (ACL также поддерживается файловыми системами Btrfs, ext2, ext3, xfs и др.).

Инструменты командной строки для работы с ACL содержатся в пакете acl и при стандартной установке Astra Linux устанавливаются по умолчанию.

При работе в командной строке проверить наличие пакета можно командой

Command
apt-cache policy acl


Установить пакет можно командой:

Command
sudo apt install
ac
acl

или использовать для проверки и установки графический установщик пакетов.

Для работы с ACL используемая файловая система должна быть смонтирована с опцией монтирования acl. Проверить текущие опции монтирования можно командой:

Command
Titlesudo tune2fs -l /dev/sda1 | grep "Default mount options"

Default mount options: user_xattr acl

где /dev/sda1 — используемый для файловой системы дисковый раздел.

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

Command
Titlegrep acl /etc/mke2fs.conf

default_mntopts = acl,user_xattr


Для добавляемых вручную файловых систем опцию монтирования acl может понадобиться указать явно:

Command
sudo mount -o acl /dev/sdb1 /mnt

Модель управления доступом ACL

При использовании ACL каждому ФО могут быть присвоены дополнительные записи прав правила доступа к этому ФО. Записи Правила могут быть следующих типов:

  • user — запись правило определяет индивидуальные права доступа для указанного пользователя, например:

    Блок кода
    user:admin:rwx

    разрешает пользователю admin выполнять все операции с ФО.;

  • group — правило определяет индивидуальные права для группы, например:

    Блок кода
    group:kvm:r-x


  • other -права для всех остальных;

Название типа правила может сокращаться до первой буквы:

Блок кода
Кроме того, существуют записи
u:admin:rwx
g:kvm:r-x

Кроме этих правил существуют правила типа mask (маска) и

записи

правила, определяющие принятые по умолчанию правила ACL (default ACL) для новых создаваемых ФО (см. далее).

Назначенение правил ACL ФО выполняется командой setfacl с оопцией -m, например:

Command
setfacl -m u:username:rwx filename


Получение правил ACL выполняется командой getfacl:

Command
getfacl filename

Маски ACL и эффективные права

Маска ACL позволяет принудительно ограничить действие всех назначенных для ФО прав правил ACL. Маска содержит разрешенные для ФО операции. По умолчанию маска ФО создается автоматически при создании для ФО первого правила ACL объекта, и изменяется автоматически по мере добавления новых правил, представляя собой объединение всех назначенных правил ACL (то есть маска, создаваемая по умолчанию, разрешает все операции, заданные правилами ACL, и не ограничивает работу правил ACL).

Получить значение маски можно командой:

Command
getfacl filename

Например, после выполнения команды::

После выполнения команды создания правила ACL разрешающего только чтение ("r") для пользователя user1:

Command
setfacl -m u:user1:r filename

маске ACL будет автоматически присвоено значение "r":

Command
Titlegetfacl filename
...
mask::r
...


А после выполнения команды создания правила ACL разрешающего все операции ("rwx") для пользователя user2:

Command
setfacl -m u:user2:rwx filename

маске ACL будет автоматически присвоено значение "rwx":

Command
Titlegetfacl filename
...
mask::rwx
...

При необходимости ограничить права доступа маску можно задать принудительно, например, запретить все операции изменения, разрешенные с помощью ACL:

Command

setfacl -m m:rx filename

После принудительного задания маски проверка ACL ФО с помощью команды:

Command
getfacl filename

покажет, что пользователь user2, которому ранее правилами ACL было разрешено были разрешены любые действия, включая изменение объекта ("rwx"), теперь имеет эффективные (действующие) права, исключающие изменение объекта ("r-x"):

Command
Titlegetfacl filename

...
user:user2:

rwx #effective

rwx               #effective:r-x
...

Применяемые по умолчанию правила ACL

Применяемые по умолчанию правила ACL обеспечивают механизм наследования прав доступа, удобный для управлять управления правами дискреционного доступа к вложенным каталогам с их содержимым. Применяемые по умолчанию правила ACL могут быть установлены только на каталоги. Если на каталог установлены применяемые по умолчанию правила ACL, то при любой вложенности каталогов всеми файловыми объектам, создаваемыми в этом каталоге наследуются эти правила ACL.

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


Предупреждение

Создавать ФО можно разными способами, и от выбранного способа будет зависеть презультат применения назначенных по умолчанию правила ACL.

Например:

  • При создании нового файлового объекта командой touch ему будут назначены правила ACL, полученные логической операцией ИЛИ из применяемых по умолчанию правил ACL и маски ACL, а бит выполнения будет всегда обнулен.

    Предупреждение
Важно: независимо
  • Независимо от применяемых по умолчанию правил ACL бит
исполнения
  • выполнения в новом объекте всегда обнулен и для исполняемых файлов должен быть установлен явно.


  • При копировании файла (команда cp) в общем случае сначала создается пустой файл с явно задаваемыми атрибутами доступа,

копирующими исходный файл
  • копирующими  атрибуты доступа исходного файла. Назначаемые по умолчаню правила ACL при этом применяться не

будет
  • будут, а новый файл будет иметь копию атрибутов доступа исходного файла.
    При этом в команде cp предусмотрена специальная опция -p (--preserve=mode), имеющая следующее действие:

    • При отсутствии назначаемых по умолчанию правил ACL файл-копия получит атрибуты исходного файла минус значение umask;

    • При наличии назначаемых по умолчанию правил ACL файлу-копия получит набор атрибутов, являющихся пересечением назначаемых по умолчанию ACL и набора атрибутов исходного файла

(см. POSIX 1003
    • .

1e/2c draft standard).
Важно: если

    • Е
      сли в назначаемых по умолчанию правилах ACL бит

исполнения
    • выполнения не разрешен, то и в копии он будет не разрешен.

Для создания применяемых по умолчанию правил ACL используется ключ -d команды setfacl, пример см. ниже.

Работа с ACL

Для работы с ACL доступны два инструмента командной строки:

  • setfacl — установка правил ACL файловых объектов;
  • getfacl — получение правил ACL файловых объектов.

Полная информация по опциям этих инструментов доступна в справочной системе man:

Command
man acl
man setfacl
man getfacl

Далее приводятся примеры типичных операций с правилами ACL.

Примеры

Разрешить Создать правило ACL, разрешающее операцию чтения ("r") указанного ФО указанному пользователю:

Command
setfacl -m u:<имя_пользователя>:r <имя_ФО>

Получить правила ACL указанного ФО:

Command
getfacl <имя_ФО>

Разрешить операцию записи Создать правила ACL, разрешающие операцию изменения ("w") указанному пользователю для указанного каталога и входящих в этот каталог ФО рекурсивно:

Command
setfacl -R -m u:<имя_пользователя>:w <имя_каталога>

Разрешить Создать правило ACL, разрешающее операции чтения и записи изменения ("rw") указанной группе пользователей:

Command
setfacl -m g:<имя_группы>:rw <имя_ФО>

Удалить все правила ACL указанного ФО:

Command
setfacl -b <имя_ФО>

Удалить правила ACL указанного пользователя для указанного ФО:

Command
root@dlp:~#
setfacl -x u:
debian /home/test.txt
<имя_пользователя> <имя_ФО>

Установить для указанного каталога правило ACL и применяемые по умолчанию ACL, применяемые по умолчанию при создании новых ФО в этом каталогеправила ACL. Устанавливаются права на чтение и исполнение выполнение ("r-x") для указанного пользователя:

Command
setfacl -m u:<имя_пользователя>:r-x <имя_ФО>
setfacl -d -m u:<имя_пользователя>:r-x <имя_ФО>

Удалить правила ACL указанного каталогаФО, применяемые по умолчанию:

Command
setfacl -k <имя_
каталога>
ФО>

Установить правила ACL из конфигурационного файла. Конфигурационный файл задается в формате вывода команды getfacl. Пример конфигурационного файла:

Блок кода
# file:
/home/testdir
#
 filename
# owner: root


# group: root


user::rwx


user:
debian
username1:r-x


group::---


mask::r-x


other::---



# file:
/home/test.txt
#
 filename
# owner: root


# group: root


user::rwx


user:
debian
username2:r--


group::---


mask::r--


other::---

Команда для установки правил ACL:

Command
setfacl --restore=acl.txt

Запрет Установить правило ACL, запрещающее указанному пользователю доступа к указанному ФО:

Command
setfacl -m
user
u:<имя_пользователя>:0 <имя_ФО>

Пример использования наследования ACL

В примере создается и настраивается каталог, содержимое которого доступно одновременно двум пользователям. При создании файлов они сохраняют новые файлы получают свои базовые атрибуты (пользователь-владелец и группа-владелец), и вдобавок получают унаследованные правила ACL. Такая организация прав доступа может применяться при совместной работе над проектами.

Содание каталога:

Command
mkdir <имя_каталога>

Настройка правил ACL и DACL применяемых по умолчанию правил ACL для пользователя 1:

Command

setfacl -m u:<имя_пользователя1>:7 <имя_каталога>
setfacl -d -m u:<имя_пользователя1>:7 <имя_каталога>

Настройка правил ACL и DACL применяемых по умолчанию правил ACL для пользователя 2:

Command
setfacl -m u:<имя_пользователя2>:7 <имя_каталога>
setfacl -d -m u:<имя_пользователя2>:7 <имя_каталога>

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

В базовой модели управления дискрецонным доступом к ФО для каждого ФО используется один и только один набор «пользовател-группа-другие». В такой модели управления доступом чтобы предоставить доступ к ФО другому пользователю, не являющемуся пользователем-владельцем, нужно:

  • либо сменить пользователя-владельца — тогда доступ потеряется у исходного пользователя-владельца;

  • либо включить нового пользователя в группу-владельца - но тогда этот пользователь получит доступ ко всем ФО, у которых владельцем является это группа;

  • либо разрешить доступ «всем остальным», но доступ будет предоставлен всем, а не только новому пользователю.

Такая точность управления доступом недостаточна для решения практических задач, поэтому в дополнение к базовым атрибутам используются списки управления доступом (Access Control Lists, ACL).

Базовые атрибуты доступа ФО можно получить с помощью команды:
ls -l <имя_ФО>

При наличии ACL команда получения атрибутов доступа ls добавляет симовол «+» в конце строки атрибутов.

Подробную информацию о ACL ФО можно получить с помощью команды:
getfacl <имя_ФО>
подробнее см. ниже.