ACL (Access Control Lists) — это механизм расширенного управления правами доступа к файлам и каталогам в Linux.
Стандартная модель прав (rwx для владельца, группы и остальных) иногда слишком ограничена. ACL позволяет назначать права дополнительным пользователям и группам, не меняя владельца или основную группу файла.
В Ubuntu ACL поддерживается большинством современных файловых систем (например, ext4). Обычно она уже включена по умолчанию.
ACL полезен, когда нужно:
— дать доступ конкретному пользователю к файлу
— настроить разные уровни доступа нескольким пользователям
— управлять правами в общих каталогах
Синтаксис
Основная структура записи ACL выглядит так:тип:имя:права
Где:
| Поле | Значение |
|---|---|
| тип | user (u), group (g), other (o), mask (m) |
| имя | пользователь или группа |
| права | r (read), w (write), x (execute) |
Примеры:
u:admin:rwx
g:developers:rw-
o::r--
Основные команды и опции
getfacl
Показать ACL файла или каталога.
getfacl test.txt
Показывает:
— владельца
— группу
— ACL записи
setfacl
Устанавливает или изменяет ACL.
Основной синтаксис:
setfacl [опции] запись файл
Самые используемые опции:
| Опция | Значение |
|---|---|
| -m | добавить или изменить ACL |
| -x | удалить ACL |
| -b | удалить все ACL |
| -R | рекурсивно |
| -d | установить default ACL для каталога |
Примеры:
#Удалить правило
setfacl -x u:admin файл
#Удалить все ACL
setfacl -b test.txt
#Дать пользователю доступ к файлу
setfacl -m u:admin:rw test.txt
#Дать группе доступ к каталогу
setfacl -m g:developers:rwx project/
#Рекурсивные права
setfacl -R -m u:admin:rwx project/
#Default ACL
setfacl -d -m u:admin:rwx shared/
Маска (mask) в ACL
Mask — это запись ACL, которая ограничивает максимальные права доступа для:
— всех именованных пользователей
— всех групп
— основной группы файла
Пример:
#ACL файла (проверить getfacl file)
user::rwx
user:admin:rwx
group::rwx
mask::r--
other::---
Несмотря на то что для admin указано rwx, фактически он получит r— поскольку mask ограничивает права.
Изменение mask
Mask можно изменить так:
setfacl -m m:r-- file
или
setfacl -m mask:r-- file