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-dataimposto tutti i var e lo eseguo ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &funziona bene. Come posso risolvere questo?
suaccetta un singolo argomento, che è un comando di shell. È necessario scrivere su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"', assicurarsi che MONOSERVERe WEBAPPSsiano 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 -ue -gin questo caso).
(Altrimenti, potresti usare una combinazione di sue sg.)
Aggiornamento: ecco un esempio tratto da alcuni /etc/init.d/mpdscript (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/mpdprogramma stesso. (La procedura di demonizzazione è curata dallo script start-stop-daemon, quindi mpdviene 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 mpdnon è stato cadere i privilegi di per sé, uno avrebbe bisogno di aggiungere (per esempio) -u mpd, -g mpdle opzioni per il 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]esu: unrecognized option '--debug'