Читаем Linux API. Исчерпывающее руководство полностью

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

Тег-спецификатор задействуется только для записей ACL_USER и ACL_GROUP. Он определяет либо идентификатор пользователя, либо идентификатор группы.


Минимальный и расширенный списки контроля доступа

Минимальный ACL-список семантически эквивалентен обычному набору прав доступа к файлу. Он содержит в точности три записи, по одной для каждого из трех типов: ACL_USER_OBJ, ACL_GROUP_OBJ и ACL_OTHER. В расширенный список добавлены записи ACL_USER, ACL_GROUP и ACL_MASK.

Одной из причин для различения минимального и расширенного ACL-списков является то, что последний обеспечивает семантическое расширение традиционной модели прав доступа. Еще одна причина связана с реализацией таких списков в Linux. Они реализованы как системные расширенные атрибуты (см. главу 16). EA, применяемый для организации списка контроля доступа к файлу, называется system.posix_acl_access. Этот атрибут необходим, только если у файла есть ACL-список. Информация о правах доступа для минимального списка может храниться (и действительно хранится) в обычных битах прав доступа к файлу.


17.2. Алгоритм проверки прав доступа с помощью списков контроля доступа


Проверка прав доступа к файлу, который снабжен ACL-списком, выполняется при тех же условиях, что и в традиционной модели (см. подраздел 15.4.3). Проверки производятся в следующем порядке, пока не будет удовлетворен какой-либо из критериев.

1. Если процесс является привилегированным, то предоставляются все права. Существует одно исключение из этого утверждения, аналогичное описанному в подразделе 15.4.3 для традиционной модели прав доступа. Когда привилегированный процесс запускает выполняемый файл, такому процессу предоставляется право на выполнение, только если оно предоставлено по меньшей мере одной ACL-записью для данного файла.

2. При совпадении действующего UID для процесса с владельцем (идентификатором пользователя) файла этому процессу предоставляются права доступа, указанные в записи ACL_USER_OBJ. (Если выражаться точно, то в Linux для проверок, описанных в данном разделе, используются идентификаторы, относящиеся к файловой системе процесса, а не его действующие идентификаторы, как сказано в разделе 9.5.)

3. Если действующий UID совпадает с тегом-спецификатором в одной из записей ACL_USER, то данному процессу предоставляются права, указанные в этой записи, с применением маски (операции И) к значению ACL_MASK.

4. Если один из идентификаторов группы для процесса (то есть действующий GID или любой идентификатор дополнительной группы) совпадает с группой файла (это соответствует записи ACL_GROUP_OBJ) или с тегом-спецификатором какой-либо записи ACL_GROUP, то права доступа определяются на основе проверки следующих условий, пока не будет обнаружено совпадение:

1) если один из GID для процесса совпадает с группой файла, а запись ACL_GROUP_OBJ предоставляет требуемые права доступа, то данная запись определяет предоставляемые права. Они ограничиваются с учетом маски (операция И), примененной к значению ACL_MASK при его наличии;

2) если один из GID для процесса совпадает с тегом-спецификатором ACL_GROUP в записи для этого файла, а сама запись предоставляет требуемые права доступа, то данная запись определяет предоставленные права. Они ограничиваются с учетом маски (операция И), примененной к значению ACL_MASK;

3) в противном случае доступ запрещается.

5. В остальных случаях процессу предоставляются права доступа, указанные в записи ACL_OTHER.

Можно пояснить правила, относящиеся к GID, с помощью нескольких примеров. Допустим, у нас есть файл с идентификатором группы 100, причем этот файл защищен списком ACL, приведенным на рис. 17.1. Если бы процесс с GID 100 выполнил вызов access(file, R_OK), то этот вызов завершился бы успешно (то есть вернул бы 0). (Системный вызов access() описан в подразделе 15.4.4.) С другой стороны, несмотря на то, что запись ACL_GROUP_OBJ предоставляет все права доступа, вызов access(file, R_OK | W_OK | X_OK) завершился бы с ошибкой (то есть вернул бы –1 и значение EACCES для переменной errno), поскольку к правам доступа ACL_GROUP_OBJ применена маска (операция И) ACL_MASK, которая запрещает выполнение.

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

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

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных