Comment puis-je faire fonctionner ce démon / init en tant qu'utilisateur non root?

19

J'ai un script d'initialisation pour lancer un démon. Le problème est qu'il s'exécute en tant que root. Je voudrais qu'il fonctionne en tant qu'utilisateur appelé "déployer". 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.
la source
2
Changer $DAEMON $DAEMON_OPTSpoursu - deploy -c "$DAEMON $DAEMON_OPTS"
daisy
Attention à ne pas lancer le démon en utilisant la commande "service" pendant que vous testez car l'option chuid n'aura aucun effet et le processus s'exécutera en tant que root.
pasqal
Tous les scripts dans init.d sont-ils appelés après que le noyau connaisse déjà les utilisateurs du système?
ransh

Réponses:

18

Utilisez l' start-stop-daemonutilitaire pour démarrer votre démon. Passez l' option -c(ou --chuid) pour l'exécuter en tant qu'utilisateur différent. Vous en trouverez quelques exemples /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- arrête d'être méchant'
la source
Tous les scripts init.d sont-ils appelés une fois que le noyau connaît déjà tous les utilisateurs du système?
ransh
@ransh, je ne suis pas sûr de ce que vous demandez. Le noyau ne «connaît» pas vraiment les utilisateurs: en ce qui le concerne, un utilisateur n'est qu'un nombre, et peu importe le nombre, sauf que les processus exécutés en tant qu'utilisateur 0 peuvent faire beaucoup de choses que les autres utilisateurs ne peuvent pas faire. .
Gilles 'SO- arrête d'être méchant'
-1

Sur Ubuntu, vous pouvez utiliser simplement

sudo -u deploy $DAEMON $DAEMON_OPTS

Роман Коптев
la source
Pourquoi ajouter sudo quand su ou --chuid existe? Que faire si sudo n'est pas installé?
Jeff Schaller
2
@JeffSchaller sudo est installé sur Ubuntu
Роман Коптев