Как я могу заставить этого демона / 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, могут делать много вещей, которые другие пользователи не могут ,
Жиль "ТАК - перестань быть злым"

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