Проблемы с 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.