Come posso ottenere sudo -u $ user per usare env degli utenti?


19

Sembra che quando si sudousa sudo -u $userquell'ambiente di root sia ancora in uso. Come posso sudoutilizzare l'ambiente degli utenti? come nota speciale non tutti gli utenti che userò su questo hanno shell di login.


Definire "ambiente". # whoami => root # sudo -u user whoami => user
alex

1
La figura di @alex I sudo -u userè analoga a su usercambiare l'env in su che devi usaresu - user
xenoterracide il

Ma cosa intendi con "l'ambiente dell'utente" se l'utente non ha una shell di accesso?
Thomas Themel,

Gli utenti di @Thomas possono eseguire programmi anche se non riescono a sgusciare dentro ... Credo che -uignori anche i gruppi ... Ho provato qualcosa dal root (usando sudo -u down) e ha funzionato, apparentemente non è stato per l'utente. .. quindi devo assicurarmi di eseguire i comandi in modo tale da avere tutti i limiti e le problematiche ambientali.
xenoterracide,

Risposte:


21

Provare sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

sfortunatamente non funziona se non hanno una shell in /etc/passwd:( ma lo farò immagino ...
xenoterracide

Guardando la pagina man, sembra che -Esia quello che preserva l'ambiente, cioè tutte le variabili d'ambiente ecc. Ci sono, anche se non è ancora impostato PATHe LD_LIBRARY_PATHper l'utente chiamante.
Shahbaz,

1
$SUDO_USERpuò essere usato
Rahul Patil il

4

man sudoerssu Debian menziona un'altra possibilità. Non sai da che parte vuoi, ma la tua domanda sembra che tu voglia avere l' env_resetopzione /etc/sudoers: l'opposto è sostanzialmente l' env_keepelenco. Per impostare il corretto HOMEè possibile utilizzare l' -Hopzione per sudodirettamente o, di nuovo sudoers, con l' always_set_homeopzione.

In alternativa, è possibile utilizzare env_fileper specificare un ambiente esatto che si desidera passare. Tuttavia, penso che sia meglio se dai un'occhiata alle env_*opzioni man sudoers, perché /etc/sudoerscontrolla tutto e questo è il punto a cui rivolgersi.

Ecco parte del contesto in cui utilizzo env_resetall'interno del mio sudoersfile:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

Quando sudo ing le variabili di ambiente non vengono conservate.

Nel mio caso, utilizzo qui-document .

Metti le tue azioni come my_script.shall'interno del tuo DOCUMENTO QUI:

su -u some_user <<EOF
./my_script.sh
EOF

Non inserire la variabile direttamente qui, poiché verrebbero interpretati dal tuo attuale utente.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

Se $MY_VARnon è impostato per l'utente che esegue lo script, non verrà impostato.

La tua variabile deve essere chiamata all'interno dei tuoi script, oppure devi evitarli \.

Per esempio.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Qui, $MY_VARavrà some_uservalore contestuale.


Buona risposta. Una piccola correzione: dovrebbe essere su - some_userinvece di su -u some_user.
Rudolfbyker,
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.