POSIX ACL
POSIX ACL — это механизм разграничения доступа к файлам и каталогам в операционных системах, совместимых со стандартом POSIX (Portable Operating System Interface), расширяющий базовую модель прав доступа (владелец, группа, остальные). В отличие от традиционной модели, которая позволяет задать права только для одного пользователя (владельца), одной группы и всех остальных, ACL (Access Control List) позволяет задать произвольный набор правил для нескольких пользователей и групп, а также устанавливать маски и наследуемые права.
История и стандартизация
Механизм ACL был разработан как расширение традиционной модели прав Unix, которая была заложена в ранних версиях системы в 1970-х годах. С ростом потребностей в более гибком управлении доступом в многопользовательских средах (например, в корпоративных сетях, на серверах баз данных, в системах управления контентом) возникла необходимость в более детальном контроле.
Первые реализации ACL появились в коммерческих Unix-системах (например, в AIX от IBM и HP-UX от Hewlett-Packard) в конце 1980-х — начале 1990-х годов. В 1997 году был опубликован проект стандарта POSIX 1003.1e, который описывал расширения для управления доступом, включая ACL. Однако этот проект так и не был принят как окончательный стандарт. Несмотря на это, многие современные Unix-подобные системы (Linux, FreeBSD, Solaris, macOS) реализуют ACL, основываясь на черновиках этого стандарта.
В Linux поддержка ACL была добавлена в ядро версии 2.6 (2003 год) и реализована через файловые системы, такие как ext2, ext3, ext4, XFS, Btrfs и ZFS. Для работы с ACL в Linux используется пакет утилит acl, который включает команды getfacl и setfacl.
Основные понятия и структура
ACL представляет собой упорядоченный список записей (Access Control Entry, ACE), каждая из которых определяет права доступа для определённого субъекта (пользователя или группы) или для всех субъектов.
Типы записей ACL
В POSIX ACL выделяют несколько типов записей:
- user (u) — права для конкретного пользователя. Запись может быть как для владельца файла (user::), так и для любого другого пользователя (user:имя_пользователя:права).
- group (g) — права для конкретной группы. Аналогично, может быть для группы-владельца (group::) или для любой другой группы (group:имя_группы:права).
- mask (m) — маска, которая ограничивает максимальные права, которые могут быть предоставлены любым записям, кроме владельца файла и записи «other». Маска влияет на все записи user и group, кроме владельца.
- other (o) — права для всех остальных пользователей, не попавших ни в одну из предыдущих записей.
Объектный ACL и ACL по умолчанию
ACL могут быть двух видов:
- Объектный ACL (access ACL) — применяется непосредственно к файлу или каталогу и определяет права доступа к нему.
- ACL по умолчанию (default ACL) — может быть установлен только на каталог. Когда новый файл или подкаталог создаётся внутри такого каталога, он наследует ACL по умолчанию. Это позволяет автоматически применять политики доступа к вновь создаваемым объектам.
Принцип работы
При попытке доступа к файлу или каталогу ядро операционной системы проверяет ACL в следующем порядке:
- Если процесс является владельцем файла, применяются права из записи user::.
- Если процесс не является владельцем, но его идентификатор пользователя совпадает с одним из идентификаторов в записях user:имя_пользователя, применяются права из первой такой записи.
- Если ни одна из записей user не подходит, проверяются записи group. Если процесс входит в группу, указанную в записи group:: или group:имя_группы, применяются права из первой подходящей записи, но с учётом маски.
- Если ни одна из записей group не подходит, применяются права из записи other.
Маска (mask) ограничивает права, предоставляемые через записи user:имя_пользователя, group:: и group:имя_группы. Фактические права доступа для этих записей вычисляются как логическое И (AND) между правами, указанными в записи, и правами, указанными в маске. Например, если в записи group:developers указаны права rwx, а маска установлена как r-x, то группа developers получит только права r-x.
Примеры использования
Установка ACL для одного пользователя
Допустим, необходимо дать пользователю ivanov права на чтение и запись файла report.txt, который принадлежит пользователю petrov и группе staff.
`` setfacl -m u:ivanov:rw report.txt ``
После этого команда getfacl report.txt покажет:
```
file: report.txt
owner: petrov
group: staff
user::rw- user:ivanov:rw- group::r-- mask::rw- other::r-- ```
Установка ACL по умолчанию для каталога
Чтобы все новые файлы в каталоге /data/project автоматически получали права на чтение и выполнение для группы developers, нужно установить ACL по умолчанию:
`` setfacl -d -m g:developers:rx /data/project ``
Теперь при создании нового файла внутри /data/project он будет наследовать этот ACL.
Удаление ACL
Для удаления конкретной записи используется команда:
`` setfacl -x u:ivanov report.txt ``
Для удаления всех ACL (возврат к базовой модели прав) используется ключ -b:
`` setfacl -b report.txt ``
Преимущества и недостатки
Преимущества
- Гибкость: возможность предоставлять права множеству пользователей и групп без необходимости изменения владельца или группы-владельца файла.
- Наследование: ACL по умолчанию позволяют автоматически применять политики доступа к вновь создаваемым объектам в каталогах.
- Совместимость: ACL работают поверх существующей модели прав Unix, не заменяя её, а дополняя.
Недостатки
- Сложность управления: при большом количестве записей ACL становится трудно читать и поддерживать.
- Производительность: проверка ACL может быть немного медленнее, чем проверка базовых прав, особенно при большом количестве записей.
- Ограничения некоторых файловых систем: не все файловые системы поддерживают ACL, а некоторые могут иметь ограничения на количество записей.
Применение
POSIX ACL широко используются в серверных средах, где требуется тонкое разграничение доступа:
- Веб-серверы: для предоставления доступа к файлам сайта разным пользователям (например, разработчикам, администраторам, веб-серверу).
- Файловые серверы: в системах Samba или NFS для управления доступом к общим ресурсам.
- Системы управления версиями: для настройки прав доступа к репозиториям.
- Контейнеризация: в Docker и других контейнерных средах для управления доступом к монтируемым томам.
Связанные технологии
- NFSv4 ACL: более современный и гибкий стандарт ACL, используемый в протоколе NFS версии 4. Он поддерживает больше типов записей и более сложные правила наследования.
- Windows ACL: в операционных системах Windows используется собственная модель ACL, которая отличается от POSIX ACL, но имеет схожие концепции.
- SELinux: система принудительного контроля доступа (MAC), которая может работать совместно с ACL, предоставляя более высокий уровень безопасности.
Источники
- IEEE Std 1003.1-2008, «Standard for Information Technology — Portable Operating System Interface (POSIX)»
- «POSIX Access Control Lists on Linux», Red Hat Enterprise Linux 7 Documentation
- «ACL (Access Control Lists)», FreeBSD Handbook
- «Using ACLs in Linux», IBM DeveloperWorks
- man-страницы
acl(5),getfacl(1),setfacl(1)в Linux
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →