Sowohl Debian als auch Ubuntu liefern eine /etc/sudoers
Datei aus Defaults env_reset
, die Umgebungsvariablen zurücksetzt.
Doch das Verhalten env_reset
wurde von geändert nicht berührt $ HOME es zum Hause des Zielbenutzers zu zurückgesetzt wird .
Ubuntu hat beschlossen, die Version von zu patchen sudo
, um das vorherige Verhalten beizubehalten :
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
Um in Ubuntu die $ HOME-Umgebungsvariable auf den Zielbenutzer zurückzusetzen, muss entweder Defaults always_set_home
oder Defaults set_home
(in diesem Fall wird nur sudo -s
HOME aktualisiert) in ihrer Umgebung festgelegt werden /etc/sudoers
.
Dieser Fehler bei Ubuntu Tracker hat einige weitere Gründe, warum $ HOME in sudo nicht gesetzt wird:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
Siehe Kommentar 4:
Wenn HOME entfernt wird, verwendet z. B. vim, bash usw. /root/.vimrc, /root/.bashrc usw. anstelle von ~ / .vimrc, ~ / .bashrc usw. des Benutzers, obwohl dies eine schlechte Idee ist Um X-Clients über sudo auszuführen, werden sie wahrscheinlich auch an den falschen Speicherorten nach Konfigurationsdateien suchen, und es besteht die Möglichkeit, dass X11-Clients nicht einmal in der Lage sind, eine Verbindung zum X11-Server herzustellen, wenn sie auf die falsche .Xauthority-Datei abzielen.
Es ist eine bewusste Entscheidung der Ubuntu-Entwickler.
Diese Antwort enthält weitere Informationen zu den Optionen von sudoers, z. B . always_set_home
:
https://unix.stackexchange.com/a/91572/281844
Es gibt ein zweites Problem in Ihrer Frage, nämlich das, bei dem sudo echo $HOME
das Haus des Benutzers auch in Debian angezeigt wird.
Dies liegt daran, dass die Shell erweitert wird, $HOME
bevor der sudo
Befehl ausgeführt wird.
Also das:
$ sudo echo $HOME
Wird zuerst durch die Shell erweitert in:
$ sudo echo /home/user
Und dann wird sudo echo /home/user
als root ausgeführt ...
Dies sollte auch den Unterschied demonstrieren:
$ sudo bash -c 'echo $HOME'
/root
Oder holen Sie sich eine vollständige Root-Shell und sehen Sie sich die Umgebungsvariable dort an:
$ sudo -s
# echo $HOME
/root