7.6 КОД ИДЕНТИФИКАЦИИ ПОЛЬЗОВАТЕЛЯ ПРОЦЕССА

7.6 КОД ИДЕНТИФИКАЦИИ ПОЛЬЗОВАТЕЛЯ ПРОЦЕССА

Ядро связывает с процессом два кода идентификации пользователя, не зависящих от кода идентификации процесса: реальный (действительный) код идентификации пользователя и исполнительный код или setuid (от «set user ID» — установить код идентификации пользователя, под которым процесс будет исполняться). Реальный код идентифицирует пользователя, несущего ответственность за выполняющийся процесс. Исполнительный код используется для установки прав собственности на вновь создаваемые файлы, для проверки прав доступа к файлу и разрешения на посылку сигналов процессам через функцию kill. Процессы могут изменять исполнительный код, запуская с помощью функции exec программу setuid или запуская функцию setuid в явном виде.

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

Синтаксис вызова системной функции setuid:

setuid(uid)

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

На Рисунке 7.25 приведена программа, демонстрирующая использование функции setuid. Предположим, что исполняемый файл, полученный в результате трансляции исходного текста программы, имеет владельца с именем «maury» (код идентификации 8319) и установленный бит setuid; право его исполнения предоставлено всем пользователям. Допустим также, что пользователи «mjb» (код идентификации 5088) и «maury» являются владельцами файлов с теми же именами, каждый из которых доступен только для чтения и только своему владельцу. Во время исполнения программы пользователю «mjb» выводится следующая информация:

uid 5088 euid 8319

 fdmjb -1 fdmaury 3

 after setuid(5088): uid 5088 euid 5088

 fdmjb 4 fdmaury -1

 after setuid(8319): uid 5088 euid 8319

Системные функции getuid и geteuid возвращают значения реального и исполнительного кодов идентификации пользователей процесса, для пользователя «mjb» это, соответственно, 5088 и 8319. Поэтому процесс не может открыть файл «mjb» (ибо он имеет исполнительный код идентификации пользователя (8319), не разрешающий производить чтение файла), но может открыть файл «maury». После вызова функции setuid, в результате выполнения которой в поле исполнительного кода идентификации пользователя («mjb») заносится значение реального кода идентификации, на печать выводятся значения и того, и другого кода идентификации пользователя "mjb": оба равны 5088. Теперь процесс может открыть файл „mjb“, поскольку он исполняется под кодом идентификации пользователя, имеющего право на чтение из файла, но не может открыть файл „maury“. Наконец, после занесения в поле исполнительного кода идентификации значения, сохраненного функцией setuid (8319), на печать снова выводятся значения 5088 и 8319. Мы показали, таким образом, как с помощью программы setuid процесс может изменять значение кода идентификации пользователя, под которым он исполняется.

#include ‹fcntl.h›

main() {

 int uid, euid, fdmjb, fdmaury;

 uid = getuid(); /* получить реальный UID */

 euid = geteuid(); /* получить исполнительный UID */

 printf("uid %d euid %d ", uid, euid);

 fdmjb = open("mjb", O_RDONLY);

 fdmaury = open("maury", O_RDONLY);

 printf("fdmjb %d fdmaury %d ", fdmjb, fdmaury);

 setuid(uid);

 printf("after setuid(%d): uid %d euid %d ", uid, getuid(), geteuid());

 fdmjb = open("mjb", O_RDONLY);

 fdmaury = open("maury", O_RDONLY);

 printf("fdmjb %d fdmaury %d ", fdmjb, fdmaury);

 setuid(uid);

 printf("after setuid(%d): uid %d euid %d ", euid, getuid(), geteuid());

}

Рисунок 7.25. Пример выполнения программы setuid

Во время выполнения программы пользователем „maury“ на печать выводится следующая информация:

uid 8319 euid 8319

 fdmjb -1 fdmaury 3

 after setuid(8319): uid 8319 euid 8319

 fdmjb -1 fdmaury 4

 after setuid(8319): uid 8319 euid 8319

Реальный и исполнительный коды идентификации пользователя во время выполнения программы остаются равны 8319: процесс может открыть файл „maury“, но не может открыть файл „mjb“. Исполнительный код, хранящийся в пространстве процесса, занесен туда в результате последнего исполнения функции или программы setuid; только его значением определяются права доступа процесса к файлу. С помощью функции setuid исполнительному коду может быть присвоено значение сохраненного кода (из таблицы процессов), т. е. то значение, которое исполнительный код имел в самом начале.

Примером программы, использующей вызов системной функции setuid, может служить программа регистрации пользователей в системе (login). Параметром функции setuid при этом является код идентификации суперпользователя, таким образом, программа login исполняется под кодом суперпользователя из корня системы. Она запрашивает у пользователя различную информацию, например, имя и пароль, и если эта информация принимается системой, программа запускает функцию setuid, чтобы установить значения реального и исполнительного кодов идентификации в соответствии с информацией, поступившей от пользователя (при этом используются данные файла „/etc/passwd“). В заключение программа login инициирует запуск командного процессора shell, который будет исполняться под указанными пользовательскими кодами идентификации.

Примером setuid-программы является программа, реализующая команду mkdir. В разделе 5.8 уже говорилось о том, что создать каталог может только процесс, выполняющийся под управлением суперпользователя. Для того, чтобы предоставить возможность создания каталогов простым пользователям, команда mkdir была выполнена в виде setuid-программы, принадлежащей корню системы и имеющей права суперпользователя. На время исполнения команды mkdir процесс получает права суперпользователя, создает каталог, используя функцию mknod, и предоставляет права собственности и доступа к каталогу истинному пользователю процесса.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Повышение статуса идентификации

Из книги Все под контролем: Кто и как следит за тобой автора Гарфинкель Симеон

Повышение статуса идентификации И Бертильон, и Хершель понимали, что технологии идентификации в современном обществе могут использоваться с двумя целями. С одной стороны, эти технологии востребованы правоохранительными органами. Имея в своем распоряжении реестр


Автоматизированная система идентификации отпечатков пальцев

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

Автоматизированная система идентификации отпечатков пальцев Но, несмотря на это, дактилоскопические методы все же используются. Это стало возможным в том числе и благодаря автоматизированной системе идентификации отпечатков пальцев, известной также как AFIS [Automated


Автоматизированная система идентификации отпечатков пальцев

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ ОЦЕНКА ПРОГРАММНОЙ ПРОДУКЦИИ ХАРАКТЕРИСТИКИ КАЧЕСТВА И РУКОВОДСТВА ПО ИХ ПРИМЕНЕНИЮ автора Автор неизвестен

Автоматизированная система идентификации отпечатков пальцев Этот терминал используется для просмотра результатов компьютерного поиска в базе данных, содержащей оцифрованные изображения отпечатков пальцев. Система AFIS анализирует изображение и строит список


7.3.2. Концепции, касающиеся основных средств производственного процесса организации Основные средства производственного процесса организации (ППО)

Из книги Пакеты программ. Требования к качеству и тестирование автора Автор неизвестен

7.3.2. Концепции, касающиеся основных средств производственного процесса организации Основные средства производственного процесса организации (ППО) Организация устанавливает и сопровождает набор основных средств производственного процесса, как показано на рис. 4.1. К


5.2.1 Представление пользователя

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России

5.2.1 Представление пользователя Определение качества по ИСО 8402 отражает представление пользователя так же, как и характеристики, определенные в настоящем стандарте.Пользователи в основном проявляют заинтересованность в применении программного обеспечения, его


3.2 Документация пользователя

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

3.2 Документация пользователя 3.2.1 Полнота (completeness) Документация пользователя должна содержать информацию, необходимую для использования продукта. В документации пользователя должны быть полностью описаны все функции, установленные в описании продукта, и все вызываемые


4.2.2 Документация пользователя

Из книги Основы AS/400 автора Солтис Фрэнк

4.2.2 Документация пользователя Должно быть протестировано выполнение соответствующих требований раздела 3, а выполнение рекомендаций раздела 3 может быть


Создание идентификационного поля для уникальной идентификации записей

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Создание идентификационного поля для уникальной идентификации записей Полезно, но не обязательно, для каждой записи иметь информацию, которая будет уникально идентифицировать ее. Часто этот уникальный идентификатор не имеет ничего общего с бизнес-данными. В SQL Server


Интерфейсы пользователя

Из книги Защита от хакеров корпоративных сетей автора Автор неизвестен

Интерфейсы пользователя Особый интерес вызывает будущий интерфейс пользователя вычислительной системы. Вчерашний графический интерфейс пользователя GUI (graphical user interface) быстро уступает дорогу новому сетевому интерфейсу пользователя NUI (network user interface). Несколько


Функции пользователя 

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Функции пользователя  Функции, определяемые пользователем, могут находиться в любом месте сценария и иметь произвольное число параметров (аргументов). Общий вид определения функции имеет вид:function Имя_функции([параметр1] [, параметр2] [... , параметрN]) { … Тело


6.14.1 Поле идентификации

Из книги Операционная система UNIX автора Робачевский Андрей М.

6.14.1 Поле идентификации Поле идентификации содержит 16-разрядное число, помогающее хосту назначения распознать фрагмент датаграммы при


Пример: хакинг устройства идентификации DS1991 MultiKey iButton

Из книги ПК для ветеринарного врача автора Остапчук Александр Николаевич

Пример: хакинг устройства идентификации DS1991 MultiKey iButton Dallas Semiconductor DS1991 MultiKey iButton (www.ibutton.com) является устройством идентификации с тремя внутренними защищенными областями данных, каждая из которых защищена своим паролем. В зависимости от решаемых задач устройство iButton может


Глава 6 Tracer – система электронной идентификации животных

Из книги автора

Введение В последнее время компьютеры стали неотъемлемой частью нашей жизни. С ними связаны работа и обучение, развлечения и отдых и – что представляется наиболее важным – возможность оперативного получения новейшей, актуальной информации в любой сфере человеческого