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

Список контроля доступа

Список контроля доступа (англ. 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 содержит следующие элементы:

  1. Идентификатор субъекта — имя пользователя, UID (идентификатор пользователя), IP-адрес, MAC-адрес, имя группы.
  2. Тип доступа — разрешение (permit) или запрет (deny).
  3. Объект доступа — файл, каталог, порт, протокол, диапазон адресов.
  4. Права — конкретные операции (чтение, запись, выполнение, отправка пакетов, соединение).

При попытке доступа система последовательно просматривает записи 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 →