Проблемы с SUID

У меня есть простая команда, которую я хочу выполнять как пользователь, но она требует прав root. Я подозреваю, что это случай "SUID"-бит, но я никогда не использовал его.

Вот что я пробовал:

aioobe@e6510:~/bin$ sudo -s
root@e6510:~/bin# cat -> spindown_baydrive
#!/bin/bash
/sbin/hdparm -Y /dev/sdb
root@e6510:~/bin# chmod +x spindown_baydrive 
root@e6510:~/bin# chmod ug+s spindown_baydrive 
root@e6510:~/bin# exit
aioobe@e6510:~/bin$ ./spindown_baydrive 
/dev/sdb: Permission denied
aioobe@e6510:~/bin$


aioobe@e6510:~/bin$ ls -la spindown_baydrive 
-rwsr-sr-x 1 root root 37 2011-01-31 09:59 spindown_baydrive

Какие-либо предложения?

3 ответа

Решение

Это именно то, для чего была разработана sudo. используйте visudo для редактирования sudoers, чтобы позволить непривилегированному пользователю запускать ваш скрипт от имени пользователя root.

visudo

добавить такую ​​строку

aioobe ALL=NOPASSWD: /path/to/spindown_baydrive

и сохраните файл

теперь вы можете запустить файл как root с помощью команды

sudo /path/to/spindown_baydrive

Если вы хотите, чтобы для запуска скрипта требовался ввод пароля, измените строку sudoers выше на

aioobe ALL= /path/to/spindown_baydrive

Вы можете позволить пользователю запускать сценарий от имени root с помощью sudo, настроив его в /etc/sudoers, не заставляя пользователя вводить свой пароль (см. Параметр NOPASSWD).

Чтобы использовать bash-скрипты, читайте больше здесь: (Ubuntu) setuid bash не работает

-rwsr-sr-x 1 root root 37 2011-01-31 09:59 spindown_baydrive

Я думаю, что это 37-байтовый скрипт оболочки. При запуске от имени setuid оболочка запускает новые процессы как исходный uid. Если вы воспользуетесь Google для "setuid сценария оболочки", вы увидите множество объяснений, почему это не работает - и множество способов решить проблему, очевидные из них - использование sudo или написание программы-оболочки на C.

Другие вопросы по тегам