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

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."
    ;;
…

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'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.