Avvia processo come un altro utente / gruppo (nello script init.d)


10

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:


12

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 non sembra che gli dia molti argomenti. Ottengo Usage: su [options] [LOGIN]esu: unrecognized option '--debug'

Non funziona esattamente. Quando eseguo questa riga come root ricevo un errore 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?

2
@ acidzombie24 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.
Gilles 'SO- smetti di essere malvagio' il

Gilles: Va bene, non sto sostituendo lo script init.d con quello che sono? Posso mettere tutte le variabili in un nuovo script e lanciarlo perché è facile e non dovrei imparare nulla. Ma cosa c'è di così speciale nel demone start-stop? Lascerò un commento su quella risposta

È meglio usare su o su -login? Ho letto l'uomo su, ma non riesco a capire per questo caso specifico
Massimo

4

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.


Non sto sostituendo lo script init.d con start-stop-daemon? non sarebbe più facile usare su e un file di script? Se sostituisco init.d come posso installarlo all'avvio? cosa sto passando al demone start-stop? -edit- sono googling esempi di ATM forse non avrò bisogno di una risposta ma mi sento come se fosse una risposta complessa

2
Senza fortuna. Ecco la mia linea. Funziona ancora come root. Ho controllato le pagine man e ancora non so cosa fare al riguardo. 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.