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

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

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'

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.