Как бит Set-user-id работает в Linux?

У меня есть следующий «корневой файл» со следующим содержимым:

$ cat root-file 
#!/bin/bash   
echo $EUID
id

Ниже приведены разрешения для этого файла:

$ ls -l root-file 
-rwsr-sr-x 1 root root 15 Nov 18 02:20 root-file

Поскольку для этого файла установлен бит set-user-id, я ожидаю, что при выполнении этого файла эффективный uid будет отображаться как 0, даже если его выполняет пользователь без полномочий root (поскольку бит set-user-id вызывает процесс, который будет выполняться с эффективным идентификатором пользователя владельца файла, которым в данном случае является root). Однако вместо этого я получаю следующий вывод при выполнении «корневого файла» из оболочки без полномочий root.

$ ./root-file 
1000
uid=1000(chanakya) gid=1000(chanakya) groups=1000(chanakya),4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare)

Этот файл/или сценарий не выполняется с эффективным идентификатором пользователя 0. Почему это так?


person gjain    schedule 18.11.2012    source источник
comment
Корень владеет файлом? Бит SUID устанавливает идентификатор пользователя, равный идентификатору его владельца, который не обязательно является пользователем root (хотя по этой причине большинство программ SUID принадлежат пользователю root).   -  person    schedule 18.11.2012
comment
Да, root владеет файлом. См. вывод ls -l root-file.   -  person gjain    schedule 18.11.2012


Ответы (1)


вы не можете использовать setuid в сценариях оболочки...

если вам абсолютно необходимо использовать setuid checkout http://isptools.sourceforge.net/suid-wrap.html

Обычно что-то подобное также можно установить с помощью некоторой пользовательской конфигурации sudo...

person André Keller    schedule 18.11.2012