В этой главе описывается использование списков контроля доступа (ACL) для защиты файлов ZFS при помощи более детализированных разрешений, чем стандартные разрешения UNIX.
В этой главе содержатся следующие разделы:
Настройка и просмотр списков ACL файлов ZFS в подробном формате
Настройка и просмотр списков ACL файлов ZFS в компактном формате
В последних предыдущих версиях Solaris поддерживалась реализация списков ACL, в первую очередь основанная на спецификации списков ACL согласно проекту стандарта POSIX. Списки ACL на основе проекта POSIX используются для защиты файлов UFS. Они преобразуются в версиях NFS, предшествующих версии 4.
При внедрении NFSv4 новая модель списков ACL полностью поддерживает возможности совместного функционирования клиентов UNIX и не UNIX, обеспечиваемые NFSv4. Новая реализация списков ACL согласно спецификации NFSv4 обеспечивает расширенную семантику на основе списков ACL типа NT.
Ниже приведены основные отличия новой модели списков ACL.
Списки ACL основаны на спецификации NFSv4 и похожи на списки ACL типа NT.
Более структурированный набор прав доступа. Дополнительная информация приведена в Таблица 8–2.
Они настраиваются и отображаются с помощью командchmod и ls, а не setfacl и getfacl.
Расширенная семантика наследования для обозначения способа применения прав доступа от каталогов к подкаталогам и т. д. Для получения дополнительной информации см. Наследование списков ACL.
Обе модели списков ACL обеспечивают более структурированное управление доступом по сравнению со стандартными разрешениями для файлов. Как и списки ACL на основе проекта POSIX, новые списки ACL состоят из ряда записей управления доступом (ACE).
Списки ACL на основе проекта POSIX используют одну запись для определения разрешений и запретов. В новой модели списков ACL имеются два типа записей ACE, влияющих на проверку доступа: ALLOW и DENY. Нельзя наследовать от любой одиночной записи ACE, определяющего набор разрешений, независимо от того, были ли разрешения, не определенные в данной записи ACE, разрешены или отвергнуты.
Преобразование между списками ACL типа NFSv4 и списками ACL на основе проекта POSIX выполняется следующим образом.
В случае использования средства с поддержкой списков ACL, например команд cp, mv, tar, cpio или rcp, для перемещения файлов UFS со списками ACL в файловую систему ZFS, списки ACL на основе проекта POSIX преобразуются в эквивалентные списки ACL типа NFSv4.
Некоторые списки ACL типа NFSv4 преобразуются в списки ACL на основе проекта POSIX. Если списки ACL типа NFSv4 невозможно преобразовать в списки ACL на основе проекта POSIX, отображается следующее сообщение:
# cp -p filea /var/tmp cp: failed to set acl entries on /var/tmp/filea |
В случае создания архива UFS при помощи командtar или cpioс параметром сохранения списков ACL (tar-p или cpio -P) в системе с данной версией Solaris списки ACL не сохраняются при извлечении архива в систему с предыдущей версией.
Все файлы извлекаются с правильными правами для файлов, однако записи в списках ACL игнорируются.
Для извлечения данных в файловую систему ZFS можно использовать команду ufsrestore. Если в первоначальные данные входят списки ACL типа POSIX, они преобразуются в списки ACL типа NFSv4.
При попытке установки списков ACL типа NFSv4 для файла UFS появится следующее сообщение:
chmod: ERROR: ACL type's are different |
При попытке установки списков ACL на основе проекта POSIX для файла ZFS появятся следующие сообщения:
# getfacl filea File system doesn't support aclent_t style ACL's. See acl(5) for more information on Solaris ACL support. |
Для получения информации о других ограничениях, связанных со списками ACL и продуктами для резервного копирования, см. Сохранение данных ZFS с использованием сторонних решений для резервного копирования
Два основных формата списков 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]- файл
Определяет значение тип_записи_ACL для тривиальных списков ACL. Описание типов записи ACLприведено в Таблица 8–1.
Определяет значение тип_записи_ACL для явно задаваемого синтаксиса ACL. Для типов записи ACL "пользователь" и "группа" также необходимо указать значения идентификатор_записи_ACL, имя_пользователя или имя_группы Описание типов записи ACL приведено в Таблица 8–1.
Определяет наличие или отсутствие разрешений на доступ. Описание прав доступа списков ACL приведено в Таблица 8–2.
Определяет дополнительный список флагов наследования списков ACL. Описание флагов наследования списков ACL приведено вТаблица 8–3.
Определяет наличие или отсутствие разрешений на доступ.
В следующем примере значение идентификатор_записи_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 |
w |
Разрешение на добавление нового файла в каталог. |
add_subdirectory |
p |
Разрешение на создание подкаталога в каталоге. |
append_data |
p |
Местозаполнитель. В настоящее время не используется. |
delete |
d |
Разрешение на удаление файла. |
delete_child |
D |
Разрешение на удаление файла или каталога внутри каталога. |
выполнить |
x |
Разрешение на выполнение файла или поиска в содержимом каталога. |
list_directory |
r |
Разрешение на перечисление содержимого каталога. |
read_acl |
c |
Разрешение на чтение списка ACL (команда ls). |
read_attributes |
a |
Разрешение для чтения базовых атрибутов файла (отличных от списков ACL). Базовые атрибуты можно рассматривать как атрибуты на уровне команды "stat". Установка этого бита маски доступа означает, что объект может выполнять команды ls((1) и stat(2). |
read_data |
r |
Разрешение для чтения содержимого файла. |
read_xattr |
R |
Разрешение для чтения расширенных атрибутов файла или поиска в каталоге расширенных атрибутов файла. |
synchronize |
s |
Метка-заполнитель. В настоящее время не используется. |
write_xattr |
W |
Разрешение для создания расширенных атрибутов или записи в каталог расширенных атрибутов. Предоставление пользователю этих разрешений означает возможность создания каталога расширенных атрибутов для файла. Разрешениями для атрибутов файла определяется возможность доступа пользователя к атрибуту. |
write_data |
w |
Разрешение для изменения или замены содержимого файла. |
write_attributes |
A |
Разрешение для изменения данных о времени, связанных с файлом или каталогом, на произвольное значение. |
write_acl |
C |
Разрешение для создания или изменения списков ACL с помощью команды chmod. |
write_owner |
o |
Разрешение для изменения владельца или группы владельца файла. Или возможность выполнения для данного файла команд chown или chgrp . Разрешение для владения файлом или изменения группы владельца файла на группу, в состав которой входит пользователь. Для изменения владельца или группы владельца файла на произвольного пользователя или группу необходимо право PRIV_FILE_CHOWN. |
Цель наследования списков 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 файловой системы. Для получения дополнительной информации см. следующий раздел.
В файловой системе ZFS доступны два режима свойств, связанных со списками ACL:
aclinherit – это свойство определяет поведение наследования списков ACL. Допустимы следующие значения:
discard – для новых объектов при создании файла и каталога записи списков ACL не наследуются. ACL для файла или каталога равноценен режиму разрешений, заданному для файла или каталога.
noallow – для новых объектов наследуются только ACL с типом доступа deny.
restricted – при наследовании записи ACL для новых объектов разрешения write_owner и write_acl удаляются.
passthrough – если для свойства установлено значение passthrough, режим создаваемых файлов определяется наследуемыми записями ACE. Если наследуемых записей ACE, влияющих на режим, не существует, устанавливается режим, запрошенный приложением.
passthrough-x – семантика совпадает с таковой для passthrough, за следующим исключением: при включении passthrough-x файлы создаются с полномочиями на исполнение (x), но только если полномочия на исполнение настроены в режиме создания файла и в наследуемом ACE, который воздействует на режим.
По умолчанию для свойства aclinherit задан режим restricted.
aclmode – это свойство модифицирует поведение списков ACL при первоначальном создании файла, а также каждый раз, когда режим файла или каталога изменяется командой chmod. Допустимы следующие значения:
discard – удаляются все записи ACL, за исключением необходимых для определения режима файла или каталога.
groupmask – разрешения пользователя или группы пользователей списков ACL сокращаются таким образом, чтобы они не превышали биты разрешений группы, за исключением случаев, когда идентификатор пользователя в записи совпадает с идентификатором владельца файла или каталога. В последнем случае разрешения списков ACL сокращаются таким образом, чтобы они не превышали биты разрешений владельца.
passthrough – при выполнении операцииchmod записи ACE, отличные от owner@,group@и everyone@ остаются неизменными. Записи ACE, содержащие owner@, group@или everyone@отключаются, чтобы установить режим доступа к файлу согласно параметрам операции chmod.
По умолчанию для свойства aclmode задан режим groupmask.
В ZFS списки ACL представляет собой массив записей ACL. ZFS использует чистую модель списков ACL, в которой все файлы имеют тот или иной ACL. Обычно ACL является тривиальным в том смысле, что представляет только традиционные записи UNIX владелец/группа/все.
Файлы ZFS по-прежнему содержат биты разрешений и имеют режим разрешений, но эти значения представляют собой скорее кэш списков ACL. Таким образом, при изменении разрешений файла ACL обновляются соответствующим образом. Кроме того, при удалении нетривиального списка ACL, предоставляющего пользователю доступ к файлу или каталогу, этот пользователь по-прежнему сможет получать доступ к этому файлу или каталогу по причине битов разрешений, разрешающих доступ для группы или для всех пользователей. Все решения по управлению доступом определяются разрешениями, содержащимися в списках ACL файла или каталога.
Ниже приведены основные правила обработки списков ACL файлов ZFS:
ZFS обрабатывает записи ACL в том порядке, в котором они представлены в списке ACL, сверху вниз.
Обрабатываются только те записи в списке ACL, в которых определен пользователь, соответствующий тому, кто запрашивает доступ.
После предоставления разрешений доступа эти разрешения не могут быть аннулированы последующей записью deny в списках ACL в том же наборе разрешений.
Разрешение write_acl предоставляется владельцу файла безусловно, даже в том случае, если в этом разрешении явно отказано. В противном случае в любом не описанном разрешении будет отказано.
В случаях отказа в разрешении или отсутствия разрешений на доступ подсистема разрешений определяет, какой запрос на доступ удовлетворяется для владельца файла или суперпользователя. Этот механизм предотвращает блокирование доступа владельцев к своим файлам и позволяет суперпользователю изменять файлы в целях восстановления.
При выборе для каталога нетривиального списка 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 для файла:
Пользователю отказано в разрешении на изменение и выполнение файла (write_data/append_data/execute:deny).
Владелец может читать и изменять содержимое файла (read_data/write_data/append_data). Владелец может также изменять атрибуты файла, например отметки времени, расширенные атрибуты и ACL (write_xattr/write_attributes /write_acl ). Кроме того, владелец может изменять владельца файла (write_owner:allow.
Группе отказано в разрешении на изменение и выполнение файла (write_data/append_data/execute:deny).
Группе предоставляются разрешения на чтение файла (read_data:allow).
Всем, кто не является пользователем или группой, отказано в разрешении на выполнение или изменение содержимого файла или изменение любых его атрибутов (write_data/append_data/write_xattr/execute/write_attributes/write_acl/write_owner:deny ).
Все, кто не является пользователем или группой, получают разрешения на чтение файла и атрибутов файла (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 этого каталога :
Список запретов (deny) для владельца в каталоге пуст (::deny).
Владелец может читать и изменять содержимое каталога ( list_directory/read_data/add_file/write_data/add_subdirectory/append_data ), проводить поиск по содержимому (execute) и изменять такие атрибуты файла, как отметки времени, дополнительные атрибуты и ACL (write_xattr/write_attributes/write_acl). Кроме того, владелец может изменять принадлежность каталога (write_owner:allow).
Группа не может добавлять содержимое в каталог и изменять его содержимое (add_file/write_data/add_subdirectory/append_data:deny).
Группа может выводить в виде списка и просматривать содержимое каталога. Кроме того, группа обладает разрешениями на поиск в содержимом каталога (list_directory/read_data/execute:allow).
Всем, кто не является пользователем или группой, отказано в разрешении добавлять или изменять содержимое каталога (add_file/write_data/add_subdirectory/append_data). Кроме того, запрещается изменение любых атрибутов каталога (write_xattr/write_attributes/write_acl/write_owner:deny).
Все, кто не является пользователем или группой, могут читать и выполнять содержимое каталога (list_directory/read_data/read_xattr/execute/read_attributes/read_acl/synchronize:allow ). Разрешения на синхронизацию (synchronize) в настоящее время не реализованы.
Для изменения списков ACL файлов ZFS используется команда chmod. В следующей конструкции с командой chmod для изменения списков ACL используется параметр acl-спецификация, определяющий формат ACL. Описание параметра acl-спецификация приведено в разделе Синтаксис для настройки списков ACL.
Добавление записей списков ACL
Добавление записи списков ACL для пользователя
% chmod A+acl-specification filename |
Добавление записи списков ACL по значению индекс-идентификатор
% chmod Aindex-ID+acl-specification filename |
Эта конструкция используется для вставки новой записи списков ACL в место, заданное значением индекса-идентификатора.
Замена записи списков ACL
% chmod A=acl-specification filename |
% chmod Aindex-ID=acl-specification filename |
Удаление записей списков ACL
Удаление записи списков ACL по значению индекс-идентификатор
% chmod Aindex-ID- filename |
Удаление записи списков ACL для пользователя
% chmod A-acl-specification filename |
Удаление всех нетривиальных записей ACE файла
% chmod A- filename |
Для просмотра подробной информации о списках 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 в компактном формате.
В этом разделе приводятся примеры настройки и вывода тривиальных списков 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 |
В этом разделе описываются примеры настройки и отображения нетривиальных списков 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 |
В следующих примерах демонстрируется связь между настройкой списков 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 |
Вы можете использовать команду 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 для файлов и каталогов. По умолчанию наследование списков ACL не осуществляется. При выборе для каталога нетривиального списка ACL этот ACL не наследуется последующими каталогами. Необходимо указать способ наследования списков ACL для файла или каталога.
Кроме того, существуют два свойства списков ACL, которые могут быть заданы в файловых системах на глобальном уровне: aclinheritи aclmode. По умолчанию для aclinherit устанавливается значение restricted , а для aclmode – значение groupmask
Для получения дополнительной информации см.Наследование списков 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 |
В приведенных ниже примерах иллюстрируется применение записи 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 |
При выборе для свойства 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.
Если для свойства 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 |
В следующем примере выполняется настройка двух нетривиальных списков 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 |
Устанавливать и просматривать разрешения файлов 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@.