man acl(5) - Списки Управления Доступом |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
НАЗВАНИЕ
acl - Списки Управления Доступом
ОПИСАНИЕ
Эта страница руководства описывает Списки Управления Доступом POSIX (POSIX Access Control Lists), которые используются для более тонкого определения прав доступа к файлам и каталогам.
ТИПЫ 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, которые сопоставляются эффективному идентификатору пользователя (EUID). Эффективный идентификатор группы (EGID), как и дополнительные идентификаторы групп, сопоставляются элементам 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 по умолчанию. Функция acl_set_file() также принимает ACL с без элементов ACL в качестве правильного значения ACL по умолчанию для каталогов, указывая что этот каталог не будет связан с ACL по умолчанию. Это равнозначно использованию функции acl_delete_def_file().
СООТВЕТСТВИЕ МЕЖДУ ЭЛЕМЕНТАМИ ACL И БИТАМИ ДОСТУПА К ФАЙЛУ
Разрешения, определённые ACL являются надмножеством разрешений, указанных битами доступа к файлу. Разрешения, определённые для владельца файла, соответствуют элементу ACL_USER_OBJ. Разрешения, определённые для группы-владельца файла, соответствуют разрешениям элемента ACL_GROUP_OBJ, если в ACL отсутствует элемент ACL_MASK. Если в ACL имеется элемент ACL_MASK, то разрешения, определённые для группы-владельца файла соответствуют разрешениям элемента ACL_MASK. Разрешения, определённые для других, соответствуют разрешениям элемента ACL_OTHER_OBJ.
Изменение битов доступа к файлу приведёт к изменению разрешений для соответствующих элементов ACL. Изменение разрешений в элементах ACL приведёт к изменению битов доступа к файлу.
СОЗДАНИЕ ОБЪЕКТА И ACL ПО УМОЛЧАНИЮ
ACL файлового объекта инициализируются при создании объекта любой из функций creat(), mkdir(), mknod(), mkfifo(), или open(). Если у каталога имеется ACL по умолчанию, то параметр режима (mode) функции создания файловых объектов и ACL по умолчанию каталога будут использоваться для определения ACL нового объекта:
1. Новый объект наследует ACL по умолчанию от ACL по умолчанию каталога, содержащего объект.
2. Элементы ACL соответствуют битам доступа к файлу, изменённым так, что они не содержат разрешений, которые не содержатся в разрешениях, указанных параметром режима (mode).
Если у каталога имеется ACL по умолчанию, параметр режима (mode) функции создания объекта и маска создаваемого файла (обратитесь к umask(2)) используются для определения ACL нового объекта:
1. Новый объект получает из ACL права, находящиеся в элементах с метками типов ACL_USER_OBJ, ACL_GROUP_OBJ и ACL_OTHER. Разрешения этих элементов задают разрешения, указанные маской создаваемого файла.
2. Элементы ACL, соответствующие битам доступа к файлу изменяются таким образом, чтобы они не содержали разрешений, которые не содержатся в разрешениях, указанных параметром режима (mode).
АЛГОРИТМ ПРОВЕРКИ ДОСТУПА
Процесс может запросить чтение, запись или выполнение/поиск файлового объекта, защищённого ACL. Алгоритм проверки доступа определяет, должен ли быть предоставлен доступ к объекту.
1. Если эффективный идентификатор пользователя (EUID) процесса совпадает с идентификатором пользователя-владельца файла, то
если элемент ACL_USER_OBJ содержит необходимые разрешения, то доступ разрешается,
иначе доступ запрещается.
2. иначе если эффективный идентификатор пользователя (EUID) процесса совпадает с уточнителем любого из элементов типа ACL_USER, то
если совпадающий элемент ACL_USER и элемент ACL_MASK содержат необходимые разрешения, то доступ разрешается,
иначе доступ запрещается.
3. иначе если эффективный идентификатор группы (EGID) или любой из дополнительных идентификаторов группы процесса совпадают с группой-владельцем файла или уточнителем любого элемента типа ACL_GROUP, то
если ACL содержит элемент ACL_MASK, то
если элемент ACL_MASK и любой из подходящих элементов ACL_GROUP_OBJ или ACL_GROUP содержит необходимые разрешения, то доступ разрешается ,
иначе доступ запрещается.
иначе (отметим, что может не быть элементов ACL_GROUP без элементов ACL_MASK)
если элемент ACL_GROUP_OBJ содержит необходимые разрешения, то доступ разрешается,
иначе доступ запрещается.
4. иначе если элемент ACL_OTHER содержит необходимые разрешения, то доступ разрешается.
5. иначе доступ запрещается.
ТЕКСТОВЫЕ ФОРМЫ ACL
Определены длинная и короткая текстовые формы представления ACL. В обеих формах элементы ACL представлены в виде трёх раздельных двоеточиями полей: метка типа элемента ACL, уточнитель ACL, и отдельные права доступа. Первое поле содержит одну из следующих ключевых слов меток типа:
user
Элемент ACL user указывает права доступа для владельца файла (элементы с метками типа ACL_USER_OBJ) или определённого пользователя (элементы с метками типа ACL_USER).
group
Элементы ACL group указывают права доступа для группы-владельца файла (элемент с меткой типа ACL_GROUP_OBJ) или указанной группы (элемент с меткой типа ACL_GROUP).
mask
Элемент ACL mask указывает максимальные права доступа, которые могут быть предоставлены элементом ACL, исключая элемент user для владельца файла и других элементов (элементов с меткой типа ACL_MASK).
other
Другие элементы ACL указывают права доступа для любого процесса, который не совпадает ни с одним из ACL user или group (элементов с метками типа ACL_OTHER).
Второе поле содержит идентификатор пользователя или группы, указанной в элементе ACL для элементов с метками типа ACL_USER или ACL_GROUP, и пустое для всех остальных элементов. Идентификатор пользователя может быть именем пользователя или десятичным числом. Идентификатор группы может быть именем группы или десятичным числом.
Третье поле содержит отдельные права доступа. Чтение, запись и поиск/выполнение представлены буквами r, w и x в данном порядке. Каждый из этих символов заменяется символом - для обозначения того, что право доступа в элементе ACL отсутствует. При конвертации из текстовой формы во внутреннее представление отсутствующие разрешения указывать не нужно.
Пробельные символы разрешены в начале и на конце каждого из элементов 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
ПОЯСНЕНИЕ
Черновик 17 IEEE 1003.1e определяет списки управления доступом, которые включают элементы с метками типа ACL_MASK, и определяет отображение между битами доступа к файлу, которые не постоянны. Стандарт рабочей группы определяет этот относительно сложный интерфейс для того, чтобы убедиться в том, что приложения, совместимые с IEEE 1003.1 ("POSIX.1") продолжали работать ожидаемым образом на системах с ACL. Черновик 17 IEEE 1003.1e содержит объяснение выбора этого интерфейса в разделе B.23.
ИЗМЕНЕНИЯ В ФАЙЛОВЫХ УТИЛИТАХ
На системах, поддерживающих ACL, утилиты для работы с файлами ls(1), cp(1) и mv(1) меняют своё поведение следующим образом:
o Для файлов, имеющих ACL по умолчанию или элементы ACL, содержащие более одного из необходимых элементов ACL, служебная программа ls(1) в длинной форме, выводимой ls -l, отобразит знак плюса (+) после строки разрешений.
o Если указана опция -p, служебная программа cp(1) также сохранит ACL. Если это невозможно, будет выдано предупреждение.
o Служебная программа mv(1) всегда сохраняет ACL. Если это невозможно, будет выдано предупреждение.
Эффект от служебной программы chmod(1) и системного вызова chmod(2), оказываемый на ACL описан в разделе СООТВЕТСТВИЕ МЕЖДУ ЭЛЕМЕНТАМИ ACL И БИТАМИ ДОСТУПА К ФАЙЛУ.
СТАНДАРТЫ
Черновик 17 IEEE 1003.1e ("POSIX.1e") описывает несколько расширений системы безопасности стандарта IEEE 1003.1. Пока работа над стандартом 1003.1e заброшена, многие системы подобные UNIX содержат реализацию части черновой версии 17 стандарта POSIX.1e или его более ранних черновиков.
Списки управления доступом в Linux реализуют полный набор функций и инструментов, определённых для списков управления доступом в стандарте POSIX.1e, и несколько расширений. Реализация полностью совместима c 17-м черновиком стандарта POSIX.1e; расширения помечены необходимым образом. Функции для манипуляции над списками управления доступом определены в библиотеке ACL (libacl, -lacl). Интерфейсы совместимые с POSIX объявлены в заголовочном файле <sys/acl.h>. Расширения этих функций специфичные для Linux объявлены в заголовочном файле <acl/libacl.h>.
СМОТРИ ТАКЖЕ
chmod(1), creat(2), getfacl(1), ls(1), mkdir(2), mkfifo(2), mknod(2), open(2), setfacl(1), stat(2), umask(1)
* Черновик 17 стандарта POSIX 1003.1e
http://www.guug.de/~winni/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)
