¿Cómo puedo hacer que este demonio / init se ejecute como un usuario no root?

19

Tengo un guión de inicio para iniciar un demonio. El problema es que se ejecuta como root. Me gustaría que se ejecute como un usuario llamado "desplegar". 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
CONNECTICUT.
fuente
2
Cambie $DAEMON $DAEMON_OPTSasu - deploy -c "$DAEMON $DAEMON_OPTS"
margarita el
Tenga cuidado de no iniciar el deamon utilizando el comando "servicio" mientras realiza la prueba, ya que la opción chuid no tendrá efecto y el proceso se ejecutará como root.
pasqal
¿Se invocan todos los scripts en init.d después de que el núcleo ya conoce a los usuarios en el sistema?
ransh

Respuestas:

18

Usa la start-stop-daemonutilidad para iniciar tu demonio. Pase la opción -c(o --chuid) para ejecutarlo como un usuario diferente. Encontrarás algunos ejemplos en /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- deja de ser malvado'
fuente
¿Se invocan todos los scripts init.d después de que el núcleo ya conoce a todos los usuarios del sistema?
ransh
@ransh No estoy seguro de lo que estás preguntando. El núcleo realmente no "conoce" a los usuarios: en lo que a él respecta, un usuario es solo un número, y no le importa cuál sea el número, excepto que los procesos que se ejecutan como usuario 0 pueden hacer muchas cosas que otros usuarios no pueden hacer. .
Gilles 'SO- deja de ser malvado'
-1

En Ubuntu puedes usar solo

sudo -u deploy $DAEMON $DAEMON_OPTS

Роман Коптев
fuente
¿Por qué agregar sudo cuando existe su o --chuid? ¿Qué pasa si sudo no está instalado?
Jeff Schaller
2
@JeffSchaller sudo está instalado en Ubuntu
Роман Коптев