Unter Ubuntu 12.04 sudo -s
sieht regularuser
die Situation folgendermaßen aus , wenn ich die Variable $ HOME nicht ändere :
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Ich habe Ubuntu vor langer Zeit verlassen, daher kann ich nicht sicher sein, aber ich denke, dies ist das Standardverhalten. Meine Fragen lauten also:
Q1. Wie geht das? Wo ist die Konfig?
Q2. Wie deaktiviere ich es?
Edit: Danke für die Antworten, die die Dinge ein wenig geklärt haben, aber ich denke, ich muss ein paar Fragen hinzufügen, um die Antwort zu bekommen, die ich suche.
Q3. Ändert in Debian sudo -s
die Variable $ HOME in /root
. Nach den Antworten, man sudo
mit denen ich lief, sudo -s
ist die in gegeben /etc/passwd
, oder?
Q4. Sowohl unter Ubuntu als auch unter Debian ist die /etc/passwd
für root angegebene Shell jedoch /bin/bash
. In beiden Systemen kann ich auch nicht finden, wo sich der Unterschied in .profile
oder in .bashrc
Dateien befindet, was $ HOME betrifft, so dass sich das Verhalten von sudo -s
unterscheidet. Irgendeine Hilfe dazu?
sudo
sich Debian und Ubuntu unterschiedlich verhalten.sudo
, denke ich, dass es in der Tat standardmäßig einen Unterschied gibt. Ich wette jedoch nicht darauf, da ich auf einer Box bin, die von jemand anderem eingerichtet wurde und schon eine ganze Weile läuft. Auf jeden Fall habe ich für alle Interessierten security.stackexchange.com/questions/18369/… und bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 gefunden .Antworten:
Sudo bietet viele Konfigurationsoptionen zur Kompilierungszeit. Mit können Sie die Einstellungen in Ihrer Version auflisten
sudo -V
. Einer der Unterschiede zwischen der Konfiguration in Debian Wheezy und in Ubuntu 12.04 ist, dass dieHOME
Umgebungsvariable in Ubuntu, aber nicht in Debian erhalten bleibt. Beide Distributionen löschen alle Umgebungsvariablen mit Ausnahme einiger weniger, die ausdrücklich als sicher markiert sind. Sosudo -s
bleibtHOME
auf Ubuntu erhalten, während auf DebianHOME
gelöscht wird undsudo
setzt es dann in das Home-Verzeichnis des Zielbenutzers.Sie können dieses Verhalten in der
sudoers
Datei überschreiben . Führen Sie ausvisudo
, um diesudoers
Datei zu bearbeiten . Es gibt mehrere relevante Optionen:env_keep
bestimmt, welche Umgebungsvariablen erhalten bleiben. Verwenden SieDefaults env_keep += "HOME"
diese Option, um dieHOME
Umgebungsvariable des Aufrufers beizubehalten oderDefaults env_keep -= "HOME"
zu löschen (und durch das Basisverzeichnis des Zielbenutzers zu ersetzen).env_reset
bestimmt, ob Umgebungsvariablen überhaupt zurückgesetzt werden. Das Zurücksetzen von Umgebungsvariablen ist häufig für Regeln erforderlich, mit denen ein bestimmter Befehl ausgeführt werden kann, bietet jedoch keinen direkten Sicherheitsvorteil für Regeln, mit denen ohnehin beliebige Befehle ausgeführt werden können.always_set_home
WennHOME
diese Option festgelegt ist, wird sie überschrieben, auch wenn sie aufgrundenv_reset
einer Deaktivierung oder einesHOME
Eintrags in derenv_keep
Liste beibehalten wurde . Diese Option hat keine Auswirkung, wenn sieHOME
nicht beibehalten wird.set_home
ist wiealways_set_home
, gilt aber nur fürsudo -s
, nicht beim Aufrufsudo
mit einem expliziten Befehl.Diese Optionen können für einen bestimmten Quellbenutzer, einen bestimmten Zielbenutzer oder einen bestimmten Befehl festgelegt werden.
sudoers
Einzelheiten finden Sie im Handbuch.Sie können jederzeit festlegen,
HOME
dass ein bestimmter Anruf überschriebensudo
werden soll, indem Sie die Option übergeben-H
.Die Shell überschreibt niemals den Wert von
HOME
. (Es wird gesetzt,HOME
wenn es nicht gesetzt ist, setzt abersudo
immer dieHOME
eine oder andere Richtung.)Wenn Sie ausführen
sudo -i
, wirdsudo
eine erste Anmeldung simuliert. Dies umfasst das FestlegenHOME
des Basisverzeichnisses des Zielbenutzers und das Aufrufen einer Anmeldeshell .quelle
Verwenden Sie
sudo -H -i
anstelle vonsudo -s
, um eine interaktive Login-Root-Shell zu erhalten:Von
man sudo
:quelle
-i
impliziert-H
.Dies hat wenig mit dem Verhalten von
sudo
und viel mit dem Unterschied zwischen einer "Login-Shell" und einer "Nicht-Login-Shell" zu tun. Die schnelle Lösung istwie man sieht mit:
Wie im sudo-Handbuch vermerkt:
quelle
HOME
oder nicht, hat alles damit zu tun, wie sudo konfiguriert ist./etc/sudoers
Bezug auf $ HOME gibt es keine Unterschiede zwischen Debian und Ubuntu.always_set_home
undset_home
in überschreibensudoers
.Eine sehr beliebte Methode, um an die Root-Shell zu gelangen, ist auch die Verwendung von:
quelle
sudo -i -H
, aber es schlug fehl mit der Installation eines globalen npm-Pakets von Git. Damitsudo su -
funktioniert es! Vielen Dank.Um das unterschiedliche Verhalten von
sudo -s
Ubuntu und Debian zu beseitigen, können Sie einensudo
Wrapper verwenden (Antwort auf Q4):quelle