1. Знакомство с ACL
Представьте, что вы организатор вечеринки (или администратор системы). Вы хотите, чтобы гости могли ходить в определённые комнаты, а в другие — только с вашего разрешения. Базовые права доступа в Linux rwx позволяют вам управлять доступом только для трёх категорий: владельца (user), группы (group) и всех остальных (others). Но что, если вам нужно дать доступ к комнате только особому другу? Смотритель стандартной модели прав скажет вам: "Эй, так не получится". Вот тут-то и приходят ACL с готовностью помочь.
ACL (Access Control Lists) решают проблему ограничения классической трёхуровневой системы прав, позволяя задавать права доступа конкретным пользователям и группам.
Основные возможности ACL:
- Установка индивидуальных прав на файлы и каталоги для определённых пользователей и групп.
- Наследование прав для новых файлов внутри каталога.
- Более гибкая настройка, чем традиционный подход
chmod.
2. Как узнать, включены ли ACL?
Перед тем как начать управлять ACL, давайте выясним, поддерживаются ли они вашей системой. Вы можете проверить это с помощью команды:
mount | grep acl
Если файловая система была смонтирована с опцией acl, вы готовы к делу! В противном случае потребуется пересмонтировать раздел с добавлением acl:
sudo mount -o remount,acl /your/mount/point
Всё, теперь вы во всеоружии. Настало время погружаться в практику.
3. Основные команды для работы с ACL
| Команда | Описание |
|---|---|
getfacl |
Получить список текущих ACL для файла или каталога. |
setfacl |
Установить или модифицировать ACL для файла или каталога. |
setfacl -m |
Изменить (modify) текущие права доступа. |
setfacl -x |
Удалить (remove) определённые права доступа. |
setfacl -b |
Удалить все записи ACL для файла или каталога. |
setfacl -d |
Установить права по умолчанию для каталога, которые наследуются файлами. |
Теперь давайте на примерах разберём каждую из этих команд!
Получение текущих ACL getfacl
Допустим, у нас есть файл example.txt. Мы хотим посмотреть текущие права доступа с использованием ACL. Для этого достаточно одной команды:
getfacl example.txt
Примерный вывод будет выглядеть так:
# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---
Этот список показывает стандартные права: владелец user1 может читать и писать, группа group1 только читать, а остальные пользователи вообще не имеют доступа.
Установка индивидуальных прав доступа (setfacl)
Теперь представим, что пользователю user2 нужно разрешить записывать в файл example.txt. Это можно сделать так:
sudo setfacl -m u:user2:rw example.txt
Команда означает:
-m: модификация прав.u:user2:rw: добавить или изменить права для пользователяuser2(read-write).
Проверим результат:
getfacl example.txt
Теперь вывод выглядит так:
# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw # Дополнительное правило!
group::r--
other::---
Удаление индивидуальных прав доступа setfacl -x
Если вы решили, что пользователь user2 больше не должен иметь права на запись, права можно удалить:
sudo setfacl -x u:user2 example.txt
Проверим:
getfacl example.txt
Больше никаких дополнительных правил для user2!
Установка прав для групп
Права через ACL можно задавать не только для отдельных пользователей, но и для целых групп. Например, чтобы дать группе devteam доступ на чтение и запись, выполните:
sudo setfacl -m g:devteam:rw example.txt
Установка прав по умолчанию setfacl -d
Часто бывает нужно автоматически задавать права для всех новых файлов и директорий внутри определённого каталога. Например, вы хотите, чтобы все файлы в каталоге project_dir имели права на запись для пользователя developer. В этом случае:
sudo setfacl -d -m u:developer:rw project_dir
Проверить права можно так:
getfacl project_dir
Теперь для всех новых файлов и подкаталогов в project_dir будет применяться это правило по умолчанию.
Удаление всех ACL setfacl -b
Если вы хотите полностью очистить все ACL для файла:
sudo setfacl -b example.txt
Теперь файл вернётся к стандартной модели прав доступа user:group:others.
4. Практическое применение ACL
Сценарий: Совместная работа в проекте
Допустим, у вас есть проект, хранящийся в каталоге /project. Работают три человека:
Aliceдолжна иметь полный доступ (чтение, запись, выполнение).Bobдолжен только читать файлы.Eveвообще не должна видеть каталог.
Настраиваем это с помощью ACL:
Дать
Aliceполный доступ:sudo setfacl -m u:alice:rwx /projectДать
Bobдоступ только на чтение:sudo setfacl -m u:bob:r-- /projectДля
Eveничего не делаем — у неё не будет доступа по умолчанию.
Посмотрим текущий список ACL:
getfacl /project
Вывод:
# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---
Теперь Alice может работать без ограничений, Bob может только просматривать файлы, а Eve остаётся в стороне.
5. Потенциальные ошибки и их решение
ACL не работают, хотя вы их настроили. Возможно, раздел не смонтирован с опцией
acl. Используйтеmountдля проверки и пересмонтируйте его при необходимости.Конфликт между стандартными правами и ACL. ACL всегда имеют приоритет над стандартными правами. Например, даже если у "others" установлен запрет на чтение, ACL может разрешить доступ конкретному пользователю.
Забудете про унаследованные ACL. Если вы настроили
-d(default) права, проверьте, унаследовались ли эти правила новыми файлами.
Почему это важно?
Управление правами через ACL позволяет вам гибко настраивать доступ для разных пользователей и групп. Это особенно полезно на рабочих серверах, где требуется распределение прав доступа с учётом ролей. Например, в компаниях ACL используются для ограничения доступа только тем, кто "в теме" — один из ключей к безопасности.
Дополнительно можно изучить официальное руководство по ACL, чтобы ещё лучше понять их возможности.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ