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

Новая модель списков 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: