Руководства по командной строке

Man » Онлайн-руководство по acl — подробная онлайн-документация для страницы руководства acl

🌍
acl — Списки управления доступом

ОПИСАНИЕ

Эта страница руководства описывает списки управления доступом POSIX, которые используются для определения более детальных дискреционных прав доступа к файлам и каталогам.

ТИПЫ ACL

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

ЗАПИСИ ACL

ACL состоит из набора записей ACL. Запись ACL определяет права доступа к связанному объекту для отдельного пользователя или группы пользователей в виде комбинации разрешений на чтение, запись и поиск/выполнение.

Запись ACL содержит тип тега записи, необязательный квалификатор тега записи и набор разрешений. Мы используем термин «квалификатор» для обозначения квалификатора тега записи ACL.

Квалификатор обозначает идентификатор пользователя или группы для записей с типами тегов ACL_USER или ACL_GROUP соответственно. Записи с типами тегов, отличными от ACL_USER или ACL_GROUP, не имеют определенных квалификаторов.

Определены следующие типы тегов записи:

ACL_USER_OBJ Запись ACL_USER_OBJ обозначает права доступа для владельца файла.

ACL_USER Записи ACL_USER обозначают права доступа для пользователей, идентифицированных квалификатором записи.

ACL_GROUP_OBJ Запись ACL_GROUP_OBJ обозначает права доступа для группы файлов.

ACL_GROUP Записи ACL_GROUP обозначают права доступа для групп, идентифицированных квалификатором записи.

ACL_MASK Запись ACL_MASK обозначает максимальные права доступа, которые могут быть предоставлены записями типа ACL_USER, ACL_GROUP_OBJ или ACL_GROUP.

ACL_OTHER Запись ACL_OTHER обозначает права доступа для процессов, которые не соответствуют ни одной другой записи в ACL.

При выполнении проверки доступа записи ACL_USER_OBJ и ACL_USER проверяются по отношению к эффективному идентификатору пользователя. Эффективный идентификатор группы, а также все дополнительные идентификаторы групп проверяются по отношению к записям ACL_GROUP_OBJ и ACL_GROUP.

ДЕЙСТВИТЕЛЬНЫЕ ACL

Действительный ACL содержит ровно одну запись с каждым из типов тегов ACL_USER_OBJ, ACL_GROUP_OBJ и ACL_OTHER. Записи с типами тегов ACL_USER и ACL_GROUP могут появляться ноль или более раз в ACL. ACL, содержащий записи с типами тегов ACL_USER или ACL_GROUP, должен содержать ровно одну запись с типом тега ACL_MASK. Если ACL не содержит записей с типами тегов ACL_USER или ACL_GROUP, запись ACL_MASK является необязательной.

Все идентификаторы пользователей, используемые в качестве квалификаторов, должны быть уникальными среди всех записей тега ACL_USER, и все идентификаторы групп должны быть уникальными среди всех записей тега ACL_GROUP.

Функция acl_get_file() возвращает ACL с нулевым количеством записей в качестве ACL по умолчанию для каталога, если каталог не связан с ACL по умолчанию. Функция acl_set_file() также принимает ACL с нулевым количеством записей в качестве допустимого ACL по умолчанию для каталогов, что означает, что каталог не должен быть связан с ACL по умолчанию. Это эквивалентно использованию функции acl_delete_def_file().

СООТВЕТСТВИЕ МЕЖДУ ЗАПИСЯМИ ACL И БИТАМИ РАЗРЕШЕНИЙ ФАЙЛА

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

Существует соответствие между разрешениями владельца, группы и других пользователей файла и конкретными записями ACL: разрешения владельца соответствуют разрешениям записи ACL_USER_OBJ. Если в ACL есть запись ACL_MASK, разрешения группы соответствуют разрешениям записи ACL_MASK. В противном случае, если в ACL нет записи ACL_MASK, разрешения группы соответствуют разрешениям записи ACL_GROUP_OBJ. Разрешения других пользователей соответствуют разрешениям записи ACL_OTHER.

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

СОЗДАНИЕ ОБЪЕКТОВ И ACL ПО УМОЛЧАНИЮ

ACL доступа к файловому объекту инициализируется при создании объекта с помощью функций creat(), mkdir(), mknod(), mkfifo() или open(). Если с каталогом связан ACL по умолчанию, режим, передаваемый в функции, создающие файловые объекты, и ACL по умолчанию каталога используются для определения ACL нового объекта:

  Новый объект наследует ACL по умолчанию содержащего каталога в качестве своего ACL доступа.

  Записи ACL доступа, соответствующие битам разрешений файла, изменяются таким образом, что они не содержат разрешений, которых нет в разрешениях, указанных в параметре `mode`.

Если с каталогом не связан ACL по умолчанию, режим, передаваемый в функции, создающие файловые объекты, и маска создания файла (см. umask(2)) используются для определения ACL нового объекта:

  Новому объекту назначается ACL доступа, содержащий записи тегов ACL\_USER\_OBJ, ACL\_GROUP\_OBJ и ACL\_OTHER. Разрешения этих записей устанавливаются в разрешения, указанные в маске создания файла.

  Записи ACL доступа, соответствующие битам разрешений файла, изменяются таким образом, чтобы они не содержали разрешений, которых нет в разрешениях, указанных в параметре `mode`.

АЛГОРИТМ ПРОВЕРКИ ДОСТУПА

Процесс может запросить доступ для чтения, записи или выполнения/поиска к файловому объекту, защищенному ACL. Алгоритм проверки доступа определяет, будет ли предоставлен доступ к объекту.


    Если эффективный идентификатор пользователя процесса совпадает с идентификатором пользователя, являющегося владельцем файла, то:

если запись ACL_USER_OBJ содержит запрошенные разрешения, доступ предоставляется,

иначе доступ запрещается.

иначе, если эффективный идентификатор пользователя процесса совпадает с квалификатором любой записи типа ACL_USER, то:

если соответствующая запись ACL_USER и запись ACL_MASK содержат запрошенные разрешения, доступ предоставляется,

иначе доступ запрещается.

иначе, если эффективный идентификатор группы или любой из дополнительных идентификаторов групп процесса совпадает с группой файла или с квалификатором любой записи типа ACL_GROUP, то:

если ACL содержит запись ACL_MASK, то:

если запись ACL_MASK и любая из соответствующих записей ACL_GROUP_OBJ или ACL_GROUP содержат запрошенные разрешения, доступ предоставляется,

иначе доступ запрещается.

иначе (обратите внимание, что не может быть записей ACL_GROUP без записи ACL_MASK):

если запись ACL_GROUP_OBJ содержит запрошенные разрешения, доступ предоставляется,

иначе доступ запрещается.

иначе, если запись ACL_OTHER содержит запрошенные разрешения, доступ предоставляется.

иначе доступ запрещается.

Текстовые формы ACL

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

user Запись ACL пользователя указывает доступ, предоставленный либо владельцу файла (тег типа записи ACL_USER_OBJ), либо указанному пользователю (тег типа записи ACL_USER).

group Запись ACL группы указывает доступ, предоставленный либо группе файла (тег типа записи ACL_GROUP_OBJ), либо указанной группе (тег типа записи ACL_GROUP).

mask Запись маски ACL указывает максимальный доступ, который может быть предоставлен любой записью ACL, за исключением записи пользователя для владельца файла и записи other (тег типа записи ACL_MASK).

other Запись other ACL указывает доступ, предоставленный любому процессу, который не соответствует ни одной из записей ACL пользователя или группы (тег типа записи ACL_OTHER).

Второе поле содержит идентификатор пользователя или группы, связанный с записью ACL для записей типа тега записи ACL_USER или ACL_GROUP, и является пустым для всех остальных записей. Идентификатор пользователя может быть именем пользователя или десятичным номером идентификатора пользователя. Идентификатор группы может быть именем группы или десятичным номером идентификатора группы.

В третье поле входят дискретные разрешения доступа. Разрешения на чтение, запись и поиск/выполнение представлены символами r, w и x, соответственно. Каждый из этих символов заменяется символом "-", чтобы указать, что разрешение отсутствует в записи ACL. При преобразовании из текстовой формы во внутреннее представление разрешения, которые отсутствуют, указывать не обязательно.

В начале и в конце каждой записи ACL разрешено использование пробелов, а также непосредственно перед и после разделителя полей (символ двоеточия).

ДЛИННАЯ ФОРМА ТЕКСТА

В длинной форме текста каждая запись ACL содержится в отдельной строке. Кроме того, символ решетки (#) может начинать комментарий, который продолжается до конца строки. Если запись ACL_USER, ACL_GROUP_OBJ или ACL_GROUP содержит разрешения, которые также не содержатся в записи ACL_MASK, за этой записью следует символ решетки, строка «effective:» и эффективные разрешения доступа, определенные этой записью. Это пример длинной формы текста:

user::rw-
user:lisa:rw-         #effective:r-
group::r-
group:toolies:rw-     #effective:r-
mask::r-
other::r-

КОРОТКАЯ ФОРМА ТЕКСТА

Короткая форма текста представляет собой последовательность записей ACL, разделенных запятыми, и используется для ввода. Комментарии не поддерживаются. Ключевые слова типа записи могут быть указаны в полной не сокращенной форме или в сокращенной однобуквенной форме. Сокращение для user — u, для group — g, для mask — m и для other — o. Разрешения могут содержать не более одного из следующих символов в любом порядке: r, w, x.

Вот примеры короткой формы текста:

u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r-
g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r

ОБОСНОВАНИЕ

Черновик IEEE 1003.1e (версия 17) определяет списки управления доступом, которые включают записи типа ACL_MASK, и определяет отображение между битами разрешений файлов, которое не является постоянным. Рабочая группа стандарта определила этот относительно сложный интерфейс, чтобы гарантировать, что приложения, соответствующие IEEE 1003.1 («POSIX.1»), по-прежнему будут работать должным образом в системах с ACL. Обоснование выбора этого интерфейса содержится в разделе B.23 черновика IEEE 100.1e (версия 17).

ИЗМЕНЕНИЯ В УТИЛИТАХ ФАЙЛОВ

В системе, поддерживающей ACL, утилиты файлов ls(1), cp(1) и mv(1) изменяют свое поведение следующим образом:

Для файлов, имеющих ACL по умолчанию или ACL доступа, содержащий более трех необходимых записей ACL, утилита ls(1) в длинной форме, генерируемой командой ls -l, отображает знак плюс (+) после строки разрешений.

Если указан флаг -p, утилита cp(1) также сохраняет ACL. Если это невозможно, выдается предупреждение.

Утилита mv(1) всегда сохраняет ACL. Если это невозможно, выдается предупреждение.

Влияние утилиты chmod(1) и системного вызова chmod(2) на ACL доступа описано в разделе «СООТВЕТСТВИЕ МЕЖДУ ЗАПИСЯМИ ACL И БИТАМИ РАЗРЕШЕНИЙ ФАЙЛОВ».

СТАНДАРТЫ

Документ IEEE 1003.1e (черновик 17) («POSIX.1e») описывает несколько расширений безопасности стандарта IEEE 100.1. Хотя работа над 1003.1e была прекращена, многие UNIX-подобные системы реализуют части черновика 17 POSIX.1e или более ранних черновиков.


Linux Access Control Lists (ACL) реализуют полный набор функций и утилит, определенных для списков управления доступом в POSIX.1e, и ряд расширений. Реализация полностью соответствует черновику POSIX.1e 17; расширения отмечены соответствующим образом. Функции управления списками управления доступом определены в библиотеке ACL (libacl, -lacl). Соответствующие интерфейсы POSIX определены в заголовочном файле . Специфичные для Linux расширения этих функций определены в заголовочном файле .

ЗАМЕЧАНИЯ

ЗАПРЕЩЕННЫЕ РАЗРЕШЕНИЯ И ПРОСТРАНСТВА ИМЕН ПОЛЬЗОВАТЕЛЕЙ LINUX

Хотя ACL можно использовать для запрета процессам разрешений на основе групп, в которых они состоят, это считается плохой практикой. Привилегированные вспомогательные программы, такие как newuidmap(1), могут предоставить непривилегированным процессам доступ к системному вызову setgroups(2), который позволяет им отказаться от дополнительных членских групп и сделать неэффективными ограничения, основанные на этом членстве. Для получения дополнительной информации см. user_namespaces(7).

ССЫЛКИ

chmod(1), creat(2), getfacl(1), ls(1), mkdir(2), mkfifo(2), mknod(2), mount(8), open(2), setfacl(1), stat(2), umask(1)

POSIX 1003.1e ЧЕРНОВИК 17

https://wt.tuxomania.net/publications/posix.1e/download.html

ФУНКЦИИ POSIX 1003.1e ПО КАТЕГОРИЯМ

Управление хранилищем ACL acl_dup(3), acl_free(3), acl_init(3)

Манипулирование записями ACL acl_copy_entry(3), acl_create_entry(3), acl_delete_entry(3), acl_get_entry(3), acl_valid(3)

acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_delete_perm(3),
acl_get_permset(3), acl_set_permset(3)

acl_get_qualifier(3), acl_get_tag_type(3), acl_set_qualifier(3), acl_set_tag_type(3)

Манипулирование ACL для объекта acl_delete_def_file(3), acl_get_fd(3), acl_get_file(3), acl_set_fd(3), acl_set_file(3)

Преобразование формата ACL acl_copy_entry(3), acl_copy_ext(3), acl_from_text(3), acl_to_text(3), acl_size(3)

ФУНКЦИИ POSIX 1003.1e ПО ДОСТУПНОСТИ

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

acl_delete_def_file(3), acl_dup(3), acl_free(3), acl_from_text(3), acl_get_fd(3),
acl_get_file(3), acl_init(3), acl_set_fd(3), acl_set_file(3), acl_to_text(3), acl_valid(3)

acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_copy_entry(3), acl_copy_ext(3),
acl_copy_int(3), acl_create_entry(3), acl_delete_entry(3), acl_delete_perm(3), acl_get_entry(3),
acl_get_permset(3), acl_get_qualifier(3), acl_get_tag_type(3), acl_set_permset(3),
acl_set_qualifier(3), acl_set_tag_type(3), acl_size(3)

РАСШИРЕНИЯ LINUX

Эти непереносимые расширения доступны в системах Linux.

acl_check(3), acl_cmp(3), acl_entries(3), acl_equiv_mode(3), acl_error(3), acl_extended_fd(3),
acl_extended_file(3), acl_extended_file_nofollow(3), acl_from_mode(3), acl_get_perm(3),
acl_to_any_text(3)

АВТОР

Andreas Gruenbacher, <_>