Was ist der Unterschied zwischen den folgenden Befehlen:
su
sudo -s
sudo -i
sudo bash
Ich weiß, dass su
ich dafür das Root-Passwort kennen muss und dass sudo
ich in der Datei sein muss sudoers
, aber was macht der Unterschied, wenn es einmal ausgeführt wird?
Ich weiß, dass es einen Unterschied zwischen su
und gibt sudo -s
, weil mein Home-Verzeichnis /root
hinter dem Ausführen von steht su
, aber mein Home-Verzeichnis steht immer noch /home/myname
hinter sudo -s
. Ich vermute jedoch, dass dies nur ein Symptom eines zugrunde liegenden Unterschieds ist, den ich übersehe.
Antwort1
Mit su
dirwerdenein anderer Benutzer – standardmäßig root, aber möglicherweise auch ein anderer Benutzer. Wenn Sie sagen su -
, wird Ihre Umgebung auch durch die Anmeldeumgebung dieses Benutzers ersetzt, sodass das, was Sie sehen, nicht von der Anmeldung als dieser Benutzer zu unterscheiden ist. Das System kann nicht unterscheiden, was Sie tun, während Sie su
mit einem anderen Benutzer verbunden sind, von den Aktionen dieses Benutzers, wenn er sich anmeldet.
Ganz anders verhält es sich bei sudo
:
Befehle, die Sie ausführen
sudo
ausführenals Zielbenutzer (standardmäßig root, kann aber geändert werden-u
) –, aber es protokolliert die Befehle, die Sie darüber ausführen, und kennzeichnet sie mit Ihrem Benutzernamen, sodass im Nachhinein die Schuld zugewiesen werden kann. :)sudo
ist sehr flexibel. Sie können beispielsweise die Befehle einschränken, die ein bestimmter Benutzer oder eine bestimmte Benutzergruppe ausführen darf. Beisu
gilt alles oder nichts.Diese Funktion wird normalerweise zum Definieren von Rollen verwendet. Sie können beispielsweise eine Gruppe „Backups“ definieren, die ausgeführt werden darf
dump
undtar
, wobei jedes davon Root-Zugriff benötigt, um die Systemfestplatte ordnungsgemäß zu sichern.Ich erwähne dies hier, weil es bedeutet, dass Sie jemandem Privilegien erteilen können,
sudo
ohne ihmsudo -s
odersudo bash
Fähigkeiten zu geben. Sie haben nur die Berechtigungen, die sie für ihre Arbeit benötigen, währendsu
sie mit das gesamte System steuern können. Sie müssen dabei jedoch vorsichtig sein: Wenn Sie jemandemsudo vi
beispielsweise die Möglichkeit geben, zu sagen, dass er ausgeben kannvi
und effektiv die gleiche Macht hat wie mitsudo -s
.Da es das Sudoer-Passwort anstelle des Root-Passworts verwendet,
sudo
werden die Berechtigungen zwischen mehreren Sudoern isoliert.Dies löst ein Verwaltungsproblem mit
su
, nämlich dass bei einer Änderung des Root-Passworts alle, die es kennen mussten,su
informiert werden mussten.sudo
ermöglicht die unabhängige Änderung der Passwörter der Sudo-Benutzer. Tatsächlich ist es auf einem System mit üblich, das Konto des Root-Benutzers mit einem Passwort zu sperren, umsudo
zu erzwingen, dass alle Sysadmin-Aufgaben über ausgeführt werdensudo
. In einer großen Organisation mit vielen vertrauenswürdigen Sudo-Benutzern bedeutet dies, dass Sie das Root-Passwort nicht ändern und an die verbleibenden Admins weitergeben müssen, wenn einer der Sysadmins das Unternehmen verlässt.
Die Hauptunterschiede zwischen sudo bash
und sudo -s
sind:
-s
ist kürzer alsbash
Sie können angeben,
sudo -s some-command
dass es unter Ihrer Standard-Shell ausgeführt werden sollsome-command
, jedoch mit Superuser-Berechtigungen. Dies ist im Grunde eine Abkürzung fürsudo $SHELL -c some-command
.Sie können die Befehle auch an die Standardeingabe der Shell übergeben, z. B.
sudo -s < my-shell-script
. Sie können dies mit einemhierdocum mehrere Befehle an einen einzigensudo
Anruf zu senden und so die wiederholte Eingabe zu vermeidensudo
.Auch ohne diese zusätzlichen Befehlsargumente
sudo -s
unterscheidet sich immer noch vonsudo bash
darin, dass es möglicherweise eine andere Shell ausführt alsbash
, da es zuerst in derSHELL
Umgebungsvariablen und dann (wenn diese nicht festgelegt ist) in den Shell-Anmeldeeinstellungen Ihres Benutzers nachsieht, normalerweise in/etc/passwd
.
Die von ausgeführte Shell sudo -s
übernimmt Ihre aktuelle Benutzerumgebung. Wenn Sie tatsächlich eine saubere Umgebung möchten, wie Sie sie direkt nach der Anmeldung erhalten, benötigen Sie stattdessen sudo -i
, eine relativ neue Ergänzung zu sudo
. Grob gesagt sudo -i
verhält sich zu sudo -s
wie su -
zu su
: Es setzt alle Umgebungsvariablen bis auf ein paar wichtige zurück und schickt Sie zurück in das Home-Verzeichnis Ihres Benutzers. Wenn Sie ihm nicht auch Befehle zum Ausführen unter dieser Shell über die Standardeingabe oder geben sudo -i some-command
, wird diese Shell als interaktive Anmeldeshell ausgeführt, sodass die Shell-Startskripte Ihres Benutzers (z. B. .bash_profile
) erneut ausgeführt werden.
All dies macht es sudo -i
wesentlich sicherer als sudo -s
. Warum? Denn wenn jemand Ihre Umgebung vor ändern kann sudo -s
, könnte er die Ausführung unbeabsichtigter Befehle verursachen. Der offensichtlichste Fall ist die Änderung von SHELL
, aber es kann auch weniger direkt passieren, z. B. über , wenn Sie während unter PAGER
sagen .man foo
sudo -s
Sie könnten sagen: „Wenn sie ändern können PAGER
, können sie ändern und dann einfach ein böses Programm PATH
ersetzen “, aber jemand, der paranoid genug ist, kann sagen , dass er diese Falle vermeiden kann. Sie sind wahrscheinlich nicht so paranoid, dass Sie auch die Fallen in allen anderen vermeiden.sudo
/usr/bin/sudo /bin/bash
andereanfällige Umgebungsvariablen. Haben Sie auch daran gedacht, zu überprüfen EDITOR
, zum Beispiel, bevor SieVCSBefehl? Also sudo -i
.
Da sudo -i
Ihr Arbeitsverzeichnis auch in das Stammverzeichnis Ihres Benutzers geändert wird, möchten Sie möglicherweise trotzdem verwenden, sudo -s
wenn Sie wissen, dass Sie in demselben Verzeichnis bleiben möchten, cd
in das Sie beim Ausführen gewechselt sind sudo
. Es ist jedoch immer noch sicherer, dorthin sudo -i
zurückzukehren cd
, wo Sie waren.
Eine andere Variante von all dem, die Sie manchmal sehen, ist sudo su
, was ungefähr gleichwertig ist mit sudo -s
. Ebenso sudo su -
ist funktional recht nah an sudo -i
. Da sudo
und su
konkurrierende Befehle sind, ist es ein wenig seltsam, sie auf diese Weise zu paaren, daher empfehle ich, dass Sie stattdessen die Flags verwenden sudo
.
Antwort2
Von einemUbuntu-Forums-BeitragIch habe vor einiger Zeit Folgendes gemacht:
Betrachten Sie das folgende Experiment:
applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s
Hier sind die Unterschiede, die ich gefunden habe:
Mit sudo -s
:
HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc
Mit sudo su
:
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc
Beachten Sie den Unterschied in $HOME
. Wenn Sie Root sind und $HOME
auf das Home des normalen Benutzers eingestellt sind, kann dies zu Problemen führen. Wenn Sie beispielsweise eine grafische Anwendung ausführen, ~/.Xauthority
kann das Home des normalen Benutzers durch Root überschrieben werden. Dies führt später zu Problemen für den normalen Benutzer, z. B. dass er bestimmte grafische Anwendungen nicht über Cron ausführen kann.
Zusammenfassen:
corrupted by user's
HOME=/root uses root's PATH env vars
sudo -i Y Y[2] N
sudo -s N Y[2] Y
sudo bash N Y[2] Y
sudo su Y N[1] Y
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
wahrscheinlich gesetzt durch/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Unterm Strich ist sudo -i
dies der richtige Befehl, den Sie ausführen sollten, wenn Sie eine Root-Shell wünschen, die nicht durch die Benutzerumgebung beeinträchtigt wird.
Antwort3
su
(SHexeSieser oderSErsatzSieser) ermöglicht Ihnen den Benutzerwechsel. su
Es startet grundsätzlich eine weitere Shell-Instanz mit den Berechtigungen des gewünschten Benutzers. Standardmäßig wechselt es Sie zum root
Benutzer. Wenn wir einen bestimmten Benutzer wechseln möchten, müssen wir den Benutzer wie folgt übergeben:
$ su bob # switches to bob (requires bob's password)
su -
bedeutet, dass die Umgebungsvariablen auf Root zurückgesetzt werden und su
dass die Umgebungsvariablen dem alten Benutzer entsprechen.
Beispiel: das Stammverzeichnis des Roots, wenn Sie verwenden, su -
oder das alte Stammverzeichnis des Benutzers, wenn Sie verwenden su
.
sudo (SobenSieserTun) ist ein Befehlszeilenprogramm, das es Benutzern ermöglicht, Programme mit den Sicherheitsberechtigungen eines anderen Benutzers auszuführen, standardmäßig ist dies Superuser, d. h. root
. Es verwendet eine Konfigurationsdatei /etc/sudoers
, die auflistet, welche Benutzer Rechte für bestimmte Aktionen haben
sudo sollte gelesen werden als/ˈsuːduː/. Syntax sudo command
, dhSHexeSieser undTundieser Befehl.
su
ist gleichbedeutend mitsudo -i
einer Anmeldung beim Root-Konto und simuliert diese. Ihr Arbeitsverzeichnis ist/root
, und es liest das von Root.profile
usw. Die Eingabeaufforderung ändert sich von $ zu #, was bedeutet, dass Sie Root-Zugriff haben.sudo -s
startet eine Shell als Root, ändert aber nicht Ihr Arbeitsverzeichnis.sudo bash
wobeibash
der auszuführende Befehl istsudo
. Dieser Befehl wirdbash
als Superuser ausgeführt.- Mithilfe von
sudo
kann alles protokolliert werden, was jemand tut. - Durch die Verwendung
sudo
wird verhindert, dass ein Benutzer das Root-Passwort kennen muss. - Mithilfe von
sudo
können wir die Befehle einschränken, die ausgeführt werden dürfen.