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

Глава 8 Защита файлов ZFS при помощи списков ACL

В этой главе описывается использование списков контроля доступа (ACL) для защиты файлов ZFS при помощи более детализированных разрешений, чем стандартные разрешения UNIX.

В этой главе содержатся следующие разделы:

Новая модель списков ACL Solaris

В последних предыдущих версиях Solaris поддерживалась реализация списков ACL, в первую очередь основанная на спецификации списков ACL согласно проекту стандарта POSIX. Списки ACL на основе проекта POSIX используются для защиты файлов UFS. Они преобразуются в версиях NFS, предшествующих версии 4.

При внедрении NFSv4 новая модель списков ACL полностью поддерживает возможности совместного функционирования клиентов UNIX и не UNIX, обеспечиваемые NFSv4. Новая реализация списков ACL согласно спецификации NFSv4 обеспечивает расширенную семантику на основе списков ACL типа NT.

Ниже приведены основные отличия новой модели списков ACL.

Обе модели списков ACL обеспечивают более структурированное управление доступом по сравнению со стандартными разрешениями для файлов. Как и списки ACL на основе проекта POSIX, новые списки ACL состоят из ряда записей управления доступом (ACE).

Списки ACL на основе проекта POSIX используют одну запись для определения разрешений и запретов. В новой модели списков ACL имеются два типа записей ACE, влияющих на проверку доступа: ALLOW и DENY. Нельзя наследовать от любой одиночной записи ACE, определяющего набор разрешений, независимо от того, были ли разрешения, не определенные в данной записи ACE, разрешены или отвергнуты.

Преобразование между списками ACL типа NFSv4 и списками ACL на основе проекта POSIX выполняется следующим образом.

Для получения информации о других ограничениях, связанных со списками ACL и продуктами для резервного копирования, см. Сохранение данных ZFS с использованием сторонних решений для резервного копирования

Синтаксис для настройки списков ACL

Два основных формата списков ACL описываются следующим образом:

Синтаксис для настройки тривиальных списков ACL

chmod [options] A[index]{+|=}owner@ |group@ |everyone@: разрешения_доступа/...[:флаги_наследования]: deny | allow файл

chmod [options] A-owner@, group@, everyone@:разрешения_доступа /...[:флаги_наследования]:deny | allow файл ...

chmod [options] A[index]- файл

Синтаксис для настройки нетривиальных списков ACL

chmod [options] A[index]{+|=}user|group:name:разрешения_доступа /...[:флаги_наследования]:deny | allow файл

chmod [options] A-user|group:name:разрешения_доступа /...[:флаги_наследования]:deny | allow файл ...

chmod [options] A[index]- файл

owner@, group@, everyone@

Определяет значение тип_записи_ACL для тривиальных списков ACL. Описание типов записи ACLприведено в Таблица 8–1.

пользователь или группа:идентификатор_записи_ACL=имя_пользователя или имя_группы

Определяет значение тип_записи_ACL для явно задаваемого синтаксиса ACL. Для типов записи ACL "пользователь" и "группа" также необходимо указать значения идентификатор_записи_ACL, имя_пользователя или имя_группы Описание типов записи ACL приведено в Таблица 8–1.

разрешения_доступа/.../

Определяет наличие или отсутствие разрешений на доступ. Описание прав доступа списков ACL приведено в Таблица 8–2.

флаги_наследования

Определяет дополнительный список флагов наследования списков ACL. Описание флагов наследования списков ACL приведено вТаблица 8–3.

deny | allow

Определяет наличие или отсутствие разрешений на доступ.

В следующем примере значение идентификатор_записи_ACL не учитывается.


group@:write_data/append_data/execute:deny

Следующий пример включает значение идентификатор_записи_ACL, поскольку в списке ACL задан определенный пользователь (тип_записи_ACL).


0:user:gozer:list_directory/read_data/execute:allow

При отображении записи ACL выглядит следующим образом:


2:group@:write_data/append_data/execute:deny

Обозначение 2 или индекс_идентификатор в данном примере определяет запись ACL в большом списке ACL, который может содержать несколько записей для владельца, определенных пользователей, группы и всех пользователей. Для указания на фрагмент списков ACL, который требуется изменить, можно указать индекс_идентификатор с помощью команды chmod. Например, в командеchmod можно определить индекс 3 как A3 аналогично следующему:


chmod A3=user:venkman:read_acl:allow filename

В следующей таблице описаны типы записей ACL, т. е. представление владельца, группы и других пользователей.

Таблица 8–1 Типы записей ACL

Тип записи ACL 

Описание 

owner@

Определяет права доступа, предоставляемые владельцу объекта. 

group@

Определяет права доступа, предоставляемые группе, владеющей объектом. 

everyone@

Определяет права доступа, предоставляемые любому пользователю или группе, не соответствующим любой другой записи ACL. 

user

При указании имени пользователя определяет права доступа, предоставляемые дополнительному пользователю объекта. Должна включать значение идентификатор_записи_ACL, содержащее имя_пользователя или идентификатор_пользователя. Если это значение не представляет собой действительный числовой идентификатор пользователя (UID) или имя_пользователя, то тип записи ACL считается недопустимым.

group

При указании имени группы определяет права доступа, предоставляемые дополнительной группе пользователя объекта. Должна включать значение идентификатор_записи_ACL, содержащее имя_группы или идентификатор_группы. Если это значение не представляет собой действительный числовой идентификатор группы (GID) или имя_группы, то тип записи ACL считается недопустимым.

Права доступа к спискам ACL описаны в следующей таблице.

Таблица 8–2 Права доступа к спискам ACL

Право доступа 

Сокращенное право доступа 

Описание 

add_file 

Разрешение на добавление нового файла в каталог. 

add_subdirectory 

Разрешение на создание подкаталога в каталоге. 

append_data 

Местозаполнитель. В настоящее время не используется. 

delete 

Разрешение на удаление файла. 

delete_child 

Разрешение на удаление файла или каталога внутри каталога. 

выполнить 

Разрешение на выполнение файла или поиска в содержимом каталога. 

list_directory 

Разрешение на перечисление содержимого каталога. 

read_acl 

Разрешение на чтение списка ACL (команда ls).

read_attributes 

Разрешение для чтения базовых атрибутов файла (отличных от списков ACL). Базовые атрибуты можно рассматривать как атрибуты на уровне команды "stat". Установка этого бита маски доступа означает, что объект может выполнять команды ls((1) и stat(2).

read_data 

Разрешение для чтения содержимого файла. 

read_xattr 

Разрешение для чтения расширенных атрибутов файла или поиска в каталоге расширенных атрибутов файла. 

synchronize 

Метка-заполнитель. В настоящее время не используется. 

write_xattr 

Разрешение для создания расширенных атрибутов или записи в каталог расширенных атрибутов. 

Предоставление пользователю этих разрешений означает возможность создания каталога расширенных атрибутов для файла. Разрешениями для атрибутов файла определяется возможность доступа пользователя к атрибуту. 

write_data 

Разрешение для изменения или замены содержимого файла. 

write_attributes 

Разрешение для изменения данных о времени, связанных с файлом или каталогом, на произвольное значение. 

write_acl 

Разрешение для создания или изменения списков ACL с помощью команды chmod.

write_owner 

Разрешение для изменения владельца или группы владельца файла. Или возможность выполнения для данного файла команд chown или chgrp .

Разрешение для владения файлом или изменения группы владельца файла на группу, в состав которой входит пользователь. Для изменения владельца или группы владельца файла на произвольного пользователя или группу необходимо право PRIV_FILE_CHOWN.

Наследование списков ACL

Цель наследования списков ACL заключается в переносе в новый файл или каталог соответствующих списков ACL с учетом существующих битов разрешений в родительском каталоге

По умолчанию наследование списков ACL не осуществляется. При выборе для каталога нетривиального списка ACL этот ACL не наследуется последующими каталогами. Для файла или каталога необходимо специально задавать наследование списков ACL.

Необязательные флаги наследования описаны в следующей таблице.

Таблица 8–3 Флаги наследования списков ACL

Флаг наследования 

Сокращенное название 

Описание 

file_inherit

f

Наследование файлами каталога только списками ACL из родительского каталога. 

dir_inherit

d

Наследование списков ACL в подкаталогах только из родительского каталога. 

inherit_only

i

Наследование списков ACL из родительского каталога, но только по отношению к новым файлам или подкаталогам, а не непосредственно к каталогу. Для определения наследуемого списков ACL необходимо установить флаг file_inherit, флаг dir_inherit или оба флага.

no_propagate

n

Наследование списков ACL из родительского каталога содержимым первого уровня каталога, но не второго или последующих уровней. Для определения наследуемых списков ACL необходимо установить флаг file_inherit, флаг dir_inherit или оба флага.

-

нет 

Разрешение не предоставляется. 

Кроме того, для файловой системы можно установить политику наследования списков ACL по умолчанию, которая может быть более или менее строгой, в зависимости от свойстваaclinherit файловой системы. Для получения дополнительной информации см. следующий раздел.

Режимы свойств списков ACL

В файловой системе ZFS доступны два режима свойств, связанных со списками ACL:

Настройка списков ACL для файлов ZFS

В ZFS списки ACL представляет собой массив записей ACL. ZFS использует чистую модель списков ACL, в которой все файлы имеют тот или иной ACL. Обычно ACL является тривиальным в том смысле, что представляет только традиционные записи UNIX владелец/группа/все.

Файлы ZFS по-прежнему содержат биты разрешений и имеют режим разрешений, но эти значения представляют собой скорее кэш списков ACL. Таким образом, при изменении разрешений файла ACL обновляются соответствующим образом. Кроме того, при удалении нетривиального списка ACL, предоставляющего пользователю доступ к файлу или каталогу, этот пользователь по-прежнему сможет получать доступ к этому файлу или каталогу по причине битов разрешений, разрешающих доступ для группы или для всех пользователей. Все решения по управлению доступом определяются разрешениями, содержащимися в списках ACL файла или каталога.

Ниже приведены основные правила обработки списков ACL файлов ZFS:

При выборе для каталога нетривиального списка ACL этот ACL не наследуется дочерними каталогами автоматически. В случае выбора нетривиального списка ACL и необходимости его наследования дочерними каталогами следует использовать флаги наследования списков ACL. Для получения дополнительной информации см. Таблица 8–3 и раздел Настройка наследования списков ACL файлов ZFS в подробном формате.

При создании нового файла, в зависимости от значения umask, применяется тривиальный ACL по умолчанию, подобный следующему:


$ ls -v file.1
-r--r--r--   1 root     root      206663 Aug 31 11:53 file.1
     0:owner@:write_data/append_data/execute:deny
     1:owner@:read_data/write_xattr/write_attributes/write_acl/write_owner
         :allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

Следует отметить, что для каждой категории пользователей (owner@, group@ , everyone@) в этом примере определены две записи ACL. Одна запись для отказа deny в разрешениях и одна для предоставления allow разрешений..

Ниже приведено описание этого списка ACL для файла:

0:owner@

Пользователю отказано в разрешении на изменение и выполнение файла (write_data/append_data/execute:deny).

1:owner@

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

2:group@

Группе отказано в разрешении на изменение и выполнение файла (write_data/append_data/execute:deny).

3:group@

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

4:everyone@

Всем, кто не является пользователем или группой, отказано в разрешении на выполнение или изменение содержимого файла или изменение любых его атрибутов (write_data/append_data/write_xattr/execute/write_attributes/write_acl/write_owner:deny ).

5:everyone@

Все, кто не является пользователем или группой, получают разрешения на чтение файла и атрибутов файла (read_data/read_xattr/read_attributes/read_acl/synchronize:allow ). Разрешения на синхронизацию (synchronize) в настоящее время не реализованы.

При создании нового каталога, в зависимости от значения umask, каталог списков ACL по умолчанию выглядит следующим образом:


$ ls -dv dir.1
drwxr-xr-x   2 root     root           2 Aug 31 11:54 dir.1
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

Ниже приведено описание списков ACL этого каталога :

0:owner@

Список запретов (deny) для владельца в каталоге пуст (::deny).

1:owner@

Владелец может читать и изменять содержимое каталога ( list_directory/read_data/add_file/write_data/add_subdirectory/append_data ), проводить поиск по содержимому (execute) и изменять такие атрибуты файла, как отметки времени, дополнительные атрибуты и ACL (write_xattr/write_attributes/write_acl). Кроме того, владелец может изменять принадлежность каталога (write_owner:allow).

2:group@

Группа не может добавлять содержимое в каталог и изменять его содержимое (add_file/write_data/add_subdirectory/append_data:deny).

3:group@

Группа может выводить в виде списка и просматривать содержимое каталога. Кроме того, группа обладает разрешениями на поиск в содержимом каталога (list_directory/read_data/execute:allow).

4:everyone@

Всем, кто не является пользователем или группой, отказано в разрешении добавлять или изменять содержимое каталога (add_file/write_data/add_subdirectory/append_data). Кроме того, запрещается изменение любых атрибутов каталога (write_xattr/write_attributes/write_acl/write_owner:deny).

5:everyone@

Все, кто не является пользователем или группой, могут читать и выполнять содержимое каталога (list_directory/read_data/read_xattr/execute/read_attributes/read_acl/synchronize:allow ). Разрешения на синхронизацию (synchronize) в настоящее время не реализованы.

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

Для изменения списков ACL файлов ZFS используется команда chmod. В следующей конструкции с командой chmod для изменения списков ACL используется параметр acl-спецификация, определяющий формат ACL. Описание параметра acl-спецификация приведено в разделе Синтаксис для настройки списков ACL.

Для просмотра подробной информации о списках ACL используется команда ls-v. Пример:


# ls -v file.1
-rw-r--r--   1 root     root      206663 Aug 31 11:53 file.1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

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


Пример 8–1 Изменение тривиальных списков ACL для файлов ZFS

В этом разделе приводятся примеры настройки и вывода тривиальных списков ACL.

В следующем примере для файла file.1 используется тривиальный ACL:


# ls -v file.1
-rw-r--r--   1 root     root      206663 Aug 31 11:53 file.1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

В следующем примере группе group@ предоставляются разрешения write_data.


# chmod A2=group@:append_data/execute:deny file.1
# chmod A3=group@:read_data/write_data:allow file.1
# ls -v file.1
-rw-rw-r--   1 root     root      206663 Aug 31 11:53 file.1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:append_data/execute:deny
     3:group@:read_data/write_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

В следующем примере для файла file.1 разрешения снова устанавливаются на 644.


# chmod 644 file.1
# ls -v file.1
-rw-r--r--   1 root     root      206663 Aug 31 11:53 file.1
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow


Пример 8–2 Настройка нетривиальных списков ACL для файлов ZFS

В этом разделе описываются примеры настройки и отображения нетривиальных списков ACL.

В следующем примере для пользователя gozer добавляются разрешения read_data/execute в отношении каталога test.dir.


# chmod A+user:gozer:read_data/execute:allow test.dir
# ls -dv test.dir
drwxr-xr-x+  2 root     root           2 Aug 31 12:02 test.dir
     0:user:gozer:list_directory/read_data/execute:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующем примере разрешения read_data/executeдля пользователя gozer удаляются.


# chmod A0- test.dir
# ls -dv test.dir
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow


Пример 8–3 Связь списков ACL с разрешениями в файлах ZFS

В следующих примерах демонстрируется связь между настройкой списков ACL и последующим изменением битов разрешений файла или каталога.

В следующем примере для файла file.2используется тривиальный ACL:


# ls -v file.2
-rw-r--r--   1 root     root        2836 Aug 31 12:06 file.2
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

В следующем примере удаляются разрешения списков ACL (allow) для группы everyone@.


# chmod A5- file.2
# ls -v file.2
-rw-r-----+  1 root     root        2836 Aug 31 12:06 file.2
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny

В приведенных выходных данных биты разрешений файла сбрасываются с 655 до 650. Разрешения на чтение для пользователя everyone@, по сути, удаляются из битов разрешений файла, когда удаляются разрешения списков ACL для пользователя everyone@.

В следующем примере существующий список ACL заменяется разрешениями read_data/write_data для группы everyone@.


# chmod A=everyone@:read_data/write_data:allow file.3
# ls -v file.3
-rw-rw-rw-+  1 root     root        2455 Aug 31 12:08 file.3
     0:everyone@:read_data/write_data:allow

В приведенных выходных данных конструкция chmod, по сути, заменяет существующий список ACL с разрешениями read_data/write_data:allow на чтение/изменение для владельца, группы иeveryone@. В этой модели группа everyone@ охватывает всех пользователей и группы пользователей. Поскольку запись ACL для owner@илиgroup@, переопределяющая разрешения владельца или группы, отсутствует, биты разрешений установлены в 666.

В следующем примере существующий список ACL заменяется разрешениями на чтение для пользователя gozer.


# chmod A=user:gozer:read_data:allow file.3
# ls -v file.3
----------+  1 root     root        2455 Aug 31 12:08 file.3
     0:user:gozer:read_data:allow

В результате для разрешений на работу с файлом устанавливается значение 000, поскольку для owner@ , group@ и everyone@отсутствуют записи ACL, представляющие собой стандартные компоненты разрешений файла. Владелец файла может решить эту проблему путем переустановки разрешений (и списков ACL) следующим образом:


# chmod 655 file.3
# ls -v file.3
-rw-r-xr-x+  1 root     root        2455 Aug 31 12:08 file.3
     0:user:gozer::deny
     1:user:gozer:read_data:allow
     2:owner@:execute:deny
     3:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     4:group@:write_data/append_data:deny
     5:group@:read_data/execute:allow
     6:everyone@:write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:deny
     7:everyone@:read_data/read_xattr/execute/read_attributes/read_acl
         /synchronize:allow


Пример 8–4 Восстановление тривиальных списков ACL файлов ZFS

Вы можете использовать команду chmod для удаления всех нетривиальных списков ACL файла или каталога.

В следующем примере для test5.dir существует две нетривиальных записи ACE.


# ls -dv test5.dir
drwxr-xr-x+  2 root     root           2 Aug 31 12:11 test5.dir
     0:user:lp:read_data:file_inherit:deny
     1:user:gozer:read_data:file_inherit:deny
     2:owner@::deny
     3:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     4:group@:add_file/write_data/add_subdirectory/append_data:deny
     5:group@:list_directory/read_data/execute:allow
     6:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     7:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующем примере нетривиальные ACL для пользователей gozerи lp удаляются. Оставшийся ACL содержит шесть значений по умолчанию для owner@, group@ и everyone@.


# chmod A- test5.dir
# ls -dv test5.dir
drwxr-xr-x   2 root     root           2 Aug 31 12:11 test5.dir
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

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

Эта процедура позволяет определить наследование списков ACL для файлов и каталогов. По умолчанию наследование списков ACL не осуществляется. При выборе для каталога нетривиального списка ACL этот ACL не наследуется последующими каталогами. Необходимо указать способ наследования списков ACL для файла или каталога.

Кроме того, существуют два свойства списков ACL, которые могут быть заданы в файловых системах на глобальном уровне: aclinheritи aclmode. По умолчанию для aclinherit устанавливается значение restricted , а для aclmode – значение groupmask

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


Пример 8–5 Предоставление наследования списков ACL по умолчанию

По умолчанию ACL не наследуются в структуре каталога.

В следующем примере для пользователя gozer в каталоге test.dir используется нетривиальная запись ACE read_data/write_data/execute.


# chmod A+user:gozer:read_data/write_data/execute:allow test.dir
# ls -dv test.dir
drwxr-xr-x+  2 root     root           2 Aug 31 13:02 test.dir
     0:user:gozer:list_directory/read_data/add_file/write_data/execute:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

При создании подкаталога test.dir записи ACE для пользователя gozer не наследуется. Пользователь gozer получает доступ к каталогу sub.dir только в том случае, если разрешения sub.dir обеспечивают для него доступ в качестве владельца файла, члена его группы или everyone@.


# mkdir test.dir/sub.dir
# ls -dv test.dir/sub.dir
drwxr-xr-x   2 root     root           2 Aug 31 13:26 test.dir/sub.dir
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow


Пример 8–6 Разрешение наследования списков ACL для файлов и каталогов

В приведенных ниже примерах иллюстрируется применение записи ACE файлов и каталогов при установленном флаге file_inherit.

В следующем примере для пользователя gozer добавляются разрешения read_data/write_data в отношении файлов в каталоге test.dir. Таким образом, этот пользователь получает разрешения на чтение любых новых файлов.


# chmod A+user:gozer:read_data/write_data:file_inherit:allow test2.dir
# ls -dv test2.dir
drwxr-xr-x+  2 root     root           2 Aug 31 13:26 test2.dir
     0:user:gozer:read_data/write_data:file_inherit:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующем примере разрешения пользователя gozer применяются по отношению к новому файлу test2.dir/file.2. Разрешение наследования списков ACL read_data:file_inherit:allow) означает, что пользователь gozer может просматривать содержимое любого нового файла.


# touch test2.dir/file.2
# ls -v test2.dir/file.2
-rw-r--r--+  1 root     root           0 Aug 31 13:27 test2.dir/file.2
     0:user:gozer:write_data:deny
     1:user:gozer:read_data/write_data:allow
     2:owner@:execute:deny
     3:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     4:group@:write_data/append_data/execute:deny
     5:group@:read_data:allow
     6:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     7:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

Поскольку для свойства aclmode этого файла задан режим по умолчанию, groupmask, пользователь gozer не обладает разрешением write_data в отношении file.2 , так как это противоречит разрешениям группы в отношении этого файла.

Следует отметить, что разрешение inherit_only, применяемое при установке флагов file_inherit или dir_inherit, позволяет распространить ACL по структуре каталога. Пользователь gozer получает или не получает разрешения everyone@ только в том случае, если он не является владельцем файла или членом группы владельца файла. Пример:


# mkdir test2.dir/subdir.2
# ls -dv test2.dir/subdir.2
drwxr-xr-x+  2 root     root           2 Aug 31 13:28 test2.dir/subdir.2
     0:user:gozer:list_directory/read_data/add_file/write_data:file_inherit
         /inherit_only:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующих примерах демонстрируются ACL файлов и каталогов, которые применяются, если одновременно установлены флаги file_inheritи dir_inherit.

В следующем примере пользователю gozer предоставляются разрешения на чтение, запись и выполнение, которые наследуются новыми файлами и каталогами.


# chmod A+user:gozer:read_data/write_data/execute:file_inherit/dir_inherit:allow 
test3.dir
# ls -dv test3.dir
drwxr-xr-x+  2 root     root           2 Aug 31 13:29 test3.dir
     0:user:gozer:list_directory/read_data/add_file/write_data/execute
         :file_inherit/dir_inherit:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

# touch test3.dir/file.3
# ls -v test3.dir/file.3
-rw-r--r--+  1 root     root           0 Jun 20 14:42 test3.dir/file.3
     0:user:gozer:write_data/execute:deny
     1:user:gozer:read_data/write_data/execute:allow
     2:owner@:execute:deny
     3:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     4:group@:write_data/append_data/execute:deny
     5:group@:read_data:allow
     6:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     7:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

# mkdir test3.dir/subdir.1
# ls -dv test3.dir/subdir.1
drwxr-xr-x+  2 root     root           2 Aug 31 13:32 test3.dir/subdir.1
     0:user:gozer:list_directory/read_data/add_file/write_data/execute
         :file_inherit/dir_inherit/inherit_only:allow
     1:user:gozer:add_file/write_data:deny
     2:user:gozer:list_directory/read_data/add_file/write_data/execute:allow
     3:owner@::deny
     4:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     5:group@:add_file/write_data/add_subdirectory/append_data:deny
     6:group@:list_directory/read_data/execute:allow
     7:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     8:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В этих примерах, поскольку биты разрешений родительского каталога для group@ и everyone@ в этих примерах запрещают запись и выполнение, соответствующие разрешения пользователю gozer не предоставляются. Для свойства aclmode по умолчанию задан режим restricted. Это означает, что разрешения write_data и execute не наследуются.

В следующем примере пользователю gozer предоставляются разрешения на чтение, запись и выполнение, которые наследуются новыми файлами, но не распространяются на последующее содержимое каталога.


# chmod A+user:gozer:read_data/write_data/execute:file_inherit/no_propagate:allow 
test4.dir
# ls -dv test4.dir
drwxr-xr-x+  2 root     root           2 Aug 31 13:34 test4.dir
     0:user:gozer:list_directory/read_data/add_file/write_data/execute
         :file_inherit/no_propagate:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующем примере при создании нового подкаталога файловые разрешения пользователя gozer read_data/write_data/execute не распространяются на новый каталог sub4.dir.


mkdir test4.dir/sub4.dir
# ls -dv test4.dir/sub4.dir
drwxr-xr-x   2 root     root           2 Aug 31 13:35 test4.dir/sub4.dir
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующем примере демонстрируется распространение файловых разрешений пользователя gozerread_data/write_data/execute на новый созданный файл.


# touch test4.dir/file.4
# ls -v test4.dir/file.4
-rw-r--r--+  1 root     root           0 Aug 31 13:35 test4.dir/file.4
     0:user:gozer:write_data/execute:deny
     1:user:gozer:read_data/write_data/execute:allow
     2:owner@:execute:deny
     3:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     4:group@:write_data/append_data/execute:deny
     5:group@:read_data:allow
     6:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     7:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow


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

При выборе для свойства aclmode в файловой системе tank/cindys режима passthroughпользователь gozer наследует ACL каталога test4.dir в отношении нового файла file.4 следующим образом:


# zfs set aclmode=passthrough tank/cindys
# touch test4.dir/file.4
# ls -v test4.dir/file.4
-rw-r--r--+  1 root     root           0 Aug 31 13:39 test4.dir/file.4
     0:user:gozer:write_data/execute:deny
     1:user:gozer:read_data/write_data/execute:allow
     2:owner@:execute:deny
     3:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     4:group@:write_data/append_data/execute:deny
     5:group@:read_data:allow
     6:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     7:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

Этот результат демонстрирует, что пользователю gozer передается спискам ACL read_data/write_data/execute:allow:file_inherit/dir_inherit, заданный для родительского каталога test4.dir.



Пример 8–8 Наследование списков ACL при выборе режима списков ACL "Discard"

Если для свойства aclmode в файловой системе выбран режим discard, то существует вероятность того, что в случае изменения битов разрешений в каталоге записи ACL будут проигнорированы. Пример:


# zfs set aclmode=discard tank/cindys
# chmod A+user:gozer:read_data/write_data/execute:dir_inherit:allow test5.dir
# ls -dv test5.dir
drwxr-xr-x+  2 root     root           2 Aug 31 13:40 test5.dir
     0:user:gozer:list_directory/read_data/add_file/write_data/execute
         :dir_inherit:allow
     1:owner@::deny
     2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     3:group@:add_file/write_data/add_subdirectory/append_data:deny
     4:group@:list_directory/read_data/execute:allow
     5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

Если в дальнейшем в отношении каталога будут установлены более строгие разрешения, нетривиальный ACL будет проигнорирован. Пример:


# chmod 744 test5.dir
# ls -dv test5.dir
drwxr--r--   2 root     root           2 Aug 31 13:40 test5.dir
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data/execute:deny
     3:group@:list_directory/read_data:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /execute/write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/read_attributes/read_acl
         /synchronize:allow


Пример 8–9 Наследование списков ACL при выборе режима наследования списков ACL "Noallow"

В следующем примере выполняется настройка двух нетривиальных списков ACL с наследованием файлов. Один ACL предоставляет разрешение read_data, а другой ACL отклоняет разрешение read_data. В этом примере также демонстрируется определение двух записей ACE в одной команде chmod.


# zfs set aclinherit=noallow tank/cindys
# chmod A+user:gozer:read_data:file_inherit:deny,user:lp:read_data:file_inherit:allow 
test6.dir
# ls -dv test6.dir
drwxr-xr-x+  2 root     root           2 Aug 31 13:43 test6.dir
     0:user:gozer:read_data:file_inherit:deny
     1:user:lp:read_data:file_inherit:allow
     2:owner@::deny
     3:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     4:group@:add_file/write_data/add_subdirectory/append_data:deny
     5:group@:list_directory/read_data/execute:allow
     6:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     7:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

В следующем примере демонстрируется, что при создании нового файла список ACL, предоставляющий разрешения read_data, игнорируется.


# touch test6.dir/file.6
# ls -v test6.dir/file.6
-rw-r--r--   1 root     root           0 Aug 31 13:44 test6.dir/file.6
     0:owner@:execute:deny
     1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
         /write_acl/write_owner:allow
     2:group@:write_data/append_data/execute:deny
     3:group@:read_data:allow
     4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
         /write_acl/write_owner:deny
     5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
         :allow

Настройка и просмотр списков 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@.