Вот код:
(корень :)
# mkdir /test
# cp /bin/bash /test/sbash
# chmod a+s /test/sbash
(пользователь1 :)
$ cd /test
$ ./sbash
$ mkdir trycreate
mkdir: cannot create directory `trycreate': Permission denied
И скрипты bash с установленным битом setuid тоже не работают.
Кстати, мой скрипт setuid perl работает:
test.pl: (с установленным битом setuid, владелец = root)
#!/usr/bin/perl
mkdir('/test/tryperlcreate') or die 'failed';
Выполнение test.pl пользователем user1 создаст каталог, принадлежащий пользователю root.
Вы не можете делать скрипты SUID. К счастью.
Однако вас может заинтересовать программа SUID-обертка здесь: http://isptools.sourceforge.net/suid-wrap.html
Я также должен добавить: пожалуйста, убедитесь, что вам действительно нужно это сделать, прежде чем делать это. Бинарные файлы SUID могут стать большой дырой в вашей системе.
Я уже мог бы репостить то, что было сделано до смерти, но это отличное чтение.
Обычно скрипты оболочки setuid не работают по умолчанию
Попробуйте exec ./bash с -p.
sh:~# cp /bin/bash /bin/ape
sh:~# chmod +s /bin/ape
sh:~**$** /bin/ape -p
ape-3.2#
Это сделано намеренно в Ubuntu, а также во многих других современных * nix-системах. Хотя setuid всегда является потенциальной уязвимостью безопасности, он является дополнительным при работе со сценариями оболочки.
(Классическая проблема заключается в том, что кто-то обманывает то, что считается отдельными аргументами, изменяя переменную среды IFS.)
Как уже упоминалось, это сделано намеренно.
Попробуйте использовать sudo вместо сценариев setuid.