Выполнить скрипт из rc.local от имени пользователя вместо root


26

Я хочу выполнять скрипт каждый раз, когда запускается мой сервер. Проблема в том, что мне нужно быть определенным пользователем, чтобы выполнить скрипт, если я пытаюсь сделать это как root, он не может найти определенные пакеты (например, ruby).

Я пытаюсь перейти на ххх user01.

sudo su user01
/etc/init.d/script start

Это не работает однако.


Разместите свой скрипт инициализации?
кванта

У вас есть несколько журналов?
Дом

Почему бы вам просто не использовать suв сценарии rc?
Мат

Ответы:


30

Запуск sudo su user01в скрипте не означает, что следующие команды отправляются в результирующую оболочку. Фактически, это, вероятно, означает, что новая оболочка создается как user01, которая никогда не завершается!

Две вещи:

  • Вы можете выполнить команду от имени другого пользователя, передав -c 'command...'аргумент su, например su user01 -c '/etc/init.d/script start'.
  • Запуск службы, использующей /etc/init.d из rc.local, не является правильным решением. Вы хотите использовать включить службу при запуске, используя ваши инструменты распространения, такие как chkconfigили update-rc.d. Вам также не нужны рабочие места в /etc/init.d, которые не должны запускаться как root. Сами задания могут свободно переходить на другую учетную запись пользователя, но должны вызываться пользователем root.


4

Вы можете просто запустить команду через sudo следующим образом:

sudo -H -u user01 /etc/init.d/script start

-H устанавливает переменную среды HOME на значение пользователя

-u указывает имя пользователя для запуска


0

Конечно, вы не можете запустить этот скрипт с помощью sudo из-за requiretty (предписывает, чтобы пользователи были зарегистрированы) в sudoers. Вы можете отключить, что несколько рискованно

Также есть несколько старый инструмент под названием runsuid: http://freecode.com/projects/runsuid

НТН

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.