С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Расширенные права ACL

3 мин Linux · acl

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

Шпаргалка

8 команд Версия для печати
  • 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 сохранить ACL дерева в файл
  • setfacl --restore=acl.bak восстановить ACL из файла

Обзор

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

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

bash
getfacl file                      # показать ACL
getfacl -R dir > acl.bak          # сохранить ACL дерева (бэкап перед изменениями)

Рецепты

2

Команды

bash
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

mask

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

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

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

Неполадки

5

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

Действуют 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.

См. также

  • permissions — Модель прав Unix — чтение/запись/исполнение, владелец/группа/другие, спецбиты.
  • chmod-chown — Смена прав (chmod) и владельца/группы (chown) — числовой и символьный синтаксис.
Загрузка…