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

• Чтобы избежать таких проблем, можно было бы сделать запись ACL_GROUP_OBJ ограничивающим набором для всех записей ACL_USER и ACL_GROUP. Однако это означало бы, что права доступа ACL_GROUP_OBJ необходимо устанавливать в сочетании со всеми правами, предоставляемыми записями ACL_USER и ACL_GROUP. Это конфликтовало бы с использованием записи ACL_GROUP_OBJ для определения прав доступа, согласующихся с группой файла.

Для решения данных проблем предназначена запись ACL_MASK. Она обеспечивает механизм, позволяющий реализовать традиционное назначение операций chmod(), не разрушая семантики прав доступа к файлу, заданной приложениями, применяющими ACL-списки. Когда ACL-список имеет запись ACL_MASK:

• все изменения в традиционных правах доступа группы с помощью системного вызова chmod() изменяют параметры записи ACL_MASK (а не записи ACL_GROUP_OBJ);

• вызов stat() возвращает права доступа ACL_MASK (а не права доступа ACL_GROUP_OBJ), указанные в битах прав доступа для группы в поле st_mode (см. рис. 15.1).

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

user::rw-,group::-,mask::-,other::r—

Если затем мы выполним команду chmod g+rw для этого файла, то ACL-список станет таким:

user::rw-,group::-,mask::rw-,other::r—

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


17.5. Команды getfacl и setfacl


В сеансе оболочки можно использовать команду getfacl, чтобы увидеть ACL-список для файла.

$ umask 022 Приводим umask в известное состояние

$ touch tfile Создаем новый файл

$ getfacl tfile

# file: tfile

# owner: mtk

# group: users

user::rwgroup::

r–

other::r–

Из результатов работы команды getfacl видно, что новый файл создается с минимальным ACL-списком. При выводе данного списка в текстовой форме команда getfacl предваряет его записи тремя строками, в которых показаны имя и принадлежность данного файла. Можно отменить вывод этих строк, если указать параметр — omit — header.

Продемонстрируем теперь, что изменения прав доступа к файлу, выполняемые с помощью обычной команды chmod, «пропускаются» через ACL-список.

$ chmod u=rwx,g=rx,o=x tfile

$ getfacl — omit-header tfile

user::rwx

group::r-x

other::-x

Команда setfacl модифицирует ACL-список для файла. Здесь мы используем команду setfacl — m, чтобы добавить записи ACL_USER и ACL_GROUP в список прав доступа:

$ setfacl — m u: paulh: rx,g: teach: x tfile

$ getfacl — omit-header tfile

user::rwx

user: paulh: r-x Запись ACL_USER

group::r-x

group: teach:-x Запись ACL_GROUP

mask::r-x Запись ACL_MASK

other::-x

Команда setfacl с параметром — m изменяет существующие записи ACL-списка или добавляет новые записи, если соответствующие записи с указанным типом тега и спецификатором еще не существуют. Можно дополнительно применить параметр — R, чтобы рекурсивно применить указанный ACL-список для всех файлов в дереве каталогов.

Из результатов работы команды getfacl видно, что параметр setfacl автоматически создал запись ACL_MASK для данного ACL-списка.

Добавление записей ACL_USER и ACL_GROUP превращает данный ACL-список в расширенный, и команда ls — l подтверждает это, поскольку после традиционной маски прав доступа следует знак +:

$ ls — l tfile

— rwxr-x — x+ 1 mtk users 0 Dec 3 15:42 tfile

Продолжим использование параметра setfacl, отключив все права доступа, кроме выполнения, в записи ACL_MASK, а затем просмотрим ACL-список еще раз с помощью команды getfacl:

$ setfacl — m m::x tfile

$ getfacl — omit-header tfile

user::rwx

user: paulh: r-x #effective:-x

group::r-x #effective:-x

group: teach:-x

mask::-x

other::-x

Комментарии #effective:, которые команда getfacl выводит после записей, относящихся к пользователю paulh и к группе файла (group::), информируют нас о том, что после применения маски (операция И) к записи ACL_MASK фактические права доступа, предоставляемые каждой из этих записей, окажутся меньше указанных в записи.

Используем теперь команду ls — l для повторного просмотра традиционных битов прав доступа к файлу. Видно, что показанные биты прав доступа для класса группы отражают права доступа в маске ACL_MASK (-x), а не права из записи ACL_GROUP (r-x).

$ ls — l tfile

— rwx — x — x+ 1 mtk users 0 Dec 3 15:42 tfile

Команду setfacl — x можно применять для удаления записей из ACL-списка. Удалим записи, относящиеся к пользователю paulh и к группе teach (при удалении права доступа не указывают):

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

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

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#.Введите сюда краткую аннотацию

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

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