ACL (Access Control List) в Linux - это расширенные права поверх классических rwx. Позволяют задавать доступ отдельным пользователям/группам и дефолтные права для каталогов. Управляются через getfacl и setfacl, важный нюанс - запись mask, которая ограничивает эффективные права. Используется, когда схемы user/group/others уже не хватает.
Проверка и установка утилит ACL
Проверить наличие утилит:
which getfacl setfacl
Установка в RHEL / CentOS / AlmaLinux:
sudo dnf install acl
Установка в Debian / Ubuntu:
sudo apt install acl
Проверка опций файловой системы (часто ACL уже включён по умолчанию):
mount | grep ext4
Базовые команды: getfacl и setfacl
Просмотр ACL
getfacl file.txt getfacl -R /srv/project
Добавление / изменение ACL
Права для конкретного пользователя:
setfacl -m u:alex:rw file.txt
Права для группы:
setfacl -m g:developers:rwx /srv/project
Рекурсивно по каталогу:
setfacl -R -m g:developers:rwx /srv/project
Удаление записей ACL
Удалить запись для пользователя или группы:
setfacl -x u:alex file.txt setfacl -x g:developers /srv/project
Полностью сбросить ACL у файла/каталога:
setfacl -b file.txt setfacl -bR /srv/project
Структура ACL и роль mask
Пример вывода getfacl:
# file: report.txt # owner: root # group: root user::rw- user:alex:rw- group::r-- group:developers:rw- mask::rw- other::---
user::- права владельца файла;group::- права основной группы файла;other::- права для всех остальных;user:alex- отдельные права для пользователя alex;group:developers- отдельные права для группы developers;mask- верхняя граница прав для всехuser:иgroup:ACL (кроме владельца и others).
Если выполнить, например:
chmod 640 report.txt
то mask может стать r--, и эффективные права для всех доп. пользователей/групп урежутся до чтения. В выводе getfacl это может отражаться как:
user:alex:rw- #effective:r--
Важно: если используешь ACL, аккуратнее с массовыми chmod - они могут незаметно подрезать права через mask.
Default ACL - права по умолчанию для новых файлов
Default ACL задаются на каталог и наследуются всеми новыми файлами и подкаталогами внутри.
Пример: нужно, чтобы все новые файлы в /srv/shared были доступны группе developers с rwX, а пользователю alex - тоже с rwX:
setfacl -m d:g:developers:rwX /srv/shared setfacl -m d:u:alex:rwX /srv/shared
d:- default ACL (для новых файлов/каталогов);X- исполняемый бит только для каталогов и файлов, где уже естьxу кого-то (удобно при рекурсивной раздаче прав).
Комбо: применить права и к уже существующим объектам, и к будущим:
# Текущие файлы и каталоги setfacl -R -m g:developers:rwX /srv/shared setfacl -R -m u:alex:rwX /srv/shared # Default ACL для новых файлов и каталогов setfacl -m d:g:developers:rwX /srv/shared setfacl -m d:u:alex:rwX /srv/shared
Взаимодействие ACL с chmod, chown и umask
- chmod - меняет классические биты и может менять
mask, тем самым урезая эффективные ACL-права. - chown - меняет владельца/группу, при этом дополнительные записи
user:иgroup:обычно сохраняются. - umask - влияет на начальные права при создании файла, но затем поверх накладываются default ACL каталога (если они заданы).
Практический совет: если каталог активно использует ACL, старайся избегать слепых chmod -R и после изменений проверяй getfacl.
Практический пример: общий каталог проектов
Задача:
- Каталог:
/srv/projects - Владелец:
root:root - Группа
developers- полный доступ (rwx) - Пользователь
alex- только чтение и выполнение (r-x) - Остальные - без доступа
Шаги настройки:
# Базовые владельцы и права sudo chown root:root /srv/projects sudo chmod 770 /srv/projects # ACL для существующих файлов и каталогов sudo setfacl -R -m g:developers:rwx /srv/projects sudo setfacl -R -m u:alex:r-x /srv/projects # Default ACL для новых файлов и каталогов sudo setfacl -m d:g:developers:rwx /srv/projects sudo setfacl -m d:u:alex:r-x /srv/projects # Проверка getfacl /srv/projects
Перенос и бэкапы с сохранением ACL
При копировании и бэкапах нужно явно сохранять ACL:
cp c ACL:
cp -a src/ dst/
rsync с ACL и extended attributes:
rsync -aAX src/ dst/
tar с ACL (пример):
tar --acls -cpf backup.tar /srv/projects
Комментарии
0Нашли ошибку или хотите дополнить материал?