linux-labs

Вики / Пользователи и права

ACL (расширенные права)

Концепция Linux · acl ПраваФайлыБезопасность

Гибкие права сверх rwx — getfacl/setfacl, права для нескольких пользователей.

Классические права (см. permissions) задают доступ только владельцу, одной группе и остальным. ACL позволяют выдать права конкретным пользователям и группам сверх этого.

Признак ACL в ls -l — символ +: -rw-rw----+.

getfacl file                      # показать ACL
getfacl -R dir > acl.bak          # сохранить ACL дерева (бэкап перед изменениями)
setfacl -m u:alice:rw file        # дать alice rw (-m = modify)
setfacl -m g:devs:rx dir          # группе devs rx
setfacl -m u:alice:rw,g:devs:r f  # несколько записей за раз
setfacl -x u:alice file           # убрать ACL-запись для alice
setfacl -b file                   # снять ВСЕ ACL
setfacl -R -m u:alice:rX dir      # рекурсивно (X = x только каталогам/исполняемым)
setfacl --restore=acl.bak         # восстановить из getfacl -R

# default ACL — наследование для НОВЫХ файлов в каталоге:
setfacl -d -m u:alice:rw dir      # новые файлы внутри получат rw для alice
setfacl -k dir                    # удалить default ACL

В getfacl строка mask:: задаёт максимум эффективных прав для именованных пользователей/групп (всех, кроме владельца и other). Если права «есть», но не работают — смотри mask:

getfacl file                      # строки с пометкой #effective:r-- = урезано маской
setfacl -m m::rwx file            # поднять маску до rwx

setfacl обычно пересчитывает mask автоматически; --no-mask отключает это.

Права выглядят верно, но доступа нет / есть лишний

Действуют ACL. Смотри getfacl (а не только ls -l). Символ + в ls -l подсказывает наличие ACL.

Именованному пользователю дал rw, а он не пишет

Маска урезает: getfacl покажет #effective:r--. Подними setfacl -m m::rwx.

ACL не наследуются новыми файлами

Нужны default ACL на каталоге (setfacl -d -m ...). Обычные ACL не наследуются; default применяется только к создаваемым после этого файлам.

ACL «пропали» после копирования/бэкапа

cp не переносит ACL — используй cp -a/--preserve=all, rsync -A, tar --acls. Бэкап ACL: getfacl -R, восстановление: setfacl --restore=.

ФС не поддерживает ACL

Нужна опция монтирования acl (на ext4 обычно по умолчанию). Проверь tune2fs -l/ опции в mount.

getfacl file                      # показать ACL (+ в ls -l)
setfacl -m u:user:rw file         # дать пользователю
setfacl -m g:grp:rx dir           # дать группе
setfacl -d -m u:user:rw dir       # наследование (default)
setfacl -m m::rwx file            # поднять mask
setfacl -b file                   # снять все ACL
getfacl -R dir > acl.bak ; setfacl --restore=acl.bak   # бэкап/восстановление

См. также