Начиная с версии 2.6, Linux поддерживает расширенные атрибуты, которые допускают использование произвольных метаданных для файла, представленных в виде пар «имя-значение».

16.5. Упражнение

16.1. Напишите программу, которую можно использовать для создания или изменения EA типа user (то есть простую версию системного вызова setfattr(1)). Имя файла, а также имя и значение расширенного атрибута должны передаваться программе как аргументы командной строки.

<p>17. Списки контроля доступа</p>

В разделе 15.4 описана традиционная для UNIX (и Linux) организация файловых прав доступа. Для многих приложений эта схема является достаточной. Однако отдельным приложениям требуется более точное управление правами доступа, которые предоставляются отдельным пользователям и группам. Для удовлетворения таких требований во многих версиях UNIX реализовано расширение традиционной модели файловых прав доступа, известное как списки контроля доступа (англ. access control lists, ACLs, ACL-списки). Они позволяют указывать файловые права доступа для пользователя или группы, для произвольного количества пользователей или групп. В Linux данная модель реализована начиная с версии ядра 2.6.

Поддержка списков контроля доступа является необязательной для каждой файловой системы и контролируется с помощью параметров конфигурации ядра в меню File systems. Поддержка данных списков в файловой системе Reiserfs доступна с версии ядра 2.6.7.

Чтобы иметь возможность создавать списки контроля доступа в файловых системах ext2, ext3, ext4 или Reiserfs, следует монтировать файловую систему командой mount с параметром — o acl.

Списки контроля доступа никогда не были формально стандартизированы для UNIX-систем. Была предпринята попытка осуществить это в виде временных стандартов POSIX.1e и POSIX.2c, которые описывали соответственно спецификацию интерфейса прикладного программирования (API) и команды оболочки для ACL-списков (а также другие особенности, например возможности). В конечном итоге данная попытка провалилась, а временные стандарты были аннулированы. Тем не менее именно они (обычно в их последней версии, Draft 17 («Черновик № 17»)) лежат в основе ACL-списков во многих реализациях UNIX (включая Linux). Однако, поскольку существует множество различий между реализациями ACL-списков (что является отчасти следствием незавершенности временных стандартов), написание портируемых программ, использующих такие списки, представляет некоторые сложности.

В данной главе приводится описание списков контроля доступа и краткое руководство по их применению. Описан также ряд библиотечных функций, применяемых для операций со списками и их извлечения. Мы не станем углубляться в подробности работы всех этих функций, поскольку их очень много. (Дополнительную информацию см. на страницах руководства.)

17.1. Обзор

ACL-список представляет собой ряд записей, каждая из которых задает права доступа к файлу для отдельного пользователя или группы (рис. 17.1).

Записи ACL-списка

Каждая запись содержит следующие части:

• тип тега, указывающий на применимость данной записи к пользователю, группе или к какой-либо другой категории пользователей;

Рис. 17.1. Список контроля доступа

• необязательный тег-спецификатор, который идентифицирует отдельного пользователя или группу (то есть UID или GID);

• набор прав доступа, определяющий права доступа (чтение, запись и выполнение), предоставляемые данной записью.

Тип тега имеет одно из следующих значений.

• ACL_USER_OBJ — эта запись определяет права доступа, предоставляемые владельцу файла. Каждый ACL-список содержит ровно одну такую запись. Она соответствует традиционным правам доступа владельца (пользователя).

• ACL_USER — эта запись определяет права доступа, предоставляемые пользователю, который идентифицируется по тегу-спецификатору. ACL-список может содержать от нуля до нескольких записей ACL_USER, однако для отдельного пользователя можно определить не более одной такой записи.

• ACL_GROUP_OBJ — эта запись определяет права доступа, предоставляемые группе файла. Каждый ACL-список содержит ровно одну такую запись. Она соответствует традиционным правам доступа группы, если только список не содержит также запись ACL_MASK.

• ACL_GROUP — эта запись определяет права доступа, предоставляемые группе, которая идентифицируется по тегу-спецификатору. ACL-список может содержать от нуля до нескольких записей ACL_GROUP, однако для отдельной группы можно определить не более одной такой записи.

• ACL_MASK — эта запись определяет максимальные права доступа, которые могут быть предоставлены записями ACL_USER, ACL_GROUP_OBJ и ACL_GROUP. ACL-список содержит не более одной записи ACL_MASK. Если он содержит запись ACL_USER или ACL_GROUP, то наличие записи ACL_MASK является обязательным. Мы подробнее поговорим об этом теге чуть ниже.

Перейти на страницу:

Похожие книги