Как всегда запускать программу с правами root
Если необходимо, чтобы программа всегда запускалась с правами root, даже если она запущена не от имени root, а обычным непривилешированным пользователем без использования sudo, то нужно использовать функционал setuid или setgid. Это означает, что программа будет запущена не от имени пользователя, который ее запускат, а от имени владельца исполняемого файла.
Установить признак setuid можно так:
sudo chown root:root ./program sudo chmod a+s ./program
Всё. Теперь даже если процесс запущен непривилегированным пользователем, он всё равно получит привилегии владельца исполняемого файла, то есть - root
Автоматический запуск графических приложений с правами root
Однако, при попытке запустить GUI-приложение с признаком setuid я получил сообщение вида:
Gtk-WARNING **: 10:17:50.381: This process is currently running setuid or setgid. This is not a supported use of GTK+. You must create a helper
В этому случае - можно сделать иначе.
Добавить в /etc/sudoers строку вида:
username ALL=(ALL) NOPASSWD: /usr/local/bin/programmname
где username - имя непривилегированного пользователя, которому мы хотим дать прав запускать программу /usr/local/bin/programmname с правами root без ввода пароля.
А затем, я сделал скрипт-обертку:
#!/bin/bash sudo /usr/local/bin/programmname & exit 0
В итоге - при запуске скрипта-обертки GUI-программа /usr/local/bin/programmname стартует с правми root без ввода пароля.
Discussion