Warum ändert sich $ HOME nicht, wenn ich sudo verwende?

15

Ich habe erwartet, dass die Option -H die Umgebung des Zielbenutzers angibt.

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

Dies würde mir erlauben zu sagen:

sudo -u tanum ls ~

und rufen Sie die Home-Verzeichnisliste des Zielbenutzers ab. Nicht der Fall. Wird dies durch die env_resetStandardeinstellung in verursacht sudoers?

Wenn ja, hat -H einen Effekt? Was ist der sicherste Weg, um dieses Verhalten zu überschreiben?

Wenn nicht, was ist die beabsichtigte Wirkung von -H?

Bitte setzen Sie mich gerade.

Neil Best
quelle

Antworten:

16

$HOMEund ~von deiner Shell erweitert werden , werden sie von nicht interpretiert echo.

Mit anderen Worten, echosieht nicht $HOMEals Argument. Es sieht tatsächlich /home/nbest. Daher sind die folgenden Befehle (in Ihrem Fall) genau identisch:

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

Was auch immer Sie versuchen , ( -H, -i, ...) Sie werden nie das wollte Verhalten erhalten. Denn $HOMEwird durch Ihre Shell ersetzt und Ihre Shell läuft als Ihr Benutzer. sudohat keinen Einfluss auf Ihre Shell in irgendeiner Weise.


Um dieses 'Problem' (das eigentlich eine Funktion ist) zu umgehen, können Sie eine neue Subshell starten:

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

(Beachten Sie, dass ich einfache Anführungszeichen verwende, um eine Erweiterung zu vermeiden.) Auf diese Weise wird die neue Shell shals Benutzertanum ausgeführt und gibt sein Ausgangsverzeichnis aus .


Eine andere Alternative ist die Verwendung ~username, die auf das Heim dieses Benutzers erweitert wird, ohne dass sudooder verwendet werden muss su. Versuchen:

nbest@geo:~$ echo ~tanum
Andrea Corbellini
quelle
1
Natürlich. Wie peinlich! sudo do what I mean
Neil Best
1
Das funktioniert bei mir nicht. zB sudo -H -u buildbot bash -c "echo $HOME"gibts mir /home/ubuntu, welches der Standardbenutzer bei manchen Ubuntu-Images ist.
Cerin
@Cerin verwenden einfache Anführungszeichen, um eine Erweiterung zu verhindern:sh -c 'echo $HOME'
Andrea Corbellini
3

Bitte versuche:

sudo -H -u tanum bash -c 'echo $HOME'
tpf
quelle