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

26

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

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

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

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

Филипп
источник
Разместите свой скрипт инициализации?
кванта
У вас есть несколько журналов?
Дом
Почему бы вам просто не использовать suв сценарии rc?
Мат
См. Stackoverflow.com/questions/8940771/… .
Фердинанд Прантл

Ответы:

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.
Кайл Смит
источник
8

Вы можете вставить что-нибудь /etc/crontabи запустить@reboot

@reboot username /etc/init.d/script start
user9517 поддерживает GoFundMonica
источник
2
или в собственном файле crontab пользователя.
Джейк
4

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

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

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

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

joetek
источник
0

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

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

НТН

sebelk
источник