Назад | Перейти на главную страницу

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

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

Пытаюсь перейти на xxx user01.

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

Однако это не работает.

Бег 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.

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

@reboot username /etc/init.d/script start

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

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

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

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

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

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

HTH