Estoy editando un script init.d. El script init.d ejecuta un script de utilidad que luego ejecuta un proceso. De cualquiera de los scripts de bash, ¿cómo haría que inicie el proceso principal como un usuario y grupo específicos?
Estoy editando un script init.d. El script init.d ejecuta un script de utilidad que luego ejecuta un proceso. De cualquiera de los scripts de bash, ¿cómo haría que inicie el proceso principal como un usuario y grupo específicos?
Respuestas:
La forma más simple es usar el comando su (1), tiene una opción que le permite ejecutar un comando a través del shell del usuario, por ejemplo:
su foo -c ls
Esto cambiará al usuario foo y ejecutará el comando ls. Si el usuario que desea utilizar no tiene un shell válido (es decir, no está en / etc / shells, como / bin / false o / sbin / nologin), también deberá especificar un shell en la línea de comandos. Ejemplo con salida:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &si su www-dataconfiguro todos los vars y lo ejecuto ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &funciona bien. ¿Cómo puedo resolver esto?
sutoma un único argumento, que es un comando de shell. Usted tiene que escribir su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"', y asegúrese de que MONOSERVERy WEBAPPSse exportan por el shell padre. (Nota: no haga, su … -c "$MONOSERVER …"ya que esto fallará si alguna de las variables contiene caracteres especiales de shell). Y si tiene un iniciador de demonios dedicado comostart-stop-daemon , úselo.
Si start-stop-daemonestá disponible en su sistema, probablemente debería usarlo y echar un vistazo a sus opciones (especialmente -uy -gen este caso).
(De lo contrario, puede usar una combinación de suy sg.)
Actualización: Aquí hay un ejemplo tomado de algún /etc/init.d/mpdscript (que usa start-stop-daemon):
Comando de inicio:
echo "Starting Music Player Daemon"
start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
--pidfile /var/run/mpd.pid --make-pidfile \
-- --no-daemon /etc/mpd.conf 2>/dev/null
Todo lo que sigue --es un argumento para el /usr/bin/mpdprograma en sí. (El guión start-stop-daemon se encarga del procedimiento de daemonización, por lo que mpdse le pide que no se preocupe por ello --nodaemon).
Comando de parada:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
Si mpdno estaba eliminando los privilegios por sí mismo, uno necesitaría agregar (por ejemplo) -u mpd, -g mpdopciones al start-stop-daemoncomando.
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
Usage: su [options] [LOGIN]ysu: unrecognized option '--debug'