Dlaczego $ HOME nie zmienia się, jeśli używam sudo?

15

Spodziewałem się, że opcja -H da mi środowisko docelowego użytkownika.

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

Pozwoliłoby mi to powiedzieć:

sudo -u tanum ls ~

i uzyskaj listę katalogu domowego użytkownika docelowego. Nie tak jest. Czy jest to spowodowane env_resetdomyślną wartością w sudoers?

Jeśli tak, czy -H ma jakikolwiek wpływ? Jaki jest najbezpieczniejszy sposób na obejście tego zachowania?

Jeśli nie, jaki jest zamierzony efekt -H?

Proszę mnie wyprostować.

Neil Best
źródło

Odpowiedzi:

16

$HOMEi ~dostać rozszerzony o swojej skorupy, nie są one interpretowane przez echo.

Innymi słowy, echonie $HOMEjest to argument. Tak naprawdę to widzi /home/nbest. Dlatego następujące polecenia są dokładnie identyczne (w twoim przypadku):

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

Niezależnie od próby ( -H, -i...) nigdy nie będzie chciał uzyskać zachowanie. Ponieważ $HOMEjest zastępowany przez powłokę, a powłoka działa jako użytkownik. sudow żaden sposób nie wpływa na twoją powłokę.


Aby obejść ten „problem” (który w rzeczywistości jest funkcją), możesz uruchomić nową podpowłokę:

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

(Zauważ, że używam pojedynczych cudzysłowów, aby uniknąć ekspansji). W ten sposób nowa powłoka shuruchomi się jako użytkownik tanum i wydrukuje swój katalog domowy.


Inną alternatywą jest użycie ~username, które zostaje rozszerzone na dom użytkownika, bez potrzeby używania sudolub su. Próbować:

nbest@geo:~$ echo ~tanum
Andrea Corbellini
źródło
1
Oczywiście. Ale wstyd! sudo do what I mean
Neil Best
1
To mi nie działa. np. sudo -H -u buildbot bash -c "echo $HOME"daje mi /home/ubuntu, który jest domyślnym użytkownikiem niektórych obrazów Ubuntu.
Cerin,
@Cerin używa pojedynczych cudzysłowów, aby zapobiec ekspansji:sh -c 'echo $HOME'
Andrea Corbellini,
3

Proszę spróbować:

sudo -H -u tanum bash -c 'echo $HOME'
tpf
źródło