Как я могу заставить этого демона / init работать как пользователь без полномочий root?

19

У меня есть сценарий инициализации, чтобы запустить демон. Проблема в том, что он работает от имени пользователя root. Я бы хотел, чтобы он работал как пользователь с именем «deploy». Ubuntu 12.04

#! /bin/sh

# File: /etc/init.d/unicorn

### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the unicorn web server
# Description:       starts unicorn
### END INIT INFO

DAEMON=/usr/local/bin/unicorn_rails
DAEMON_OPTS="-c /var/www/current/config/unicorn.rb -D"
NAME=unicorn
DESC="Unicorn"
PID=/var/www/current/shared/pid/unicorn.pid

case "$1" in
  start)
    echo -n "Starting $DESC: "
    $DAEMON $DAEMON_OPTS
    echo "$NAME."
    ;;
  *)
    echo "Usage: $NAME {start|stop|restart|reload}" >&2
    exit 1
    ;;
esac

exit 0
КТ.
источник
2
Изменить $DAEMON $DAEMON_OPTSнаsu - deploy -c "$DAEMON $DAEMON_OPTS"
Дейзи
Остерегайтесь не запускать deamon с помощью команды «service» во время тестирования, так как опция chuid не будет иметь никакого эффекта, и процесс запустится от имени пользователя root.
Паскаль
Все ли скрипты в init.d вызываются после того, как ядро уже знает пользователей в системе?
ransh

Ответы:

18

Используйте start-stop-daemonутилиту для запуска вашего демона. Передайте -c(или --chuid) параметр, чтобы запустить его от имени другого пользователя. Вы найдете несколько примеров в /etc/init.d/*.

case $1 in
  start)
    echo -n "Starting $DESC: "
    start-stop-daemon --start --chuid deploy --pidfile "$PID" --start --exec "$DAEMON" -- $DAEMON_OPTS
    echo "$NAME."
    ;;
…
Жиль "ТАК - прекрати быть злым"
источник
Все сценарии init.d, вызываемые после того, как ядро ​​уже знает всех пользователей в системе?
ransh
@ransh Я не уверен, что ты спрашиваешь. Ядро на самом деле не «знает» пользователей: что касается пользователя, то это просто число, и ему все равно, что это за число, за исключением того, что процессы, выполняющиеся от имени пользователя 0, могут делать много вещей, которые другие пользователи не могут ,
Жиль "ТАК - перестань быть злым"
-1

На Ubuntu вы можете использовать только

sudo -u deploy $DAEMON $DAEMON_OPTS

Роман Коптев
источник
Зачем добавлять sudo, если su или --chuid существуют? Что делать, если sudo не установлен?
Джефф Шаллер
2
@JeffSchaller sudo установлен на Ubuntu
Роман Коптев