← Назад к вопросам

Что такое ACL в Linux?

1.0 Junior🔥 181 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое ACL в Linux?

ACL (Access Control List — Список Контроля Доступа) в Linux — это расширенная система разрешений, которая предоставляет более гибкое и детализированное управление доступом к файлам и каталогам по сравнению со стандартной моделью Unix (владелец, группа, другие). В то время как традиционные разрешения (чтение, запись, выполнение) ограничены тремя категориями пользователей, ACL позволяет назначать права для конкретных пользователей или групп сверх этих категорий, что особенно полезно в сложных многопользовательских средах.

Ключевые отличия ACL от стандартных разрешений

Стандартные разрешения в Linux (например, rwxr-xr--) имеют следующие ограничения:

  • Права назначаются только одному владельцу, одной группе и всем остальным пользователям.
  • Невозможно предоставить разные права нескольким конкретным пользователям или группам для одного файла.
  • Например, если файлу нужно дать доступ пользователям alice, bob и группе developers с разными правами, стандартная модель не справится.

ACL решает эти проблемы, позволяя:

  • Определять права для произвольного количества пользователей.
  • Определять права для произвольного количества групп.
  • Устанавливать маску эффективных прав (mask) для ограничения максимальных разрешений.
  • Задавать права по умолчанию для каталогов, которые автоматически наследуются новыми файлами и подкаталогами.

Основные команды и синтаксис ACL

Для работы с ACL используются утилиты setfacl (установка ACL) и getfacl (просмотр ACL). Перед использованием убедитесь, что файловая система смонтирована с поддержкой ACL (обычно опция acl в /etc/fstab).

Просмотр ACL

getfacl /path/to/file

Вывод показывает владельца, группу, маску и список записей ACL для конкретных пользователей/групп.

Установка ACL

# Дать пользователю alice права на чтение и запись
setfacl -m u:alice:rw /path/to/file

# Дать группе developers права на выполнение
setfacl -m g:developers:x /path/to/file

# Установить маску эффективных прав (например, только чтение)
setfacl -m m::r /path/to/file

# Рекурсивно применить ACL ко всем файлам в каталоге
setfacl -R -m u:alice:rwx /path/to/directory

# Установить ACL по умолчанию для каталога (будут наследоваться новыми объектами)
setfacl -d -m u:bob:rw /path/to/directory

# Удалить все записи ACL
setfacl -b /path/to/file

# Удалить конкретную запись ACL для пользователя alice
setfacl -x u:alice /path/to/file

Практический пример использования ACL

Представим сценарий: у вас есть каталог /shared/docs, доступ к которому должен быть следующим:

  • Владелец (alex) — полные права.
  • Группа managers — чтение и запись.
  • Конкретный пользователь client — только чтение.
  • Все остальные — без доступа.

Со стандартными правами это невыполнимо, но с ACL:

# Устанавливаем базовые права: владелец — полные, группа и другие — ничего
chmod 700 /shared/docs

# Добавляем ACL для группы managers
setfacl -m g:managers:rw /shared/docs

# Добавляем ACL для конкретного пользователя client
setfacl -m u:client:r /shared/docs

# Проверяем результат
getfacl /shared/docs
# Вывод будет примерно таким:
# file: shared/docs
# owner: alex
# group: alex
# user::rwx
# group::---
# group:managers:rw-
# user:client:r--
# mask::rwx
# other::---

Важные аспекты и примечания

  • Маска (mask) в ACL определяет максимальные эффективные права для всех записей, кроме владельца и других. Если маска уже, чем назначенные права, они будут ограничены маской.
  • Наследование ACL через записи по умолчанию (default) упрощает управление правами в сложных иерархиях каталогов.
  • Порядок проверки прав: ядро Linux проверяет ACL в порядке: владелец, именованные пользователи, именованные группы, группа владельца, другие. При совпадении применяются первые найденные права.
  • Совместимость: при изменении ACL через chmod стандартные права группы могут быть синхронизированы с маской ACL. Важно понимать это взаимодействие, чтобы избежать неожиданностей.
  • Производительность: чрезмерно сложные ACL с десятками записей могут незначительно влиять на производительность при проверке доступа.

Заключение

ACL является мощным расширением системы прав доступа в Linux, которое заполняет пробел стандартной модели в современных условиях, где требуется тонкое разграничение доступа для множества пользователей и групп. Особенно востребовано в корпоративных средах, на файловых серверах (Samba, NFSv4) и в DevOps-практиках для управления доступом к конфигурациям, логам и общим ресурсам. Однако, важно использовать ACL обдуманно, так как избыточная сложность может затруднить администрирование. Для базовых сценариев часто достаточно стандартных прав, но когда нужна гранулярность, ACL становится незаменимым инструментом.

Что такое ACL в Linux? | PrepBro