Руководство по администрированию файловых систем ZFS Solaris

Настройка и просмотр списков ACL файлов ZFS в компактном формате

Устанавливать и просматривать разрешения файлов 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 в компактном формате:

owner@

Владельцу не предоставляются права на выполнение файла (x= execute).

owner@

Владелец может читать и изменять содержимое файла ( rw=read_data/write_data, (p= append_data). Владелец также может изменять атрибуты файла, например отметки времени, расширенные атрибуты и ACL (A=write_xattr ,W=write_attributes,C=write_acl. Кроме того, владелец может изменять владельца файла(O=write_owner).

group@

Группе отказано в разрешении на изменение и выполнение файла (write_data,p= append_data и x=execute).

group@

Группе предоставляются разрешения на чтение файла (r=read_data).

everyone@

За исключением указанного пользователя или группы, всем пользователям отказано в разрешении на выполнение или изменение содержимого файла и любых его атрибутов (w=write_data, x= execute, p=append_data, A=write_xattr, W=write_attributes , C=write_aclи o= write_owner).

everyone@

Все пользователи за исключением указанного пользователя или группы, имеют разрешения на чтение файла и его атрибутов (r=read_data, a=append_data, R=read_xattr , c=read_acl и s= synchronize). Разрешения на синхронизацию (synchronize) в настоящее время не реализованы.

Компактный формат ACL имеет следующие преимущества по сравнению с подробным форматом списков ACL:

Для получения информации об использовании подробного формата списков ACL см. Настройка и просмотр списков ACL файлов ZFS в подробном формате


Пример 8–10 Настройка и просмотр списков ACL в компактном формате

В следующем примере для файла 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


Пример 8–11 Наследование списков ACL при выборе режима наследования ACL Pass Through

Файловая система, у которой свойство 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


Пример 8–12 Наследование списков ACL при выборе режима наследования ACL Pass Through-X

Если активирована функция 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@.