Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка ПО ОСРВ заочники.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.72 Mб
Скачать

3.7. Три специальных разряда

Поле s,t_mode в структуре stat содержит шестнадцать разрядов. Четыре разряда исполь­зуются для хранения типа файла, девять - для хранения прав доступа. Три оставшихся разряда используются для организации действий со специальными атрибутами файла.

3.7.1. Разряд Set-User-id

Первый из трех специальных разрядов называется set-user-ID. Он используется для решения важного вопроса:

Как может обычный пользователь изменить его или ее пароль?

Это легко сделать, используя команду passwd. Но как работает команда passwd? Заметьте - кто является собственником и каковы права доступа к файлу паролей.

$ Is -I /etc/passwd

-rw-r--r-- 1 root root 894 Jun 2019:17/etc/passwd

Изменение вашего пароля означает изменение вашей учетной записи в этом файле, но вы I не имеете прав доступа на запись в этот файл. Права на запись имеет только пользова­тель с именем root. Как добиться при использовании программы passwd, чтобы вы получи- ! ли бы право на изменение файла, который не имеете права изменять? Почувствовали про­блему?

Решением будет предоставление прав на запись программе, но не вам. Вы используете программу /usr/bin/passwd или /bin/passwd для изменения вашего пароля, собственником ко- i торой является root и для которой установлен разряд set-user-ID. Права доступа будут вы­глядеть так:

$ Is -I /usr/bin/passwd

-r-sr-xr-x 1 root bin 15725 0ct31 1997/usr/bin/passwd

Установленный разряд suro сообщает ядру о необходимости запускать программу так, что предполагается, что программу запустили не вы, а собственник этой программы. Название разряда set-user-ID (Буквальный перевод - установить идентификатор пользователя, j Но в русскоязычной литературе название этого разряда не переводится. - Примеч. пер.) подчеркивает тот факт, что этот разряд требует у ядра присвоения эффективному пользо­вательскому идентификатору значения пользовательского идентификатора собственни­ка программы. Пользователь root является собственником файла /etc/passwd. Поэтому про­грамма, которая запускается в статусе root, может модифицировать учетный файл.

Не означает ли это, что я могу изменять пароли других пользователей?

Нет. Программа passwd знает, кто вы такой. Она использует системный вызов getuid, чтобы узнать с помощью ядра - какой был у вас UID, когда вы вошли в систему. Программе pass­wd предоставлена возможность перезаписывать любые записи в учетном файле, но она бу­дет изменять только запись, которая принадлежит пользователю, который запустил про­грамму passwd.

Другие случаи использования разряда Set-User-ID

Разряд suid может быть использован некой программой, которая должна контролировать доступ к файлу или к каким-то другим ресурсам. Рассмотрим систему печати с буфериза­цией (систему спулинга). Для многих пользователей возникает необходимость распеча­тать свои файлы, но принтер может печатать в каждый момент времени только один файл. В Unix есть команда Ipr. (В HP-UX утверждается, что Ipr - это команда печати для Linux, а для Unix - 1р. - Примеч. ред.) Команда копирует ваш файл в каталог, где он будет ждать, когда он будет распечатан. Но было бы рискованным разрешить всем пользователям копировать свои файлы в этот каталог для спулинга и разрешать им модифицировать списки имен файлов, которые ждут в очереди на печать. Реально все происходит так. У програм­мы Ipr собственником является root или Ipr, и для нее установлен разряд set-uid. Когда вы, обычный пользователь, используете команду Ipr, то программа будет запущена с установ­ленным значением root или Ipr для эффективного UID и может теперь модифицировать содержание каталога для спулинга и соответствующих файлов в нем. Программы для удаления заданий на печать из очереди на печать также имеют установленные разряды set-uid.

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

Маска для определения значения разряда SUID

Программа может проверить, установлен ли разряд set-user-ID для файла, с помощью мас­ки, которая определена в заголовочном файле: <sys/stat.h>. Определение такое:

#define SJSUID 0004000 /* set user id на исполнение */

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