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.