Список контроля доступа
Список контроля доступа (англ. Access Control List, ACL) — это механизм, применяемый в компьютерных системах, телекоммуникационных сетях и системах управления базами данных, который определяет, какие субъекты (пользователи, процессы, устройства) и каким образом могут получать доступ к определённым объектам (файлам, каталогам, сетевым портам, записям в базе данных). ACL представляет собой упорядоченный набор правил (записей), каждое из которых связывает субъект с набором разрешённых или запрещённых операций.
История
Концепция списков контроля доступа возникла в 1970-х годах в рамках развития многопользовательских операционных систем. Одной из первых реализаций стала система Multics, где ACL применялись для разграничения доступа к файлам. В 1983 году в операционной системе MS-DOS (версия 3.0) появилась базовая поддержка атрибутов файлов, но полноценные ACL были внедрены лишь в Windows NT (1993 год). В мире Unix-подобных систем стандартные права доступа (чтение, запись, выполнение для владельца, группы и остальных) были дополнены механизмом ACL в стандарте POSIX.1e (1997 год), хотя этот стандарт так и не был полностью принят, но его идеи реализованы в большинстве современных дистрибутивов Linux (через утилиты setfacl и getfacl).
В сетевых технологиях ACL стали неотъемлемой частью маршрутизаторов и межсетевых экранов. Первые коммерческие реализации появились в оборудовании Cisco Systems в конце 1980-х годов (протокол IP, затем расширенные ACL для TCP/UDP).
Классификация
По типу объекта управления
- Файловые ACL — применяются к файлам и каталогам в файловых системах (NTFS, ext4, ZFS). Определяют права на чтение, запись, выполнение, удаление, изменение атрибутов.
- Сетевые ACL — используются на маршрутизаторах, коммутаторах, межсетевых экранах. Контролируют прохождение пакетов на основе IP-адресов, портов, протоколов (TCP, UDP, ICMP).
- ACL баз данных — определяют доступ к таблицам, представлениям, хранимым процедурам (например, в СУБД Oracle, PostgreSQL).
По способу задания правил
- Дискреционные (DACL) — владелец объекта самостоятельно назначает права для других субъектов. Наиболее распространены в Windows (NTFS) и Unix-системах.
- Мандатные (MACL) — права назначаются централизованно на основе меток безопасности (например, в системах с многоуровневой защитой, таких как SELinux или FreeBSD с модулем mac).
- Ролевые (RBAC) — права группируются по ролям, а ACL привязываются к ролям, а не к отдельным пользователям.
По направлению обработки (сетевые ACL)
- Входящие (inbound) — применяются к пакетам, поступающим в интерфейс устройства.
- Исходящие (outbound) — применяются к пакетам, покидающим интерфейс.
Устройство и принцип работы
Каждая запись ACL содержит следующие элементы:
- Идентификатор субъекта — имя пользователя, UID (идентификатор пользователя), IP-адрес, MAC-адрес, имя группы.
- Тип доступа — разрешение (permit) или запрет (deny).
- Объект доступа — файл, каталог, порт, протокол, диапазон адресов.
- Права — конкретные операции (чтение, запись, выполнение, отправка пакетов, соединение).
При попытке доступа система последовательно просматривает записи ACL в порядке их следования. Если найдено правило, соответствующее субъекту и объекту, применяется указанное в нём действие (разрешение или запрет). Если ни одно правило не подходит, применяется действие по умолчанию (обычно запрет, в сетевых ACL — «deny all»).
Пример файлового ACL в Linux
`` user::rw- user:john:r-- group::r-- mask::r-- other::--- `` Здесь владелец имеет права на чтение и запись, пользователь john — только на чтение, группа — на чтение, остальные — без доступа.
Пример сетевого ACL на маршрутизаторе Cisco
`` access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 80 access-list 100 deny ip any any `` Это правило разрешает трафик из подсети 192.168.1.0/24 к любому адресу на порт 80 (HTTP), все остальные пакеты запрещаются.
Применение
Операционные системы
- Windows — ACL в NTFS позволяют задавать права для отдельных пользователей и групп на уровне файлов и папок. Управление осуществляется через вкладку «Безопасность» в свойствах объекта.
- Linux — ACL реализованы в файловых системах ext2/3/4, XFS, Btrfs. Используются утилиты
setfaclиgetfacl. - macOS — поддерживает ACL на базе HFS+ и APFS, управление через команды
chmodс флагом+a.
Сетевые устройства
- Маршрутизаторы — ACL используются для фильтрации трафика, ограничения доступа к определённым сервисам (например, запрет SSH из внешней сети), сегментации сетей (VLAN).
- Межсетевые экраны — в устройствах типа Cisco ASA, pfSense, iptables (Linux) ACL задают правила для прохождения пакетов через интерфейсы.
- Коммутаторы — ACL на уровне портов (Port ACL) или на уровне VLAN (VACL) ограничивают трафик между устройствами внутри локальной сети.
Базы данных
- Oracle — ACL определяют, какие пользователи могут подключаться к определённым сетевым службам (например, отправка электронной почты через UTL_MAIL).
- PostgreSQL — ACL на уровне таблиц и схем задаются через команды GRANT и REVOKE.
Облачные сервисы и виртуализация
- AWS — Security Groups (группы безопасности) работают как ACL для виртуальных машин (EC2), разрешая или запрещая входящий и исходящий трафик по протоколам и портам.
- Kubernetes — Network Policies реализуют ACL для подов (контейнеров), контролируя трафик между ними.
Преимущества и недостатки
Преимущества
- Гибкость — возможность задавать права для каждого субъекта индивидуально.
- Детализация — поддержка множества типов операций (чтение, запись, выполнение, удаление, изменение прав).
- Простота реализации — алгоритм последовательного просмотра правил понятен и эффективен для небольших списков (до нескольких сотен записей).
Недостатки
- Сложность управления при большом числе субъектов — при сотнях и тысячах пользователей ведение ACL становится трудоёмким, легко допустить ошибки (например, случайно предоставить доступ не тому лицу).
- Порядок правил — в сетевых ACL порядок записей критичен: неправильная последовательность может привести к неожиданным разрешениям или блокировкам.
- Отсутствие наследования — в некоторых реализациях (например, в ранних версиях ACL в Linux) права не наследуются от родительских каталогов, что требует ручного задания для каждого объекта.
- Производительность — при больших списках (тысячи записей) проверка каждого правила может замедлять работу системы, особенно на маршрутизаторах с высокой нагрузкой.
Критика и альтернативы
Списки контроля доступа критикуются за неэффективность в крупных распределённых системах. Вместо них в современных средах часто применяются:
- Ролевое управление доступом (RBAC) — права назначаются не пользователям, а ролям, что упрощает администрирование.
- Атрибутное управление доступом (ABAC) — доступ определяется на основе атрибутов субъекта, объекта и окружающей среды (например, время суток, местоположение).
- Политики безопасности на основе меток (MAC) — в системах с высокими требованиями к безопасности (военные, государственные учреждения).
Тем не менее, ACL остаются базовым механизмом для большинства файловых систем и сетевых устройств благодаря своей простоте и прозрачности.
Интересные факты
- В Windows NTFS ACL могут содержать до 1024 записей на один объект (файл или папку).
- В сетевых ACL маршрутизаторов Cisco максимальное количество записей зависит от модели устройства и объёма памяти, но обычно составляет от 100 до 10 000.
- В операционной системе OpenVMS (Digital Equipment Corporation) ACL появились ещё в 1977 году и до сих пор используются в промышленных системах.
- Ошибка в ACL привела к одной из крупнейших утечек данных в истории — в 2017 году компания Equifax (организация признана нежелательной в РФ? — нет, но утечка произошла из-за неправильно настроенного ACL на сервере Apache Struts).
Источники
- Таненбаум Э., Бос Х. «Современные операционные системы» (4-е издание, 2015).
- Стивенс У. Р. «TCP/IP. Иллюстрированное руководство» (том 1, 2014).
- Документация Microsoft по NTFS ACL (Windows Server 2022).
- Документация Cisco по спискам контроля доступа (Cisco IOS 15.x).
- Стандарт POSIX.1e (черновик, 1997).
- Официальная документация Oracle Database по ACL для сетевых служб (версия 19c).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →