Бит setuid

Решил в отдельной небольшой статье описать, что же такое бит setuid. Все это естественно в рамках моего изучения Linux на курсах и статья больше для себя, но может кому-то мои размышления покажутся интересными и более понятными чем аналогичные. Статья для новичков, как и я сам.
Когда пользователь запускает какую либо программу, порождается процесс, который по умолчанию, имеет такие же права как и пользователь. Можно сказать еще, что процесс будет выполнять какие-либо действия в системе от имени пользователя с его правами. Если пользователь имеет доступ к какому либо файлу, значит и процесс будет иметь такой же доступ к этому файлу. Проведем маленький эксперимент. Работаем в системе под обычным пользователем. Создаем файл file1.txt в домашней папке от имени пользователя root: sudo touch ~/file1.txt.и устанавливаем следующие права для файла: sudo chmod 660 ~/file1.txt. Проверяем командой ls -l, что файл действительно принадлежит пользователю root и другие пользователи не могут даже читать данный файл:

-rw-rw—- 1 root root          0 2009-10-19 13:24 file1.txt

Пробуем выполнить команду less file1.txt и получаем сообщение Permission denied (доступ запрещен), так как у нас нет прав даже на просмотр этого файла, а команда less, запущена от нашего имени и имеет такие же права как и мы. Изменим права: sudo chmod 664 ~/file1.txt. Теперь выполнив команду less file1.txt можно посмотреть содержимое файла. Не прекращая выполнения команды less, выполним в другой консоли команду ps u | grep less:

igor@adm-ubuntu:~$ ps aux | grep [l]ess
igor     12972  0.0  0.0   3312   904 pts/0    S+   16:32   0:00 less file1.txt

Видим, что процесс less действительно работает от имени обычного пользователя (в данном случае пользователя igor).

Вернемся к биту setuid для исполняемого файла. Если установить такой бит для исполняемого файла, то порожденный процесс будет иметь права не пользователя, который запустил программу, а те права, которые имеет сам исполняемый файл. Другими словами процесс будет выполнен от имени владельца исполняемого файла и соответственно с его правами в системе. Посмотрим какие права имеет программа less. Командой whereis less определим где находится исполняемый файл - там где и ожидалось в каталоге /bin. Смотрим права на команду less:

igor@adm-ubuntu:~$ ls -l /bin/less
-rwxr-xr-x 1 root root 141192 2009-04-29 03:41 /bin/less

Видим, что владельцем файла less является пользователь root. Приводим права на файл file1.txt к исходному виду: sudo chmod 660 ~/file1.txt и пробуем установить бит setuid для программы less:

igor@adm-ubuntu:~$ sudo chmod u+s /bin/less
[sudo] password for igor:
igor@adm-ubuntu:~$ ls -l /bin/less

и проверяем, что бит установлен:

igor@adm-ubuntu:~$ ls -l /bin/less
-rwsr-xr-x 1 root root 141192 2009-04-29 03:41 /bin/less

О том что бит установлен нам говорит символ s. Теперь попробуем выполнить команду less ~/file1.txt (до установки бита setuid мы не могли посмотреть этот файл). Видим, что программа less открывает содержимое файла. Выполним во второй консоли:

igor@adm-ubuntu:~$ ps aux | grep [l]ess
root     12943  0.0  0.0   3312   908 pts/0    S+   16:27   0:00 less file1.txt

Видим, что команда less запущена от имени пользователя root. Поэтому процесс получил доступ к файлу к  которому имеет доступ только пользователь root.

Вот как бы все. Если есть вопросы, уточнения - пишите, не стесняйтесь :)

Статьи и новости схожей тематики:

Комментариев: 2

  1. Наталия:

    подскажи. вот есть такие к примеру команды /bin/su, /usr/bin/at и /bin/amount. зачем для всех троих этих команд нужен setuid бит?

    Ответить

    Олег Reply:

    Наверное, чтобы временно повысить свои полномочия, “зарядить” задание в планировщике и смонтировать раздел (заметьте, это всё операции, требующие прав root’а) смог обычный пользователь. У /usr/bin/at ещё и бит setgid выставлен.

    Ответить

Оставьте свой отзыв