Открыть сервис

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 в следующем порядке:

  1. Если процесс является владельцем файла, применяются права из записи user::.
  2. Если процесс не является владельцем, но его идентификатор пользователя совпадает с одним из идентификаторов в записях user:имя_пользователя, применяются права из первой такой записи.
  3. Если ни одна из записей user не подходит, проверяются записи group. Если процесс входит в группу, указанную в записи group:: или group:имя_группы, применяются права из первой подходящей записи, но с учётом маски.
  4. Если ни одна из записей 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 →