Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Введение. Что такое 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 acl |
или использовать для проверки и установки графический менеджер пакетов (см. Графический менеджер пакетов synaptic).
Для работы с ACL используемая файловая система должна быть смонтирована с опцией монтирования acl. Проверить текущие опции монтирования можно командой:
Command | ||
---|---|---|
| ||
Default mount options: user_xattr acl |
где /dev/sda1 — используемый для файловой системы дисковый раздел.
Файловые системы, монтируемые автоматически при загрузке ОС, обычно монтируются с поддержкой ACL (т. е. с опцей монтирования acl). Проверить опции монтирования, принятые по умолчанию, можно командой:
Command | ||
---|---|---|
| ||
default_mntopts = acl,user_xattr |
Для добавляемых вручную файловых систем опцию монтирования acl может понадобиться указать явно:
Command |
---|
sudo mount -o acl /dev/sdb1 /mnt |
Модель управления доступом ACL
При использовании ACL каждому ФО могут быть присвоены дополнительные правила доступа к этому ФО. Правила могут быть следующих типов:
user — правило определяет индивидуальные права доступа для указанного пользователя, например:
Блок кода user:admin:rwx
разрешает пользователю admin выполнять все операции с ФО ("rwx"). Таких правил у каждого ФО может быть несколько. Правило ACL типа user без указания имени пользователя соответствует правилу для пользователя-владельца ФО и является обязательным для любого ФО;
group — правило определяет индивидуальные права доступа для группы, например:
Блок кода group:kvm:r-x
разрешает участникам группы kvm выполнять чтение и исполнение ФО ("r-x"). Таких правил у каждого ФО может быть несколько. Правило ACL типа group без указания имени группы соответствует правилу для группы-владельца ФО и является обязательным для любого ФО;
other - права доступа для всех остальных:
Блок кода other::r--
Это правило единственное и обязательное для любого ФО. В этом правиле какое-либо имя отсутствует, и это правило соответствует правилу "прочие" базовой системы.
Для краткости название типа правила может сокращаться до первой буквы, а символы "-" - пропускаться:
Блок кода |
---|
u:admin:rwx g:kvm:rx о::r |
Кроме этих правил существуют правила типа mask (маска) и правила, определяющие применяемые по умолчанию правила ACL (default ACL) для новых создаваемых ФО (см. далее).
Назначение правил ACL ФО выполняется командой setfacl с опцией -m, например:
Command |
---|
setfacl -m u:username<имя_пользователя>:rwx filename |
Назначение применяемого по умолчанию правила (опция -d команды setfacl):
Command |
---|
setfacl -dm u:username:<имя_пользователя>:rwx dirname |
Получение правил ACL выполняется командой getfacl:
Command |
---|
getfacl filename |
Ограничения на количество правил ACL
Правила ACL хранятся в расширенных атрибутах файловых объектов. В рекомендованной для Astra Linux файловой системе ext4 количество правил ACL, которые можно присвоить одному ФО, ограничивается правилом: все расширенные атрибуты должны помещаться в один логический дисковый блок. Одно правило ACL занимает 8 байт, таким образом в стандартном логическом блоке теоретически может поместиться около 500 правил ACL. Это оценка максимального количества— максимально возможное количество. На практике следует помнить, что при работе в Astra Linux Special Edition мандатные атрибуты ФО также хранятся в расширенных атрибутах, кроме того расширенные атрибуты могут использоваться различными приложениями для хранения своих метаданных, что уменьшает пространство для хранения ACL.
Маски ACL и эффективные права
Маска ACL задает максимально возможное значение прав, что позволяет принудительно ограничить действие всех назначенных для ФО правил ACL.
Информация |
---|
Маска ACL не применяется к правам пользователя-владельца ФО и правам "других" ("other"). |
Маска содержит разрешенные для ФО операции. По умолчанию маска ФО создается автоматически при создании для ФО первого правила ACL, и изменяется автоматически по мере добавления новых правил, представляя собой объединение всех назначенных правил ACL (то есть маска, создаваемая по умолчанию, разрешает все операции, заданные правилами ACL, и не ограничивает работу правил ACL).
Получить значение маски можно командой:
Command |
---|
getfacl filename |
Например:
После выполнения команды создания правила ACL разрешающего только чтение ("r") для пользователя user1:
Command |
---|
setfacl -m u:user1:r filename |
маске ACL будет автоматически присвоено значение "r":
Command | ||
---|---|---|
| ||
... mask::r ... |
А после выполнения команды создания правила ACL разрешающего все операции ("rwx") для пользователя user2:
Command |
---|
setfacl -m u:user2:rwx filename |
маске ACL будет автоматически присвоено значение "rwx":
Command | ||
---|---|---|
| ||
... mask::rwx ... |
При необходимости ограничить права доступа маску можно задать принудительно, например, запретить все операции изменения, разрешенные с помощью ACL (опция -m команды setfacl):
Command |
---|
setfacl -m m:rx filename |
После принудительного задания маски проверка правил ACL ФО с помощью команды:
Command |
---|
getfacl filename |
покажет, что пользователь user2, которому правилами ACL разрешены любые действия, включая изменение объекта ("rwx"), теперь имеет эффективные (действующие) права, исключающие изменение объекта ("r-x"):
Command | ||
---|---|---|
| ||
... |
Применяемые по умолчанию правила ACL
Применяемые по умолчанию правила ACL обеспечивают механизм наследования прав доступа, удобный для управления правами дискреционного доступа к вложенным каталогам с их содержимым. Применяемые по умолчанию правила ACL могут быть установлены только на каталоги. Если на каталог установлены применяемые по умолчанию правила ACL, то всеми файловыми объектам, создаваемыми в этом каталог, наследуются эти правила ACL, причем каталогами правила наследуются как применяемые по умолчанию, файлами - как эффективные (с учетом действующей маски).
Предупреждение |
---|
Применяемые по умолчанию правила ACL:
|
Для создания применяемых по умолчанию правил ACL используется ключ -d команды setfacl, пример см. ниже.
Как это работает
Соответствие между правилами ACL и базовыми правами доступа
Разрешения доступа, определяемые правилами ACL имеют приоритет перед базовыми правами доступа.
Существует соответствие между пользователем-владельцем, группой-владельцем и прочими:
Права пользователя владельца представляются правилом ACL типа user без определения имени:
Блок кода u::rwx
- Права группы-владельца соответствуют:
- при наличии маски - значению, заданному маской;
при отсутствии маски - правилу ACL типа group без определения имени:
Блок кода g::r-x
- Права для прочих субъектов соответствуют правилу ACL типа other.
Это соотвествие однозначно: изменение базовых прав доступа всегда изменяет соответствующие им правила ACL, а изменение правил ACL изменяет соответствующие им базовые права.
Алгоритм проверки права доступа
После того, как субъект доступа запрашивает разрешение на выполнение операции чтения, изменения или исполнения/поиска с неким ФО, проверка выполняется по следующим правилам:
- Эффективный идентификатор субъекта доступа равен идентификатору пользователя-владельца ФО?
- Да:
- Соответствующее пользователю-владельцу правило ACL содержит разрешение на запрошенную операцию?
- Да: Доступ предоставляется;
- Нет: Доступ запрещается;
- Соответствующее пользователю-владельцу правило ACL содержит разрешение на запрошенную операцию?
- Нет:
- Существует правило ACL типа user, идентификатор пользователя в котором равен эффективному идентификатору субъекта доступа?
- Да:
- Разрешенные в этом правиле ACL права и права в маске ACL содержат разрешение на запрошенную операцию?
- Да: Доступ предоставляется;
- Нет: Доступ запрещается;
- Разрешенные в этом правиле ACL права и права в маске ACL содержат разрешение на запрошенную операцию?
- Нет:
- Для всех правил ACL типа group, идентификатор в которых равен эффективному идентификатору любой группы, включающей субъект доступа или равен идентификатору группы-владельца ФО:
- Существует маска ACL?
- Да:
- Маска и любое из соответствующих правил содержат разрешение на запрошенную операцию?
- Да: Доступ предоставляется;
- Нет: Доступ запрещается;
- Маска и любое из соответствующих правил содержат разрешение на запрошенную операцию?
- Нет:
- Любое из соответствующих правил содержит разрешение на запрошенную операцию?
- Да: Доступ предоставляется;
- Нет: Доступ запрещается;
- Любое из соответствующих правил содержит разрешение на запрошенную операцию?
- Да:
- Существует маска ACL?
- Правило ACL типа other содержит разрешение на запрошенную операцию?
- Да: Доступ предоставляется;
- Нет: Доступ запрещается.
- Для всех правил ACL типа group, идентификатор в которых равен эффективному идентификатору любой группы, включающей субъект доступа или равен идентификатору группы-владельца ФО:
- Да:
- Существует правило ACL типа user, идентификатор пользователя в котором равен эффективному идентификатору субъекта доступа?
- Да:
Создание файловых объектов
Правила ACL для ФО создаются при создании ФО любым из системных вызовов: creat(), mkdir(), mknod(), mkfifo(), open().
Если для каталога, содержащего создаваемый ФО, определены применяемые по умолчанию правила ACL, то:
- Создаваемый ФО наследует применяемые по умолчанию правила ACL;
- Правила ACL, соответствующие базовым правилам доступа к ФО, модифицируются так, чтобы они не содержали прав, не заданных параметром mode системного вызова
Если применяемые по умолчанию правила не заданы, то:
- Создаваемому ФО присваиваются правила ACL user, group и other, соответствующие базовым правилам, и их значения устанавливаются в соответствии с действующим параметром umask;
- Значения созданных правил изменяются, чтобы они не содержали прав, не заданных параметром mode системного вызова.
Изменения в инструментах для работы с файлами
- Для ФО, имеющих применяемые по умолчанию правила ACL, или имеющих более трех базовых правил ACL, инструмент ls при выводе данных в подробном формате (опция -l) добавляет символ "+" в конце строки прав доступа;
- Инструмент копирования файлов cp при использование опции -p старается также скопировать правила ACL, и выдает предупреждение, если это не удается;
- Инструмент перемещения файлов mv всегда пытается сохранить правила ACL. и выдает предупреждение, если это не удается.
Инструменты для работы с правилами ACL
Для работы с ACL доступны два инструмента командной строки:
- setfacl — установка правил ACL файловых объектов;
- getfacl — получение правил ACL файловых объектов.
Полная информация по опциям этих инструментов доступна в справочной системе man:
Command |
---|
man acl man setfacl man getfacl |
Далее приводятся примеры типичных операций с правилами ACL.
Примеры команд управления 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 |
---|
setfacl -x u:<имя_пользователя> <имя_ФО> |
Установить для указанного каталога правило ACL и применяемые по умолчанию правила ACL. Устанавливаются права на чтение и исполнение ("r-x") для указанного пользователя:
Command |
---|
setfacl -m u:<имя_пользователя>:r-x <имя_ФО> setfacl -d -m u:<имя_пользователя>:r-x <имя_ФО> |
Удалить правила ACL указанного ФО, применяемые по умолчанию:
Command |
---|
setfacl -k <имя_ФО> |
Установить правила ACL из конфигурационного файла. Конфигурационный файл задается в формате вывода команды getfacl. Пример конфигурационного файла:
Блок кода |
---|
# file: filename # owner: root # group: root user::rwx user:username1:r-x group::--- mask::r-x other::--- # file: filename # owner: root # group: root user::rwx user:username2:r-- group::--- mask::r-- other::--- |
Команда для установки правил ACL:
Command |
---|
setfacl --restore=acl.txt |
Установить правило ACL, запрещающее указанному пользователю доступ к указанному ФО:
Command |
---|
setfacl -m u:<имя_пользователя>:0 <имя_ФО> |
Пример использования наследования ACL
В примере создается и настраивается каталог, содержимое которого доступно одновременно двум пользователям. При создании файлов новые файлы получают свои базовые атрибуты (пользователь-владелец и группа-владелец), и вдобавок получают унаследованные правила ACL. Такая организация прав доступа может применяться при совместной работе над проектами.
Содание каталога:
Command |
---|
mkdir <имя_каталога> |
Настройка правил ACL и применяемых по умолчанию правил ACL для пользователя 1:
Command |
---|
setfacl -m u:<имя_пользователя1>:7 <имя_каталога> |
Настройка правил ACL и применяемых по умолчанию правил ACL для пользователя 2:
Command |
---|
setfacl -m u:<имя_пользователя2>:7 <имя_каталога> setfacl -d -m u:<имя_пользователя2>:7 <имя_каталога> |
Как упоминалось выше, заданные для каталога применяемые по умолчанию правила ACL не действуют на сам каталог, поэтому правила ACL на каталог должны быть установлены отдельной командой.