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


39

Ich habe ein Bash-Skript, myhome.shdas 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 Ubuntu 16.04 und 17.10 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 ich innerhalb des Skripts in Debian, wenn es mit sudo ausgeführt wird, immer bekomme, $HOME=/rootwährend ich es in Ubuntu bekomme $HOME=/home/user. Weiß jemand, was die Ubuntu-Entwickler geändert haben?

Antworten:


68

Sowohl Debian als auch Ubuntu liefern eine /etc/sudoersDatei aus Defaults env_reset, die Umgebungsvariablen zurücksetzt.

Doch das Verhalten env_resetwurde 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_homeoder Defaults set_home(in diesem Fall wird nur sudo -sHOME 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 $HOMEdas Haus des Benutzers auch in Debian angezeigt wird.

Dies liegt daran, dass die Shell erweitert wird, $HOME bevor der sudoBefehl 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/userals 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.