Perché $ HOME non cambia se uso sudo?


15

Mi aspettavo l'opzione -H per darmi l'ambiente dell'utente di destinazione.

nbest @ geo: ~ $ sudo -H -u tanum echo $ HOME
/ Home / nCordiali
nbest @ geo: ~ $ sudo -u tanum echo $ HOME
/ Home / nCordiali
nbest @ geo: ~ $ sudo -i -u tanum echo $ HOME
/ Home / nCordiali
nbest @ geo: ~ $ sudo -H -i -u tanum echo $ HOME
/ Home / nCordiali

Questo mi permetterebbe di dire:

sudo -u tanum ls ~

e ottenere l'elenco della home directory dell'utente di destinazione. Non è il caso. Questo è causato dall'impostazione env_resetpredefinita in sudoers?

In tal caso -H ha qualche effetto? Qual è il modo più sicuro per ignorare questo comportamento?

In caso contrario, qual è l'effetto previsto di -H?

Per favore, fammi capire.

Risposte:


16

$HOMEe ~ottenere ampliato con la vostra shell, non sono interpretati da echo.

In altre parole, echonon vede $HOMEcome argomento. In realtà vede /home/nbest. Pertanto i seguenti comandi sono esattamente identici (nel tuo caso):

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

Qualunque cosa si prova ( -H, -i, ...) non si sarà mai ottenere il comportamento desiderato. Perché $HOMEviene sostituito dalla shell e la shell viene eseguita come utente. sudonon influisce in alcun modo sulla shell.


Per aggirare questo 'problema' (che in realtà è una funzionalità), è possibile avviare una nuova subshell:

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(Nota che sto usando virgolette singole per evitare l'espansione.) In questo modo, la nuova shell shverrà eseguita come tanum utente e stamperà la sua directory home.


Un'altra alternativa è quella di utilizzare ~username, che viene espanso a casa dell'utente, senza la necessità di utilizzare sudoo su. Provare:

nbest@geo:~$ echo ~tanum

1
Ovviamente. Che imbarazzante! sudo do what I mean
Neil Best,

1
Questo non funziona per me. ad esempio sudo -H -u buildbot bash -c "echo $HOME"mi dà /home/ubuntu, che è l'utente predefinito su alcune immagini di Ubuntu.
Cerin,

@Cerin usa virgolette singole per impedire l'espansione:sh -c 'echo $HOME'
Andrea Corbellini,

3

Vi preghiamo di provare:

sudo -H -u tanum bash -c 'echo $HOME'
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.