Wie kann ich diesen Daemon / init als Nicht-Root-Benutzer ausführen lassen?

19

Ich habe ein Init-Skript, um einen Daemon zu starten. Das Problem ist, dass es als root ausgeführt wird. Ich möchte, dass es als Benutzer namens "deploy" ausgeführt wird. 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
CT.
quelle
2
Wechsel $DAEMON $DAEMON_OPTSzusu - deploy -c "$DAEMON $DAEMON_OPTS"
daisy
Achten Sie darauf, den Deamon beim Testen nicht mit dem Befehl "service" zu starten, da die Option chuid keine Auswirkung hat und der Prozess als Root ausgeführt wird.
Pasqal
Werden alle Skripte in init.d aufgerufen, nachdem der Kernel die Benutzer im System bereits kennt?
Ransh

Antworten:

18

Verwenden Sie das start-stop-daemonDienstprogramm, um Ihren Daemon zu starten. Übergeben Sie die Option -c(oder --chuid), um sie als anderer Benutzer auszuführen. Beispiele finden Sie in /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."
    ;;
…
Gilles 'SO - hör auf böse zu sein'
quelle
Werden alle init.d-Skripte aufgerufen, nachdem der Kernel bereits alle Benutzer im System kennt?
Ransh
@ Ransh Ich bin nicht sicher, was Sie fragen. Der Kernel „kennt“ Benutzer nicht wirklich: Ein Benutzer ist nur eine Nummer, und es ist ihm egal, wie die Nummer lautet, außer dass Prozesse, die als Benutzer 0 ausgeführt werden, viele Dinge tun können, die andere Benutzer nicht können .
Gilles 'SO - hör auf böse zu sein'
-1

Auf Ubuntu kann man eben verwenden

sudo -u deploy $DAEMON $DAEMON_OPTS

Роман Коптев
quelle
Warum sollte sudo hinzugefügt werden, wenn su oder --chuid existieren? Was ist, wenn sudo nicht installiert ist?
Jeff Schaller
2
@JeffSchaller sudo ist auf Ubuntu installiert
Роман Коптев