Назад | Перейти на главную страницу

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

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

Это именно то, что судо был разработан для. используйте 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.