Процессы в ОС Linux обладают теми же правами, которыми обладает пользователь, от чьего имени был запущен процесс.
На самом деле операционная система воспринимает работающего в ней пользователя как набор запущенных от его имени процессов. Ведь и сам сеанс пользователя открывается в командной оболочке (или оболочке Х) от имени пользователя. Поэтому когда мы говорим “права доступа пользователя к файлу” то подразумеваем “права доступа процессов, запущенных от имени пользователя к файлу”.
Для определения имени пользователя, запустившего процесс, операционная система использует реальные идентификаторы пользователя и группы, назначаемые процессу. Но эти идентификаторы не являются решающими при определении прав доступа. Для этого у каждого процесса существует другая группа идентификаторов – эффективные.
Как правило, реальные и эффективные идентификаторы процессов одинаковые, но есть и исключения. Например, для работы утилиты passwd необходимо использовать идентификатор суперпользователя, так как только суперпользователь имеет права на запись в файлы паролей. В этом случае эффективные идентификаторы процесса будут отличаться от реальных. Возникает резонный вопрос – как это было реализовано?
У каждого файла есть еще один набор прав доступа – биты SUID и SGID. Эти биты позволяют при запуске программы присвоить ей эффективные идентификаторы владельца и группы-владельца соответственно и выполнять процесс с правами доступа другого пользователя. Так как файл passwd принадлежит пользователю root и у него установлен бит SUID, то при запуске процесс passwd будет обладать правами пользователя root.
Устанавливаются биты SGID и SUID программой chmod:
chmod u+s filename – установка бита SUID
chmod g+s filename – установка бита SGID
Для установки этих битов в абсолютном режиме их стоить представить в виде трех бит: SUID, SGID, Sticky bit соответственно.
После выставления необходимых прав добавьте в начало числа цифру для установки специальных бит:
Рисунок 56.