ACL
ACL (от англ. Access-control list) — структура данных, представляющая собой перечень прав, связанных с системным ресурсом. ACL определяет, какие пользователи или системные процессы получают доступ к ресурсам, а также какие операции разрешены над этими ресурсами.
Реализации
Каждая запись ACL обычно содержит субъект и разрешённую операцию. Например,
- если для файла задан ACL вида (Alice: read,write; Bob: read), то Алисе разрешено читать и изменять файл, а Бобу — только читать его;
- если профиль Resource Access Control Facility (RACF) CONSOLE CLASS(TSOAUTH) содержит ACL (ALICE:READ), то пользователь ALICE получает право использовать команду TSO CONSOLE.
Многие операционные системы реализуют ACL или имели такие реализации в прошлом; первое внедрение ACL появилось в файловой системе Multics в 1965 году[1].[2]
ACL файловой системы — это структура данных, содержащая записи, определяющие индивидуальные права пользователя или группы на доступ к определённым объектам системы, таким как программы, процессы или файлы. В Microsoft Windows NT[3], OpenVMS и в Unix-подобных системах (таких как Linux, macOS, Solaris) эти записи называются записями управления доступом (ACE). Каждому объекту сопоставляется ссылка на его ACL. Привилегии определяют, может ли пользователь читать, изменять или выполнять объект. В некоторых реализациях ACE позволяют управлять возможностью изменять сам ACL для определённого пользователя или группы.
Одними из первых ОС с поддержкой ACL в файловой системе были Multics и PRIMOS.
В 1990-х годах модели ACL и RBAC широко использовались и тестировались для управления правами доступа к файлам.
Рабочая группа по стандарту POSIX 1003.1e/1003.2c предприняла попытку стандартизации ACL, результатом которой стали POSIX.1e ACL, или просто «POSIX ACL»[4]. Черновики POSIX.1e/2c были отозваны в 1997 году из-за отсутствия финансирования и перехода к более мощным альтернативам, таким как NFSv4 ACL[5]. По состоянию на декабрь 2019 года, актуальных источников черновика в интернете нет, но его копия сохранилась в Интернет-архиве[6].
Большинство Unix и Unix-подобных систем, например, Linux начиная с версии 2.5.46, с ноября 2002[7], FreeBSD, Solaris, поддерживают POSIX.1e ACL. Обычно ACL записываются в расширенные атрибуты файла.
ACL стандарта NFSv4 значительно мощнее чернового POSIX ACL. В отличие от POSIX ACL, NFSv4 ACL определены опубликованным стандартом в рамках Network File System.
ACL NFSv4 поддерживаются во многих Unix и Unix-подобных системах, например AIX, FreeBSD[8], Mac OS X (с версии 10.4 "Tiger"), Solaris с файловой системой ZFS[9]. Для Linux существуют экспериментальные реализации поддержки NFSv4 ACL для файловых систем Ext3[10] и Richacls, которая обеспечивает поддержку NFSv4 ACL для Ext4[11]. Как и POSIX ACL, NFSv4 ACL обычно хранятся как расширенные атрибуты.
По принципу организации ACL NFSv4 близки к ACL Windows NT, используемых в NTFS[12]. NFSv4.1 ACL являются надмножеством NT ACL и POSIX draft ACL[13]. Samba позволяет сохранять NT ACL SMB-общих файлов как NFSv4-кодированные ACL[14].
Служба Microsoft Active Directory реализует сервер LDAP, хранящий информацию о пользователях и компьютерах домена[15]. Active Directory расширил спецификацию LDAP за счёт внедрения системы ACL, подобной используемой в Windows NT для файловой системы NTFS. В Windows 2000 синтаксис записей ACL был расширен: теперь можно разрешать или запрещать доступ не только к объекту LDAP целиком, но и к отдельным его атрибутам[16].
Для ряда проприетарного оборудования, особенно маршрутизаторов и коммутаторов, ACL выступает набором правил, применяемых к портам и IP-адресам, доступным на сервере или на любом сетевом уровне 3 — со списками разрешённых хостов и/или сетей. Допускается настройка ACL по доменным именам, но это сомнительно, потому что в заголовках TCP, UDP и ICMP не содержатся домены; для сопоставления имени и адреса устройство вынуждено отдельно выполнять разрешение имён, что создаёт дополнительную поверхность атаки для нарушителя. Как серверы, так и маршрутизаторы могут иметь сетевые ACL. Обычно их настраивают отдельно для входящего и исходящего трафика, причём по назначению они сходны с фаерволами. Как и фаерволы, ACL подпадают под требования стандартов и регуляторов, например PCI DSS.
Алгоритмы ACL реализованы в SQL и реляционных СУБД. Многие современные системы на основе SQL — например, системы планирования ресурсов предприятия (ERP) и CMS — используют модель ACL в административных модулях.
В 2024 году появились схемно-индексируемые модели ACL как облегчённая альтернатива традиционному хранению прав в JSON. Ключевая идея — вместо хранения всей иерархии прав записывать только индексы разрешённых операций. Эта техника, позднее формализованная как SCode ACL, позволяет компактно кодировать права доступа (напр., "0 2 5") по предопределённой развёрнутой схеме, что делает её эффективной для бездисковых систем вроде JWT-токенов или сессионных cookie. Метод получил распространение как среди энтузиастов-разработчиков за минимализм и скорость, так и в небольших и рабочих продуктах.
Сравнение с RBAC
Основная альтернатива модели ACL — управление доступом на основе ролей (RBAC). "Минимальная модель RBAC" (RBACm) сравнима с ACL, где в качестве записей (ACLg) допускаются только группы. Баркли (1997)[17] показал эквивалентность RBACm и ACLg.
В современных реализациях на SQL ACL также поддерживают управление группами и наследованием в иерархии групп. Современные ACL позволяют выражать все возможности RBAC и обладают большей выразительностью (по сравнению со «старыми» ACL), что особенно востребовано для поддержки политики управления доступом по модели организации.
Для обмена данными и "высокоуровневых сопоставлений" ACL могут транслироваться в XACML[18].
Примечания
Литература
- Rhodes, Tom File System Access Control Lists (ACLs). FreeBSD Handbook. Дата обращения: 8 апреля 2013.
- SELinux and grsecurity: A Case Study Comparing Linux Security Kernel Enhancements. University of Virginia (24 августа 2005). Дата обращения: 8 апреля 2013. Архивировано 24 февраля 2012 года.
- Hinrichs, Susan Operating System Security. CyberSecurity Spring 2005. University of Illinois (2005). Дата обращения: 8 апреля 2013. Архивировано 4 марта 2012 года.
- Mitchell, John Access Control and Operating System Security. Stanford University. Дата обращения: 8 апреля 2013.
- Clarkson, Michael Access Control. Cornell University. Дата обращения: 8 апреля 2013.
- Klein, Helge Permissions: A Primer, or: DACL, SACL, Owner, SID and ACE Explained (12 марта 2009). Дата обращения: 8 апреля 2013.
- Access Control Lists. Microsoft Learn (7 февраля 2023). Дата обращения: 15 мая 2024.
- How Permissions Work. Microsoft Learn (3 июля 2013). Дата обращения: 15 мая 2024.


