'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - wann ist es wichtig, welche verwendet wird, oder spielt es überhaupt eine Rolle?

193

Wenn ich etwas mache, bei dem root Dutzende Male hintereinander eingegeben werden muss, wechsle ich meine Sitzung lieber in eine root-Sitzung. In den verschiedenen Anleitungen und Anweisungen, die ich im Internet verwendet habe, sehe ich sudo su , sudo su - , sudo -i und sudo /bin/bash , die zum Öffnen einer Root-Sitzung verwendet werden, aber ich bin mir nicht klar über den Unterschied zwischen diesen und wenn oder wenn dieser Unterschied zählt.

Kann jemand das für mich klären?

    
Paul 13.11.2013, 00:30
quelle

1 Antwort

252

Um dies zu erklären, müssen Sie wissen, was die Programme tun:

su - Der Befehl su wird verwendet, um zu einem anderen Benutzer zu wechseln ( s witch u ser), aber Sie können auch zum Root-Benutzer wechseln Aufruf des Befehls ohne Parameter. su fordert Sie auf, das Passwort des Benutzers zu ändern, nachdem Sie das Passwort eingegeben haben, das Sie in die Umgebung des Benutzers gewechselt haben.

sudo - sudo soll einen einzelnen Befehl mit root-Rechten ausführen. Im Gegensatz zu su werden Sie jedoch nach dem Passwort des aktuellen Benutzers gefragt. Dieser Benutzer muss sich in der sudoers-Datei (oder einer Gruppe, die sich in der sudoers-Datei befindet) befinden. Standardmäßig "merkt" sich Ubuntu Ihr Passwort 15 Minuten lang, so dass Sie nicht jedes Mal Ihr Passwort eingeben müssen.

bash - Eine Textschnittstelle zur Interaktion mit dem Computer. Es ist wichtig, den Unterschied zwischen Login-, Nicht-Login-, interaktiven und nicht-interaktiven Shells zu verstehen:

  • login shell: Eine Login-Shell meldet Sie als spezifizierten Benutzer im System an, hierfür ist ein Benutzername und ein Passwort erforderlich. Wenn Sie ctrl + alt + F1 drücken, um sich an einem virtuellen Terminal anzumelden, erhalten Sie nach erfolgreicher Anmeldung eine Login-Shell.
  • Nicht-Login-Shell: Eine Shell, die ohne Anmeldung ausgeführt wird, ist ein aktuell angemeldeter Benutzer. Wenn du ein Grafikterminal in Gnome öffnest, ist es eine Nicht-Login-Shell.
  • interactive shell: Eine Shell (Login oder Nicht-Login), in der Sie Befehle interaktiv eingeben oder unterbrechen können. Zum Beispiel ein Gnome-Terminal.
  • Nicht-interaktive Shell: Eine (Sub-) Shell, die wahrscheinlich von einem automatisierten Prozess ausgeführt wird. Sie werden weder Eingabe noch Ausgabe sehen.

sudo su Ruft sudo mit dem Befehl su auf. Bash wird als interaktive Nicht-Login-Shell bezeichnet. Also führt bash nur .bashrc aus. Sie sehen, dass Sie nach dem Wechsel zu root immer noch im selben Verzeichnis sind:

user@host:~$ sudo su
root@host:/home/user#

sudo su - Diesmal ist es eine Login-Shell, also werden /etc/profile , .profile und .bashrc ausgeführt und Sie befinden sich im Stammverzeichnis von root mit der Umgebung von root.

sudo -i Das ist fast dasselbe wie sudo su - Die Option -i (simulate initial login) führt die Shell aus, die im Passwortdatenbankeintrag des Zielbenutzers als Login-Shell angegeben ist. Dies bedeutet, dass anmeldespezifische Ressourcendateien wie .profile , .bashrc oder .login von der Shell gelesen und ausgeführt werden.

sudo /bin/bash Dies bedeutet, dass Sie sudo mit dem Befehl /bin/bash aufrufen. /bin/bash wird als Nicht-Login-Shell gestartet, so dass alle dot-Dateien nicht ausgeführt werden, aber bash selbst liest .bashrc des aufrufenden Benutzers. Ihre Umgebung bleibt gleich. Dein Zuhause wird nicht zu Hause sein. Sie sind also root, aber in der Umgebung des aufrufenden Benutzers.

sudo -s liest die Variable $SHELL und führt den Inhalt aus. Wenn $SHELL /bin/bash enthält, wird sudo /bin/bash aufgerufen (siehe oben).

Überprüfen Sie: Um zu überprüfen, ob Sie sich in einer Login-Shell befinden oder nicht (funktioniert nur in bash, weil shopt ein eingebauter Befehl ist):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
chaos 13.11.2013 10:43
quelle

Tags und Links