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

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

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

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


39.3.4. Для чего нужны разрешенные и действующие возможности файла

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

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

• Программа может не поддерживать возможности (будучи написанной в традиционной манере с установкой UID администратора). Такая программа не будет знать о том, что ей нужно включить возможности в действующий набор, чтобы иметь возможность выполнять привилегированные операции. В этом случае в результате вызова exec() все разрешенные возможности процесса, которые он только что приобрел, должны быть автоматически включены в действующий набор. Это достигается путем установки действующего бита.

• Программа может поддерживать возможности; это означает, что она спроектирована с учетом системы возможностей и будет выполнять соответствующие системные вызовы (будут описаны далее) для включения и выключения различных функций в своем действующем наборе. Чтобы иметь как можно меньше привилегий, такие программы изначально запускаются с пустым действующим набором. Это достигается за счет выключения бита действующих возможностей для исполняемого файла.


39.3.5. Для чего нужны наследуемые возможности процесса и файла

На первый взгляд использование разрешенного и действующего наборов для процессов и файлов может показаться вполне достаточным для регулирования возможностей. Однако в некоторых случаях этого недостаточно. Представьте, к примеру, что процесс, выполняющий exec(), хочет сохранить некоторые из его текущих возможностей во время выполнения новой программы. Казалось бы, этого можно достичь, просто сохранив разрешенные возможности процесса на время выполнения exec(). Но такой подход не учитывает двух моментов.

• Выполнение exec() может потребовать определенных привилегий (например, CAP_DAC_OVERRIDE), которые мы не хотим сохранять на протяжении работы программы.

• Представьте, что мы явно отказались от некоторых разрешенных возможностей, которые мы не хотим сохранять на время выполнения программы, но затем вызов exec() завершился неудачей. В этом случае программе могут понадобиться некоторые разрешенные возможности, которые уже были (перманентно) выключены.

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

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

Существует более глубокая, философская причина, по которой разрешенные возможности процесса не сохраняются на время выполнения exec(). Идея системы возможностей состоит в том, что все привилегии, выданные процессу, регулируются файлом, который тот выполняет. И хотя наследуемые возможности передаются исполняемой программе, к ним применяется маска наследуемого набора самого файла.


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

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

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

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

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