После завершения этого раздела вы сможете:
изменить ACL с помощью setfacl;
настроить записи ACL по умолчанию для новых файлов и каталогов.
С помощью команды setfacl можно добавлять, изменять и удалять стандартные ACL для файлов и каталогов.
ACL используют обычное представление разрешений: «r» — разрешение на чтение, «w» — разрешение на запись и «x» — разрешение на выполнение. «-» (дефис) означает, что соответствующее разрешение отсутствует. При настройке ACL (рекурсивно) может использоваться «X» в верхнем регистре для указания на то, что разрешение на выполнение может быть задано только для каталогов, а не для обычных файлов, кроме тех случаев, когда для этих файлов уже указано соответствующее разрешение на выполнение. Таким образом, setfacl ведет себя аналогично команде chmod.
r
w
x
-
X
Добавление и изменение ACL
Запись ACL можно добавить из командной строки с помощью опции -m или передать в файле с помощью опции -M (используйте «-» (дефис) вместо имени файла для stdin). Существует два варианта изменения: добавление новых записей ACL или замена определенных записей ACL для файла или каталога. Все остальные существующие записи ACL для этого файла или каталога не будут затронуты.
-m
-M
stdin
Используйте опцию --set или --set-file, чтобы полностью заменить ACL для файла.
--set
--set-file
Если при создании ACL для файла операция добавления не содержит параметров для разрешений владельца файла, группы-владельца или остальных пользователей, они будут заданы на основе текущих стандартных разрешений (они также известны как базовые записи ACL, удалить их невозможно), а также будет рассчитано и добавлено новое значение маски.
Чтобы добавить или изменить запись ACL для пользователя или именованного пользователя, выполните следующую команду:
[user@host ~]$ setfacl -m u:name:rX file
[user@host ~]$
setfacl -m u:name:rX file
name
file
Если значение name оставлено пустым, оно применяется к владельцу файла, в противном случае name может быть именем пользователя или значением идентификатора UID. В этом примере будут выданы разрешения только на чтение и, если уже заданы, на выполнение (однако, если файл является каталогом, он получит разрешение на выполнение, чтобы был возможен поиск в каталоге).
файл
Разрешения ACL владельца файла и стандартные разрешения владельца файла эквивалентны, следовательно, применение chmod к разрешениям владельца файла равнозначно применению setfacl к разрешениям владельца файла. Команда chmod не применяется к именованным пользователям.
Чтобы добавить или изменить запись ACL для группы или именованной группы, выполните следующую команду:
[user@host ~]$ setfacl -m g:name:rw file
setfacl -m g:name:rw file
Принцип тот же, что и при добавлении или изменении записи ACL пользователя. Если значение name оставлено пустым, оно применяется к группе-владельцу. В противном случае укажите имя группы или значение GID для именованной группы. В данном примере разрешения выдаются на чтение и запись.
chmod не влияет на разрешения группы владельцев для файлов с ACL, но изменяет маску ACL.
Чтобы добавить или изменить запись ACL для остальных пользователей, выполните следующую команду:
[user@host ~]$ setfacl -m o::- file
setfacl -m o::- file
Для остальных можно указывать только разрешения. Типичные разрешения для остальных: полное отсутствие разрешений (обозначается дефисом (-)) и «только чтение» (обозначается, как обычно, с помощью r). Вы можете установить любые стандартные разрешения.
Разрешения для остальных в ACL и стандартные разрешения остальных эквивалентны, следовательно, применение команды chmod к разрешениям остальных равнозначно применению setfacl к разрешениям остальных.
Вы можете добавить несколько записей одной командой. Разделяйте список запятыми.
[user@host ~]$ setfacl -m u::rwx,g:consultants:rX,o::- file
setfacl -m u::rwx,g:consultants:rX,o::- file
Владельцу файла будут даны разрешения на чтение, запись и выполнение, именованной группе consultants — на чтение и условное выполнение, а остальным пользователям не будут даны разрешения. Группа-владелец сохранит текущие файловые разрешения или ACL, а другие именованные записи остаются без изменений.
consultants
остальным
Использование getfacl в качестве входных данных
Вы можете использовать вывод команды getfacl в качестве входных данных для setfacl.
[user@host ~]$ getfacl file-A | setfacl --set-file=- file-B
getfacl file-A | setfacl --set-file=- file-B
file-A
file-B
Опция --set-file принимает входные данные из файла или из stdin. Дефис (-) задает использование stdin. В этом случае file-B будет иметь такой же ACL, что и file-A.
Явная настройка маски ACL
Вы можете явно задать маску ACL для файла или каталога, чтобы ограничить максимальные эффективные разрешения для именованных пользователей, группы-владельца и именованных групп. Это ограничивает все существующие разрешения, выходящие за рамки маски, но не влияет на более строгие разрешения.
[user@host ~]$ setfacl -m m::r file
setfacl -m m::r file
Эта команда добавляет значение маски, которое ограничивает всех именованных пользователей, группу-владельца и все именованные группы разрешением «только чтение», независимо от их текущих разрешений. Параметры маски не влияют на разрешения владельца файла и остальных пользователей.
остальных
Команда getfacl отображает комментарий effective напротив записей, ограниченных значением маски.
effective
По умолчанию маска ACL пересчитывается каждый раз, когда изменяются или удаляются записи ACL (для именованных пользователей, группы-владельца или именованных групп), на которые она влияет, потенциально сбрасывая предыдущее явное значение маски.
Чтобы избежать пересчета маски, используйте опцию -n или добавьте опцию маски (-m m::perms) в любую команду setfacl, которая может повлиять на ее текущее значение.
-n
-m m::perms
perms
Рекурсивное изменение ACL
Задавая ACL для каталога, используйте опцию -R для рекурсивного применения ACL. Бит «X» (заглавная Х) часто применяется с рекурсией, чтобы файлы с набором разрешений на выполнение сохраняли эту настройку, а каталоги получали разрешение на выполнение, чтобы можно было выполнять поиск в каталоге. Рекомендуется также использовать заглавную Х при нерекурсивном задании ACL, так как это не позволит администратору случайно добавить разрешение на выполнение для обычного файла.
-R
Х
[user@host ~]$ setfacl -R -m u:name:rX directory
setfacl -R -m u:name:rX directory
directory
Пользователь name будет добавлен в ACL каталога directory и всех существующих файлов и подкаталогов с разрешениями на чтение и условное выполнение.
Удаление ACL
Команда удаления записей ACL имеет тот же базовый формат, что и команда изменения ACL, за исключением того, что «:perms» не задаются.
[user@host ~]$ setfacl -x u:name,g:name file
setfacl -x u:name,g:name file
Эта команда удаляет только именованного пользователя и именованную группу из ACL файла или каталога. Все остальные записи ACL не изменятся.
Опции удаления (-x) и изменения (-m) можно использовать в команде setfacl одновременно.
-x
Маска может быть удалена, только если нет других записей в ACL (за исключением базовых записей ACL, которые не могут быть удалены), поэтому она должна удаляться последней. У файла больше не будет ACL, и команда ls -l не будет отображать символ плюса (+) рядом со строкой разрешений. Чтобы удалить все записи ACL для файла или каталога (включая записи ACL по умолчанию для каталогов), используйте следующую команду:
[user@host ~]$ setfacl -b file
setfacl -b file
Чтобы файлы и каталоги, созданные в определенном каталоге, наследовали ACL этого каталога, используйте ACL по умолчанию для каталога. Можно задать ACL по умолчанию и любые стандартные записи ACL, в том числе маску по умолчанию.
Каталогу необходимы стандартные записи ACL для контроля доступа, поскольку записи ACL по умолчанию не применяют контроль доступа для каталога, а всего лишь предоставляют поддержку наследования разрешений ACL. Пример:
[user@host ~]$ setfacl -m d:u:name:rx directory
setfacl -m d:u:name:rx directory
Эта команда добавляет запись по умолчанию для именованного пользователя (d:u:name) с разрешениями на чтение и выполнение.
d:u:name
Команда setfacl, добавляющая запись ACL по умолчанию для каждого типа ACL, абсолютно идентична команде для стандартных записей ACL, но перед ней добавляется d:. Еще один вариант — использовать опцию -d.
d:
-d
Добавляя записи ACL по умолчанию для каталога, убедитесь, что у пользователей есть доступ к содержимому новых подкаталогов. Для этого включите разрешение на выполнение в записи ACL по умолчанию.
Пользователи не получат автоматически разрешение на выполнение для новых файлов, так как (в отличие от новых каталогов) маской ACL для новых файлов является rw-.
rw-
Новые файлы и подкаталоги получают значения UID пользователя-владельца и GID группы-владельца от создателя файла или каталога, кроме тех случаев, когда установлен бит setgid для родительского каталога (в этом случае GID наследуется от родительского каталога).
setgid
Удаление записей ACL по умолчанию
Удаление записи ACL по умолчанию не отличается от удаления стандартных записей ACL ― добавьте конструкцию d: или используйте опцию -d.
[user@host ~]$ setfacl -x d:u:name directory
setfacl -x d:u:name directory
Будет удалена запись ACL по умолчанию, добавленная в предыдущем примере.
по умолчанию
Чтобы удалить все записи ACL по умолчанию для каталога, используйте команду setfacl -k directory.
Man-страницы acl(5), setfacl(1) и getfacl(1)