Почему установка бита SUID в OpenBSD не устанавливает действующие и сохраненные UID для владельца исполняемого файла?

Я использую свежую установку OpenBSD 5.3 в качестве гостевой ОС на Parallels для Mac:

$ uname -a
OpenBSD openbsd.localdomain 5.3 GENERIC#53 amd64

К моему удивлению, двоичный файл, принадлежащий пользователю root с установленным битом SUID, работает с UID, как если бы SUID не был установлен. То есть, когда UID 1000 запускает такую ​​программу, программа запускается в состоянии:

 <real_uid, effective_uid, saved_uid> = <1000, 1000, 1000>

и не в состоянии:

 <real_uid, effective_uid, saved_uid> = <1000, 0, 0>

как и ожидалось.

Почему это так?

Вот подробности того, как я обнаружил проблему:

Я написал интерактивную программу на C (скомпилированную как setuid_min.bin) для оценки поведения setuid в различных системах Unix. Программа находится в подкаталоге домашнего каталога UID 1000, и команда sudo используется для смены владельца и SUID; затем программа запускается, и я ввожу uid, чтобы сообщить реальные, эффективные и сохраненные UID процесса:

$ sudo chown root:staff setuid_min.bin
$ ls -l | grep 'setuid_min\.bin$'
-rwxr-xr-x  1 root   staff [...] setuid_min.bin
$ sudo chmod a+s setuid_min.bin
$ ls -l | grep 'setuid_min\.bin$'
-rwsr-sr-x  1 root   staff [...] setuid_min.bin
$ ./setuid_min.bin
uid
 1000 1000 1000 some_pid
exit
$

Обратите внимание, что some_pid выше - это pid процесса setuid_min.bin. Программа сообщает реальный UID, эффективный UID и сохраненный UID, сообщая вывод следующей команды оболочки:

ps -ao ruid,uid,svuid,pid | grep '[ ]my_pid$'

где my_pid - идентификатор pid, о котором сообщает getpid (). Мое единственное предположение относительно того, почему это может быть так, заключается в том, что OpenBSD имеет некоторую базовую структуру разрешений, которая использует владение / разрешения каталога, в котором находится setuid_min.bin, или фактически не меняет владельца / Бит SUID, когда непривилегированный пользователь использует sudo для изменения прав доступа к файлам.


person mdittmer    schedule 16.09.2013    source источник


Ответы (1)


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

person Art    schedule 16.10.2013