C'è un modo per far funzionare parte di uno script come un utente diverso (non root)? Se aiuta, la parte da eseguire come utente diverso si verifica alla fine dello script
Modifica:
SO -> Ubuntu 9.04
C'è un modo per far funzionare parte di uno script come un utente diverso (non root)? Se aiuta, la parte da eseguire come utente diverso si verifica alla fine dello script
Modifica:
SO -> Ubuntu 9.04
Risposte:
Utilizzare il comando sudo nello script.
Nella forma:
sudo -u username command
il comando sudo esegue il comando come nome utente utente .
Se lo script viene eseguito come root, non credo che richiederà una password. Altrimenti, in questo articolo viene illustrato come utilizzare sudo con password in una riga di comando? e in questo articolo viene illustrato come utilizzare sudo senza password?
chmod +x script.sh
e poi solosudo -u username script.sh
i
opzione se desideri acquisire l'ambiente dell'utente
Questa risposta è buona, ma il consiglio di serverfault è leggermente pericoloso - consentirebbe a chiunque di eseguire qualsiasi cosa come root! Quindi sto postando qui perché non riesco a formattare il commento.
Consiglierei di usare visudo per fornire le autorizzazioni necessarie nel modo più preciso possibile. Digita visudo
e aggiungi una riga come:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Se è necessario eseguire la stessa cosa su molti host, è possibile aprirlo con:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Ma non ** uso * neanche:
username ALL=(ALL) NOPASSWD: ALL
o nome utente hostname = ALL
La pagina man sudoer ha molti dettagli cruenti
username
con il nome utente che dovrebbe essere in grado di eseguire il comando). Se l'eseguibile che vuoi eseguire è eseguibile solo da un determinato utente, va bene lo stesso: passa quel nome utente nella sudo -u username commandline
riga dello script.
# I = like:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./correre
1: root
2: nobody
3: root
non ne sono così sicuro, ma se si desidera che SOLO la fine di quello script verrà eseguita come un altro utente, è possibile aggiungere su someuser
prima della fine dello script.
Mi sto perdendo qualcosa?
Spero che sia d'aiuto,
Saluti
In questo modo, la fine di uno script verrà eseguita da un altro utente (root). Si prega di notare il $[LINENO+2]
e exit $?
chiama. Questi sono necessari per eseguire la fine dello script una sola volta e per preservare il codice di uscita della sudo
chiamata.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1