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

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

9.3. Программы с установленным идентификатором пользователя и установленным идентификатором группы

Программа с установленным идентификатором пользователя позволяет процессу получить полномочия, которые он обычно не получает, путем установки действующего ID пользователя на то же значение, которое имеется у идентификатора пользователя (владельца) исполняемого файла. Программа с установленным ID группы выполняет аналогичную задачу для принадлежащего процессу действующего идентификатора группы. (Выражения «программа с установленным идентификатором пользователя» и «программа с установленным идентификатором группы» иногда сокращают до видов «set-UID-программа» и «set-GID-программа».)

Как и любой другой файл, файл исполняемой программы имеет связанный с ним идентификатор пользователя и идентификатор группы, которые определяют принадлежность файла. Кроме того, у исполняемого файла имеется два специальных бита полномочий: бит установленного идентификатора пользователя (set-user-ID) и бит установленного идентификатора группы (set-group-ID). (В действительности эти два бита полномочий есть у каждого файла, но нас здесь интересует их использование применительно к исполняемым файлам.) Эти биты полномочий устанавливаются командой chmod. Непривилегированный пользователь может устанавливать эти биты для тех файлов, которыми он владеет. Привилегированный пользователь (CAP_FOWNER) может устанавливать эти биты для любого файла. Рассмотрим пример:

$ su

Password:

# ls — l prog

— rwxr-xr-x 1 root root 302585 Jun 26 15:05 prog

# chmod u+s prog Установка бита полномочий set-user-ID

# chmod g+s prog Установка бита полномочий set-group-ID

Как показано в этом примере, у программы могут быть установлены оба этих бита, хотя такое встречается нечасто. Когда для вывода списка полномочий программы, имеющей установленный бит set-user-ID или set-group-ID, используется команда ls — l, в нем буква x, которая обычно применяется для демонстрации установки полномочия на выполнение, заменяется буквой s:

# ls — l prog

— rwsr-sr-x 1 root root 302585 Jun 26 15:05 prog

Когда set-user-ID-программа запускается (то есть загружается в память процесса с помощью команды exec()), ядро устанавливает для действующего пользовательского ID точно такое же значение, что и у пользовательского ID исполняемого файла. Запуск программы с полномочиями setgid имеет такой же эффект относительно действующего группового идентификатора процесса. Изменение действующего пользовательского или группового ID таким способом дает процессу (а иными словами, пользователю, для которого выполняется программа) полномочия, которые он не имел бы при других обстоятельствах. Например, если исполняемый файл принадлежит пользователю по имени root (привилегированному пользователю) и имеет установленный бит set-user-ID, то процесс при запуске программы обретает полномочия суперпользователя.

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

Иногда мы будем использовать выражение set-user-ID-root, чтобы отличать set-user-ID-программу, владельцем которой является root, от программы, которой владеет другой пользователь и которая просто дает процессу полномочия, предоставляемые этому пользователю.

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

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

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

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

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

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

Программирование, программы, базы данных
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

Стивен Прата

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