it-swarm.com.de

Wie verwalten Ubuntu und Debian $ HOME für Benutzer mit Sudo-Berechtigungen?

Ich habe ein Bash-Skript myhome.sh, Das nur eine Zeile enthält:

echo $HOME

Der Eigentümer des Skripts ist ein Benutzer:

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

In buntu 16.04 und 17.1 bekomme ich:

$ echo $HOME
/home/user

$ Sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ Sudo bash myhome.sh
/home/user

In Debian Buster/Testing bekomme ich:

$ echo $HOME
/home/user

$ Sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ Sudo bash myhome.sh
/root

Ich verstehe nicht, warum im Skript in Debian, wenn es mit Sudo ausgeführt wird, ich immer $HOME=/root Erhalte, während ich in Ubuntu $HOME=/home/user Erhalte. Weiß jemand, was die Ubuntu-Entwickler geändert haben?

38
ceccoemi

Sowohl Debian als auch Ubuntu liefern eine /etc/sudoers - Datei aus, die Defaults env_reset Enthält und Umgebungsvariablen zurücksetzt.

Das Verhalten von env_reset Wurde jedoch von ohne Berühren von $ HOME geändert, um es auf die Startseite des Zielbenutzers zurückzusetzen.

Ubuntu hat beschlossen, die Version von Sudo zu patchen, um das vorherige Verhalten beizubehalten: https://bugs.launchpad.net/ubuntu/+source/Sudo/+bug/76014

In Ubuntu muss zum Zurücksetzen der Umgebungsvariablen $ HOME auf den Zielbenutzer entweder Defaults always_set_home Oder Defaults set_home Festgelegt werden (in diesem Fall wird nur Sudo -s HOME aktualisiert ) in ihrem /etc/sudoers.

Dieser Fehler im Ubuntu-Tracker hat weitere Gründe, warum $ HOME in Sudo nicht festgelegt wird: https://bugs.launchpad.net/ubuntu/+source/Sudo/+bug/1373495

Siehe Kommentar 4:

Wenn HOME entfernt wird, dann z. vim, bash usw. verwenden /root/.vimrc, /root/.bashrc usw. anstelle von ~/.vimrc, ~/.bashrc usw. des Benutzers. Während es eine schlechte Idee ist, X-Clients über Sudo auszuführen, Auch sie würden wahrscheinlich an den falschen Speicherorten nach Konfigurationsdateien suchen, und es besteht die Möglichkeit, dass X11-Clients möglicherweise nicht einmal eine Verbindung zum X11-Server herstellen können, wenn sie auf die falsche .Xauthority-Datei abzielen.

Es ist eine bewusste Entscheidung der Ubuntu-Entwickler.

Diese Antwort enthält weitere Details zu den Sudoer-Optionen wie always_set_home: https://unix.stackexchange.com/a/91572/281844


Es gibt ein zweites Problem in Ihrer Frage, nämlich den Sudo echo $HOME, Der auch in Debian immer noch das Haus des Benutzers anzeigt.

Dies liegt daran, dass die Shell $HOME erweitert, bevor der Befehl Sudo ausgeführt wird.

Also das:

$ Sudo echo $HOME

Wird zuerst von der Shell erweitert in:

$ Sudo echo /home/user

Und dann führt Sudo echo /home/user Als root aus ...

Dies sollte auch den Unterschied zeigen:

$ Sudo bash -c 'echo $HOME'
/root

Oder holen Sie sich eine vollständige Root-Shell und sehen Sie sich dort die Umgebungsvariable an:

$ Sudo -s
# echo $HOME
/root
67
filbranden