Как я запускаю определенную программу с полномочиями пользователя root (Ubuntu ОС), когда ни в какого sudo пользователя не входят система? Для программы нужны полномочия пользователя root функционировать правильно. Обычный пользователь не должен мочь завершить работу этого процесса. Например, у меня есть два пользователя, Администратор и Клиент; программа должна запуститься только, когда клиент входит в систему. Этому нужны полномочия пользователя root, и Клиент не должен мочь завершить работу этого процесса.
Существует несколько способов сделать это. Графический вход в систему Ubuntu обеспечивается GDM (или KDM при использовании Kubuntu). GDM запускается Новомодной подсистемой.
Процесс запуска выполняет эти шаги:
Где запустить Ваш скрипт
Все до XSession работает как корень./etc/gdm/Xsession и все после выполнений как пользователь. Это оставляет Вас с тремя реальными опциями для того, где запустить Ваш скрипт.
Измените сценарии PostLogin или PreSession GDM/KDM для запущения программы. Имя пользователя доступно в переменных среды ИМЕНИ ПОЛЬЗОВАТЕЛЯ или ПОЛЬЗОВАТЕЛЕ.
Используйте PAM для выполнения сценария. PAM установит пользователя авторизации в переменной среды PAM_USER. Добавьте это к/etc/pam.d/gdm для начинания сценария:
auth required pam_exec.so /path/to/your/script
Запишите Новомодный сценарий для запущения программы. Ваш сценарий запустился бы при пользовательском входе в систему, таким образом, мы ищем настольный сигнал запуска сессии, испускаемый сценарием PreSession GDM.
Таким образом, Новомодный сценарий обнаружил бы тот сигнал как триггер выполнения:
# start when GDM's PreSession script runs
start on desktop-session-start
Сигнал от PreSession не проводит имя пользователя, таким образом, необходимо было бы настроить сигнал. В/etc/gdm/PreSession/Default найдите initctl строку и измените его на это. Вы могли также использовать ИМЯ ПОЛЬЗОВАТЕЛЯ вместо ПОЛЬЗОВАТЕЛЯ.
# add USER variable so Upstart script can find it
initctl -q emit desktop-session-start DISPLAY_MANAGER=gdm USER=$USER
См. страницы справочника для Выскочки и его стартовое событие для получения дополнительной информации.
Как избежать Администраторского пользователя
Ваш сценарий должен будет исследовать пользователя/имя пользователя в переменных среды, которые это получает из одного из этих методов, и используйте это, чтобы определить, прерваться ли или продолжить. Будут работать стандартные пишущие сценарий оболочки методы. В зависимости от которого стартового местоположения Вы выбрали из вышеупомянутого списка, имя пользователя может быть доступным в ПОЛЬЗОВАТЕЛЕ, ИМЕНИ ПОЛЬЗОВАТЕЛЯ или переменных среды PAM_USER.
Вы могли использовать setuid, чтобы всегда запустить программу как корень. С точки зрения безопасности это, вероятно, очень, очень плохая идея. Если одному из Ваших пользователей удалось использовать setuid программу, она предоставит им корневой доступ к целому серверу