$ setfacl — x u: paulh,g: teach tfile
$ getfacl — omit-header tfile
user::rwx
group::r-x
mask::r-x
other::-x
Обратите внимание: во время этой операции команда setfacl автоматически подстраивает запись маски так, чтобы она соответствовала всем записям класса группы. (Здесь оказалась всего одна такая запись: ACL_GROUP_OBJ.) Если необходимо избежать подобной подстройки, то в команде setfacl следует указать параметр — n.
В заключение надо отметить, что команду setfacl с параметром — b можно использовать для удаления всех расширенных записей из ACL-списка, оставив лишь минимальные (то есть для пользователя, группы и остальных).
До сего момента разговора о списках ACL рассматривались списки
Данный список не играет роли при определении прав доступа, предоставляемых при доступе к каталогу. Напротив, его наличие или отсутствие определяет ACL-список (или списки), а также права доступа, которые относятся к файлам и к подкаталогам, создаваемым в данном каталоге. (ACL-список по умолчанию хранится в виде расширенного атрибута с именем system.posix_acl_default.)
Чтобы просмотреть и задать ACL-список по умолчанию для каталога, применяется параметр — d для команд getfacl и setfacl.
$ mkdir sub
$ setfacl — d — m u::rwx,u: paulh: rx,g::rx,g: teach: rwx,o::- sub
$ getfacl — d — omit-header sub
user::rwx
user: paulh: r-x
group::r-x
group: teach: rwx
mask::rwx
other::-
Удалить ACL-список по умолчанию для каталога можно с помощью параметра setfacl — k.
Если у каталога есть ACL-список по умолчанию, то:
• новый подкаталог, создаваемый в данном каталоге, наследует ACL-список по умолчанию в качестве своего ACL-списка по умолчанию. Иными словами, ACL-списки по умолчанию распространяются на нижние уровни дерева каталогов по мере создания новых подкаталогов;
• новый файл или подкаталог, созданные в данном каталоге, наследуют ACL-список по умолчанию для каталога в качестве своего ACL-списка доступа. Для записей ACL-списка, соответствующих традиционным битам прав доступа, применяется маска (операция И) в сочетании с соответствующими битами аргумента mode системного вызова (open(), mkdir() и т. д.), использованного для создания файла или подкаталога. Под «соответствующими записями ACL-списка» подразумеваются:
• ACL_USER_OBJ;
• ACL_MASK или, если отсутствует запись ACL_MASK, ACL_GROUP_OBJ;
• ACL_OTHER.
Если у каталога есть ACL-список по умолчанию, то маска umask для процесса (см. подраздел 15.4.6) не принимает участия в определении прав доступа для записей ACL-списка доступа нового файла, созданного в данном каталоге.
В качестве примера того, как новый файл наследует ACL-список доступа от ACL-списка по умолчанию для родительского каталога, допустим, что мы использовали следующий вызов open() для создания нового файла в каталоге, созданном выше:
open("sub/tfile", O_RDWR | O_CREAT,
S_IRWXU | S_IXGRP | S_IXOTH); /* rwx — x — x */
Новый файл имел бы следующий ACL-список доступа:
$ getfacl — omit-header sub/tfile
user::rwx
user: paulh: r-x #effective:-x
group::r-x #effective:-x
group: teach: rwx #effective:-x
mask::-x
other::-
Если у каталога нет ACL-списка по умолчанию, то:
• новые подкаталоги, созданные в этом каталоге, также не имеют ACL-списка по умолчанию;
• права доступа к новому файлу или к каталогу устанавливаются в соответствии с обычными правилами (см. подраздел 15.4.6): для прав доступа к файлу берется значение аргумента mode (переданное вызову open(), mkdir() и т. д.), кроме битов, которые отключены маской umask для процесса. Это приводит к тому, что новый файл обладает минимальным ACL-списком.
Различные реализации файловых систем накладывают ограничения на количество записей в ACL-списке.