it-swarm-eu.dev

Esegui parte di uno script bash come utente diverso

C'è un modo per far parte di uno script eseguito come un utente diverso (non-root)? Se aiuta, la parte da eseguire come un utente diverso si verifica alla fine dello script

Modificare :
Sistema operativo -> Ubuntu 9.04

32
Manish Mathai

Usa il comando Sudo nello script.

Nella forma:

Sudo -u username command

il comando Sudo esegue comando come utente nome utente .

Se lo script viene eseguito come root, non penso che richieda una password. Altrimenti, questo articolo discute come usare Sudo con password in una riga di comando? , e questo articolo discute come usare Sudo senza password?

38
pcapademic

Questa risposta è buona, ma il consiglio di default del server è leggermente pericoloso - permetterebbe a chiunque di eseguire qualsiasi cosa come root! Quindi sto postando qui perché non posso formattare il commento.

Consiglierei di usare visudo per fornire le autorizzazioni di cui hai bisogno nel modo più preciso possibile. Digitare visudo e aggiungere una riga come:

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2

Se hai bisogno di eseguire la stessa cosa su molti host, puoi aprirlo con:

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2

Ma io ** non * uso entrambi:

username ALL=(ALL) NOPASSWD: ALL

o nome utente hostname = ALL

La pagina man sudoer ha molti dettagli cruenti

6
DaveParillo

# I = come:

#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
5
AXE-Labs

Per sonarqube:

Sudo -u sonar /usr/bin/sonar start

dove sonar è il nome dell'utente utilizzato per eseguire il comando /usr/bin/sonar start

4
burtsevyg

non ne sono sicuro, ma se vuoi che SOLO la fine di quello script venga eseguita come un altro utente, puoi aggiungere su someuser prima della fine dello script.

Mi sto perdendo qualcosa?

Spero che sia d'aiuto,

Saluti

2
dag729

In questo modo, la fine di uno script verrà eseguita dall'utente diverso (root). Si prega di notare le chiamate $[LINENO+2] e exit $?. Questi sono necessari per eseguire la fine dello script solo una volta e per preservare il codice di uscita della chiamata Sudo.

#!/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
1
dparalen