Sto modificando uno script init.d. Lo script init.d esegue uno script di utilità che esegue quindi un processo. Da entrambi gli script bash come potrei farlo avviare il processo principale come utente e gruppo specifici?
Sto modificando uno script init.d. Lo script init.d esegue uno script di utilità che esegue quindi un processo. Da entrambi gli script bash come potrei farlo avviare il processo principale come utente e gruppo specifici?
Risposte:
Il modo più semplice è usare il comando su (1), ha un'opzione che ti permette di eseguire un comando tramite la shell dell'utente, ad esempio:
su foo -c ls
Questo passerà all'utente foo ed eseguirà il comando ls. Se l'utente che vuoi usare non ha una shell valida (cioè non è in / etc / shells, come / bin / false o / sbin / nologin) dovrai anche specificare una shell sulla riga di comando. Esempio con output:
# 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 &
se su www-data
imposto tutti i var e lo eseguo ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
funziona bene. Come posso risolvere questo?
su
accetta un singolo argomento, che è un comando di shell. È necessario scrivere su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
, assicurarsi che MONOSERVER
e WEBAPPS
siano esportati dalla shell padre. (Nota: non fare su … -c "$MONOSERVER …"
ciò poiché fallirà se una qualsiasi delle variabili contiene caratteri speciali della shell.) E se si dispone di un launcher daemon dedicato comestart-stop-daemon
, usarlo.
Se start-stop-daemon
è disponibile sul tuo sistema, dovresti probabilmente usarlo e dare un'occhiata alle sue opzioni (specialmente -u
e -g
in questo caso).
(Altrimenti, potresti usare una combinazione di su
e sg
.)
Aggiornamento: ecco un esempio tratto da alcuni /etc/init.d/mpd
script (che utilizza start-stop-daemon
):
Avvia comando:
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
Tutto ciò che segue --
è un argomento per il /usr/bin/mpd
programma stesso. (La procedura di demonizzazione è curata dallo script start-stop-daemon, quindi mpd
viene chiesto di non occuparsene --nodaemon
.)
Comando di arresto:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
Se mpd
non è stato cadere i privilegi di per sé, uno avrebbe bisogno di aggiungere (per esempio) -u mpd
, -g mpd
le opzioni per il start-stop-daemon
comando.
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]
esu: unrecognized option '--debug'