Системное программирование в UNIX средствами Free Pascal

       

Дополнительные права доступа для исполняемых файлов


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

04000 STAT_ISUID    Задать user-id при выполнении

02000 STAT_ISGID    Задать group-id при выполнении

01000 STAT_ISVTX    Сохранить сегмент кода (бит фиксации)

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

Подобный механизм может использоваться для управления доступом к критическим данным. Конфиденциальная информация может быть защищена от публичного доступа или изменения при помощи стандартных прав доступа на чтение/запись/выполнение. Владелец файла создает программу, которая будет предоставлять ограниченный доступ к файлу. Затем для файла программы устанавливается флаг доступа STAT_ISUID, что позволяет другим пользователям получать ограниченный доступ к файлу только при помощи данной программы. Очевидно, программа должна быть написана аккуратно во избежание случайного и умышленного нарушения защиты.[2]

Классический пример этого подхода представляет программа passwd. Администратора системы ожидают неприятности, если он позволит всем пользователям выполнять запись в файл паролей. Тем не менее все пользователи должны иногда изменять этот файл при смене своего пароля. Решить проблему позволяет программа passwd, так как ее владельцем является суперпользователь и для нее установлен флаг STAT_ISUID.

Не столь полезна установка флага STAT_ISGID, которая выполняет те же функции для идентификатора группы файла group-id. Если указанный флаг установлен, то при запуске файла на выполнение получившийся процесс получает действующий идентификатор группы egid владельца файла, а не пользователя, который запустил программу на выполнение.




Исторически бит STAT_ISVTX обычно использовался для исполняемых файлов и назывался флагом сохранения сегмента кода

(save-text-image), или битом фиксации

(sticky bit). В ранних версиях системы, если для файла был установлен этот бит, при его выполнении код программы оставался в файле подкачки до выключения системы. Поэтому при следующем запуске программы системе не приходилось искать файл в структуре каталогов системы, а можно было просто и быстро переместить программу в память из файла подкачки. В современных системах UNIX указанный бит является избыточным, и в спецификации XSI бит STAT_ISVTX определен только для каталогов. Использование STAT_ISVTX будет подробнее рассмотрено в главе 4.

Упражнение 3.4. Следующие примеры показывают, как команда ls выводит на экран права доступа set-user-id и group-id, соответственно:

r-sr-xr-x

r-xr-sr-x

При помощи команды ls -l найдите в каталогах /bin, /etc и /usr/bin файлы с необычными правами доступа (если это командные файлы оболочки и у вас есть право на чтение этих файлов, посмотрите, что они делают и надежно ли они защищены). Более опытные читатели могут ускорить поиск, воспользовавшись программой grep. Если вам не удастся найти файлы с необычными правами доступа, объясните, почему это произошло.


Содержание раздела