У меня есть простая команда, которую я хочу выполнять как пользователь, но для нее требуются права 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
Какие-либо предложения?
Это именно то, что судо был разработан для. используйте 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).
Подробнее о сценариях suid bash читайте здесь: (Ubuntu) setuid bash не работает
-rwsr-sr-x 1 root root 37 31.01.2011, 09:59 spindown_baydrive
На 37 байтах, я предполагаю, что это сценарий оболочки. При запуске как setuid оболочка запускает новые процессы как исходный uid. Если вы введете в Google запрос «shell script setuid», вы увидите множество объяснений, почему он не работает, и множество способов решения проблемы, очевидные из которых - использование sudo или написание программы-оболочки на C.