Как запустить определенную программу с полномочиями пользователя root (Ubuntu ОС), когда никакой sudo пользователь не входит в систему?

Как я запускаю определенную программу с полномочиями пользователя root (Ubuntu ОС), когда ни в какого sudo пользователя не входят система? Для программы нужны полномочия пользователя root функционировать правильно. Обычный пользователь не должен мочь завершить работу этого процесса. Например, у меня есть два пользователя, Администратор и Клиент; программа должна запуститься только, когда клиент входит в систему. Этому нужны полномочия пользователя root, и Клиент не должен мочь завершить работу этого процесса.

3
задан 21.08.2012, 19:28

2 ответа

Существует несколько способов сделать это. Графический вход в систему Ubuntu обеспечивается GDM (или KDM при использовании Kubuntu). GDM запускается Новомодной подсистемой.

Процесс запуска выполняет эти шаги:

  1. Начальные загрузки системы. Выскочка запускает сервисы, включая GDM (/etc/init/gdm).
  2. GDM запускает, инициализирует X-сервер (/etc/gdm/Init /*) и представляет окно входа в систему GUI.
  3. Пользователь входит в систему.
    1. Авторизация PAM происходит (/etc/pam.d/gdm)
    2. GDM запускает скрипт PostLogin (/etc/gdm/PostLogin /*).
    3. GDM запускает скрипт PreSession (/etc/gdm/PreSession /*).
    4. GDM выполняет Xsession и xinit сценарии
      (/etc/gdm/Xsession,/etc/X11/xinit/xinitrc.d /*,/etc/X11/Xsession,/etc/X11/Xsession.d /*)
  4. Рабочий стол пользователя появляется.

Где запустить Ваш скрипт

Все до XSession работает как корень./etc/gdm/Xsession и все после выполнений как пользователь. Это оставляет Вас с тремя реальными опциями для того, где запустить Ваш скрипт.

  1. Измените сценарии PostLogin или PreSession GDM/KDM для запущения программы. Имя пользователя доступно в переменных среды ИМЕНИ ПОЛЬЗОВАТЕЛЯ или ПОЛЬЗОВАТЕЛЕ.

  2. Используйте PAM для выполнения сценария. PAM установит пользователя авторизации в переменной среды PAM_USER. Добавьте это к/etc/pam.d/gdm для начинания сценария:

    auth  required  pam_exec.so   /path/to/your/script
    
    • Вы смогли использовать PAM для соответствия конкретному пользователю (как в этом ответе), таким образом, сценарий будет только работать за тем пользователем и не должен был бы соответствовать пользователям сам. У меня нет экспертного знания PAM, чтобы объяснить, как сделать это.

  3. Запишите Новомодный сценарий для запущения программы. Ваш сценарий запустился бы при пользовательском входе в систему, таким образом, мы ищем настольный сигнал запуска сессии, испускаемый сценарием 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.

7
ответ дан 07.12.2019, 23:18

Вы могли использовать setuid, чтобы всегда запустить программу как корень. С точки зрения безопасности это, вероятно, очень, очень плохая идея. Если одному из Ваших пользователей удалось использовать setuid программу, она предоставит им корневой доступ к целому серверу

1
ответ дан 07.12.2019, 23:18

Теги

Похожие вопросы