ACL в Linux: настройка, проверка и практическое руководство
TL;DR
ACL (Access Control Lists) в Linux позволяют задавать точечные права доступа к файлам и каталогам для отдельных пользователей и групп без создания множества системных групп. Используйте getfacl для просмотра, setfacl для изменения. ACL удобны, когда стандартных rwx-прав недостаточно. В статье — пошаговая настройка пользователей и групп, примеры команд, проверка, чек-листы и рекомендации по альтернативам и ограничениям.
Важно: только владелец файла и root могут менять ACL. Проверяйте совместимость с файловой системой и утилитами резервного копирования.

ACL (Access Control Lists) — дополнительный механизм управления доступом к файлам и каталогам в Linux. Он расширяет стандартную модель прав (владелец/группа/остальные) и позволяет назначать права отдельным пользователям или группам, не создавая для этого новых системных групп.
В этом материале показаны реальные шаги по созданию пользователей и групп, настройке ACL на файле и проверке результата на примере виртуальной машины с Kali Linux. Примеры команд и выводы терминала сохранены для воспроизводимости.
Создание пользователей и групп — подготовка окружения
Для эксперимента нужно несколько пользователей. Выполните эти команды от root или через sudo.
Таблица пользователей, которую мы будем настраивать:
| Пользователь | Группа |
|---|
| john1
john2
john3 | johns | | jane1
jane2 | janes |
Добавим пользователей в систему командой adduser (интерактивно) или useradd (автоматически). Пример интерактивного создания:
adduser john1
adduser john2
adduser john3
adduser jane1
adduser jane2
После создания пользователя команда id показывает uid, gid и список групп:
id john1По умолчанию для каждого пользователя создаётся собственная группа с тем же именем. Чтобы объединить несколько пользователей в общую группу, создадим группу johns с gid 5000 и janes с gid 6000:
groupadd -g 5000 johns
groupadd -g 6000 janesДалее назначим основной группой johns для пользователей john2 и john3 (и при желании john1):
usermod -g johns john2
usermod -g johns john3
usermod -g johns john1Проверяем:
id john1
id john2
id john3
id jane1
id jane2После этих действий john1, john2, john3 — члены группы johns; jane1 и jane2 — в группе janes.
Примечание: если вы хотите добавить пользователя в дополнительную группу, используйте usermod -aG <группа> <пользователь>.
Почему стандартных прав бывает недостаточно
Предположим, john1 создаёт файл в своём домашнем каталоге и хочет дать права записи только john2 и jane1, но оставить право чтения для john3 и jane2. Стандартная модель rwx для владельца/группы/остальных не позволяет комбинировать таких произвольных наборов пользователей без создания множества групп и управления ими.
Стандартные права в выводе ls выглядят так:
-rw-r--r-- 1 john1 johns 1234 Nov 12 12:00 secretfileРазбор строки прав:
| Символы | Значение |
|---|---|
| - | тип файла (файл) |
| rw- | права владельца (чтение/запись) |
| r– | права группы |
| r– | права остальных |
Если нужно задать права для конкретных пользователей без создания новых групп, удобнее использовать ACL.
Просмотр текущего ACL
Каждый файл имеет базовую ACL. Для просмотра используйте getfacl:
getfacl secretfile
В выводе строки без # отражают реальные записи ACL:
- user:: — права владельца файла
- group:: — права группы файла
- other:: — права остальных
- дополнительные записи user:john2:rwx или group:dev:rx — пользовательские/групповые ACL
Как задать ACL для файла
Для изменения ACL используется setfacl. Синтаксис для добавления/изменения записи:
setfacl -m entity:name:permissions Где:
| entity | name | permissions |
|---|---|---|
| кто — user (u) или group (g) или other (o) или mask (m) | имя пользователя или группы | r — чтение, w — запись, x — выполнение |
Примеры: дать john2 и jane1 права чтения и записи на secretfile:
setfacl -m u:john2:rw secretfile
setfacl -m u:jane1:rw secretfileИли одной командой через запятую:
setfacl -m u:john2:rw,u:jane1:rw secretfileПроверяем:
getfacl secretfile
В выводе вы увидите новые строки вида user:john2:rw-.
Проверка работы ACL в реальной сессии
Авторизуемся под john2 и убеждаемся, что он может читать и дописывать файл:
sudo -u john2 cat secretfile
sudo -u john2 bash -c 'echo "новая строка от john2" >> secretfile'john3, оставаясь членом той же группы, но не имея явной записи в ACL, не сможет записывать в файл, если группа или другие не имеют права записи:
sudo -u john3 bash -c 'echo "попытка записи" >> secretfile'
# ожидаем ошибку Permission deniedТаким образом ACL позволяют гибко управлять доступом.
ACL для директорий и наследование
ACL можно назначать и на каталоги. Чтобы новые файлы и подкаталоги наследовали ACL, используйте рекурсивную установку и флаги default:
setfacl -R -m d:u:john2:rwX /path/to/dir
setfacl -m u:john2:rwX /path/to/dirПояснения:
- опция -R — рекурсивно
- префикс d: перед записью указывает на default ACL, которые применяются к вновь создаваемым элементам
- X — специальный флаг, дающий execute только для каталогов или если уже установлен x
Маска ACL и её влияние
Маска (mask) в ACL ограничивает права для всех не-владельцев: она действует как верхняя граница для записей group и user (для дополнительных пользователей и групп). Убедитесь, что mask корректна, иначе записи могут быть обрезаны.
Просмотр маски в getfacl:
getfacl secretfile
# увидите строку mask: r-- или rw-Изменение маски:
setfacl -m m::rw secretfileКогда ACL не подходят (ограничения и подводные камни)
- Неподдерживаемая файловая система: некоторые файловые системы не поддерживают POSIX ACL (например, старые варианты FAT). Убедитесь, что FS смонтирована с поддержкой acl (параметр монтирования acl для ext4).
- Неправильно настроенная маска может «отрезать» права, создавая путаницу.
- Инструменты резервного копирования или синхронизации могут не сохранять ACL по умолчанию (проверьте rsync с опцией -A или tar –acls).
- SELinux/AppArmor добавляют дополнительный уровень контроля и могут вести себя иначе — ACL не заменяют мандатные контроля безопасности.
- ACL усложняет аудит: большое количество отдельных записей труднее отслеживать, чем модель с несколькими группами.
Альтернативные подходы и когда их выбирать
- Создание групп: хорошо для стабильных наборов пользователей с длительными ролями. Простота и совместимость с большинством инструментов.
- POSIX-права + SGID на каталог: для совместного доступа к новым файлам. SGID гарантирует наследование группы.
- Уровень мандатной безопасности (SELinux): для сценариев, где нужны более строгие политики.
- ACL — когда нужно гибко дать доступ конкретным пользователям без создания групп.
Методика принятия решения (мини-алгоритм)
flowchart TD
A[Нужно дать доступ к файлу/каталогу] --> B{Доступ нужен группе или отдельным пользователям?}
B -- группе--> C[Создать группу или назначить существующую; использовать стандартные права]
B -- отдельным пользователям--> D[Использовать ACL]
D --> E{Будут ли наследоваться права в каталоге?}
E -- да --> F[Использовать default ACL на каталоге]
E -- нет --> G[Назначить ACL на каждый файл, или использовать скрипт автоматизации]
C --> H[Проверить резервное копирование и инструменты]
F --> H
G --> HЧек-лист администратора перед применением ACL
- Проверить, что файловая система поддерживает ACL (mount | grep acl или /etc/fstab).
- Убедиться, что резервные копии сохраняют ACL (rsync -A, tar –acls).
- Проверить маску ACL после установки (getfacl).
- Протестировать доступ под реальными аккаунтами.
- Документировать назначения ACL для аудита.
Шпаргалка по основным командам
- Просмотр ACL:
getfacl <файл|каталог>- Добавить/изменить запись:
setfacl -m u:username:rw file
setfacl -m g:groupname:r file- Удалить запись:
setfacl -x u:username file- Установить default ACL для каталога:
setfacl -m d:u:username:rwX /path/to/dir- Рекурсивно установить ACL:
setfacl -R -m u:username:rw /path/to/dir- Сбросить все ACL к умолчанию (очистить все дополнительные записи):
setfacl -b fileКритерии приёмки
- Для целевого файла/каталога getfacl показывает ожидаемые записи user/group/other.
- Пользователи, указаные в ACL, могут выполнить разрешённые операции; остальные — нет.
- Маска ACL не уменьшает ожидаемые права.
- Резервное копирование и восстановление сохраняют ACL.
Короткий словарь терминов
- ACL — список индивидуальных или групповых записей прав для файла/каталога.
- mask — ограничение прав для non-owner записей.
- default ACL — набор прав, применяемый к вновь создаваемым файлам в каталоге.
Рекомендации безопасности и эксплуатационные заметки
- Документируйте все нестандартные настройки доступа и храните их в системе управления конфигурацией.
- Ограничивайте использование root; операции с ACL проводите через процессы change control.
- Настройте аудит доступа (auditd) при необходимости отслеживания изменений.
Заключение
ACL расширяют возможности управления доступом в Linux и полезны, когда нужно дать права отдельным пользователям без создания новых системных групп. Они особенно удобны для временных или гибких наборов разрешений, для каталогов с совместной работой и для сценариев, где стандартная модель rwx не дает нужной степени точности. Тем не менее учитывайте совместимость с файловой системой, резервными копиями и системами мандатной безопасности.
Краткое резюме
- ACL дают гибкость для назначения прав отдельным пользователям.
- Основные команды: getfacl и setfacl.
- Следите за маской и совместимостью инструментов резервного копирования.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента