Устанавливать и просматривать разрешения файлов ZFS можно в компактном формате, в котором для предоставления разрешений используется 14 разных букв. Буквы, представляющие разрешения в компактном формате, перечислены в Таблица 8–2 и Таблица 8–3.
Просмотреть компактные ACL для файлов и каталогов можно с помощью командыls-V. Пример:
# ls -V file.1 -rw-r--r-- 1 root root 206663 Aug 31 13:54 file.1 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
Ниже приведено описание списков ACL в компактном формате:
Владельцу не предоставляются права на выполнение файла (x= execute).
Владелец может читать и изменять содержимое файла ( rw=read_data/write_data, (p= append_data). Владелец также может изменять атрибуты файла, например отметки времени, расширенные атрибуты и ACL (A=write_xattr ,W=write_attributes,C=write_acl. Кроме того, владелец может изменять владельца файла(O=write_owner).
Группе отказано в разрешении на изменение и выполнение файла (write_data,p= append_data и x=execute).
Группе предоставляются разрешения на чтение файла (r=read_data).
За исключением указанного пользователя или группы, всем пользователям отказано в разрешении на выполнение или изменение содержимого файла и любых его атрибутов (w=write_data, x= execute, p=append_data, A=write_xattr, W=write_attributes , C=write_aclи o= write_owner).
Все пользователи за исключением указанного пользователя или группы, имеют разрешения на чтение файла и его атрибутов (r=read_data, a=append_data, R=read_xattr , c=read_acl и s= synchronize). Разрешения на синхронизацию (synchronize) в настоящее время не реализованы.
Компактный формат ACL имеет следующие преимущества по сравнению с подробным форматом списков ACL:
Разрешения можно определить как позиционные аргументы с помощью командыchmod.
Символ дефиса (-), указывающий на отсутствие разрешений, может быть удален. Необходимо указать только соответствующие буквы.
Настройка разрешений и флагов выполняется аналогичным образом.
Для получения информации об использовании подробного формата списков ACL см. Настройка и просмотр списков ACL файлов ZFS в подробном формате
В следующем примере для файла file.1 используется тривиальный ACL:
# ls -V file.1 -rw-r--r-- 1 root root 206663 Aug 31 13:54 file.1 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
В этом примере для пользователя gozerдобавляется разрешение read_data/execute в отношении файла file.1.
# chmod A+user:gozer:rx:allow file.1 # ls -V file.1 -rw-r--r--+ 1 root root 206663 Aug 31 13:54 file.1 user:gozer:r-x-----------:------:allow owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
Другим способом добавления тех же разрешений для пользователя gozer является добавление нового списка ACL в определенной позиции, например в 4-й. Таким образом, существующие ACL, находящиеся в позициях 4-6, сдвигаются вниз. Пример:
# chmod A4+user:gozer:rx:allow file.1 # ls -V file.1 -rw-r--r--+ 1 root root 206663 Aug 31 14:05 file.1 owner@:--xp----------:------:deny owner@:rw-----A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow user:gozer:r-x-----------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
В следующем примере с использованием компактного формата списков ACL пользователю gozer предоставляются разрешения на чтение, запись и выполнение, наследуемые новыми файлами и каталогами.
# chmod A+user:gozer:rwx:fd:allow dir.2 # ls -dV dir.2 drwxr-xr-x+ 2 root root 2 Aug 28 13:21 dir.2 user:gozer:rwx-----------:fd----:allow owner@:--------------:------:deny owner@:rwxp---A-W-Co-:------:allow group@:-w-p----------:------:deny group@:r-x-----------:------:allow everyone@:-w-p---A-W-Co-:------:deny everyone@:r-x---a-R-c--s:------:allow |
Кроме того, разрешения и флаги наследования можно переносить из вывода ls -V в компактный формат chmod. Например, для копирования разрешений и флагов наследования каталога dir.2 пользователя gozer пользователю cindys в каталоге dir.2 необходимо скопировать и вставить разрешения и флаги наследования ( rwx-----------:f-----:allow) в команду chmod. Пример:
# chmod A+user:cindys:rwx-----------:fd----:allow dir.2 # ls -dV dir.2 drwxr-xr-x+ 2 root root 2 Aug 28 14:12 dir.2 user:cindys:rwx-----------:fd----:allow user:gozer:rwx-----------:fd----:allow owner@:--------------:------:deny owner@:rwxp---A-W-Co-:------:allow group@:-w-p----------:------:deny group@:r-x-----------:------:allow everyone@:-w-p---A-W-Co-:------:deny everyone@:r-x---a-R-c--s:------:allow |
Файловая система, у которой свойство aclinherit имеет значение passthrough, наследует все наследуемые записи ACL, не изменяя их при этом. Если это свойство имеет значение passthrough, режим разрешения создаваемых файлов определяется наследуемыми записями ACE. Если наследуемых записей ACE, влияющих на режим разрешения, не существует, устанавливается режим разрешения, запрошенный приложением.
В следующих примерах на примере списков ACL с компактным синтаксисом показано наследование битов разрешений с помощью задания для параметра aclinherit значения passthrough .
В данном примере создается ACL для test1.dir, задающий наследование. Данная конструкция создает записи ACLowner@group@ и everyone@для создаваемых файлов. Созданные каталоги наследуют запись ACL @owner, group@ и everyone@. Кроме этого, каталоги наследуют 6 других записей ACE, которые распространяют эти записи ACE на вновь созданные каталоги и файлы.
# zfs set aclinherit=passthrough tank/cindys # pwd /tank/cindys # mkdir test1.dir |
# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow test1.dir # ls -Vd test1.dir drwxrwx---+ 2 root root 2 Aug 31 14:11 test1.dir owner@:rwxpdDaARWcCos:fd----:allow group@:rwxp----------:fd----:allow everyone@:--------------:fd----:allow |
В данном примере созданный файл наследует ACL, заданный для наследования созданными файлами.
# cd test1.dir # touch file.1 # ls -V file.1 -rwxrwx---+ 1 root root 0 Aug 31 14:14 file.1 owner@:rwxpdDaARWcCos:------:allow group@:rwxp----------:------:allow everyone@:--------------:------:allow |
В данном примере созданный каталог наследует обе записи ACE, управляющих доступом к этому каталогу, а также записи ACE, регулирующие распространение на дочерние каталоги вновь созданных каталогов.
# mkdir subdir.1 # ls -dV subdir.1 drwxrwx---+ 2 root root 2 Aug 31 14:15 subdir.1 owner@:rwxpdDaARWcCos:fdi---:allow owner@:rwxpdDaARWcCos:------:allow group@:rwxp----------:fdi---:allow group@:rwxp----------:------:allow everyone@:--------------:fdi---:allow everyone@:--------------:------:allow |
Записи -di-- и f-i--- служат для распространения наследования и не принимаются во внимание при управлении доступом. В данном примере файл создается с тривиальным списком ACL в другом каталоге, где наследуемые записи ACE не присутствуют.
# cd /tank/cindys # mkdir test2.dir # cd test2.dir # touch file.2 # ls -V file.2 -rw-r--r-- 1 root root 0 Aug 31 14:16 file.2 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
Если активирована функция aclinherit=passthrough-x, файла создаются при выполнении разрешения (x) для owner@, group@ или everyone@, но только в том случае, если разрешение на выполнение установлено в режиме создания файлов и в наследуемом ACE, который влияет на данный режим.
В примере ниже показан метод наследования разрешения на выполнение при установке режима aclinherit для passthrough-x.
# zfs set aclinherit=passthrough-x tank/cindys |
Следующий ACL установлен на /tank/cindys/test1.dir для обеспечения выполнимого наследования ACL для файлов owner@,
# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow,everyone@::fd:allow test1.dir # ls -Vd test1.dir drwxrwx---+ 2 root root 2 Aug 31 15:05 test1.dir owner@:rwxpdDaARWcCos:fd----:allow group@:rwxp----------:fd----:allow everyone@:--------------:fd----:allow |
Файл (file1) создается при наличии затребованных разрешений 0666. Результатом являются разрешения 0660. Разрешение на выполнение не было унаследовано, так как оно не требовалось для режима создания.
# touch test1.dir/file1 # ls -V test1.dir/file1 -rw-rw----+ 1 root root 0 Aug 31 15:06 test1.dir/file1 owner@:rw-pdDaARWcCos:------:allow group@:rw-p----------:------:allow everyone@:--------------:------:allow |
Затем генерируется выполняемый исполняемый файл с именем t посредством компилятора cc в каталоге testdir.
# cc -o t t.c # ls -V t -rwxrwx---+ 1 root root 7396 Dec 3 15:19 t owner@:rwxpdDaARWcCos:------:allow group@:rwxp----------:------:allow everyone@:--------------:------:allow |
Результатом являются разрешения 0770, так как cc требует разрешений 0777, из-за чего разрешение на выполнение наследуется из записей owner@, group@ и everyone@.