Was ist der Unterschied zwischen den folgenden Befehlen:
su
sudo -s
sudo -i
sudo bash
Ich weiß, dass su
ich das root-Passwort kennen muss, und dass sudo
ich in der sudoers
Datei sein muss, aber einmal ausgeführt, was ist der Unterschied?
Ich weiß, dass es einen Unterschied zwischen su
und gibt, sudo -s
weil sich mein Basisverzeichnis /root
nach der Ausführung befindet su
, aber mein Basisverzeichnis noch /home/myname
danach ist sudo -s
. Aber ich vermute, dass dies nur ein Symptom für einen zugrunde liegenden Unterschied ist, den ich vermisse.
sudo su -
diese Weise benötigen Sie kein root-Passwort und stellen-
sicher, dass das Home-Verzeichnis richtig eingestellt ist.Antworten:
Mit
su
werden Sie ein anderer Benutzer - standardmäßig root, möglicherweise jedoch ein anderer Benutzer. Wenn Sie sagensu -
, wird Ihre Umgebung auch durch die Anmeldeumgebung dieses Benutzers ersetzt, sodass nicht zu unterscheiden ist, was Sie sehen, wenn Sie sich als dieser Benutzer anmelden. Auf keinen Fall kann das Systemsu
einem anderen Benutzer anhand der Aktionen dieses Benutzers beim Anmelden mitteilen, was Sie tun, während er sich anmeldet.Ganz anders sieht es aus mit
sudo
:Befehle, die Sie
sudo
ausführen, werden als Zielbenutzer ausgeführt - standardmäßig root, aber änderbar mit-u
-, aber es protokolliert die Befehle, die Sie ausführen, und markiert sie mit Ihrem Benutzernamen, damit die Schuld später 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. Mitsu
, es ist alles oder nichts.Diese Funktion wird normalerweise zum Definieren von Rollen verwendet. Sie können beispielsweise eine "Backups" -Gruppe definieren, die ausgeführt werden darf
dump
und dietar
jeweils Root-Zugriff benötigt, um die Systemfestplatte ordnungsgemäß zu sichern.Ich erwähne dies hier, weil es bedeutet, dass Sie jemandem
sudo
Privilegien geben können, ohne ihmsudo -s
oder seinensudo bash
Fähigkeiten zu verleihen . Sie haben nur die Berechtigungen, die sie für ihre Arbeit benötigen, währendsu
sie über das gesamte System verfügen. Dabei muss man allerdings vorsichtig sein: Wenn man jemandem die Möglichkeit gibtsudo vi
, beispielsweise zu sagen ,vi
dass er die gleiche Kraft wie mit ausschütten und effektiv haben kannsudo -s
.Isoliert die
sudo
Berechtigung zwischen mehreren Sudoern, da das Passwort des Sudoers anstelle des Root-Passworts verwendet wird .Dies behebt ein administratives Problem
su
, bei dem bei einer Änderung des Root-Passworts alle Personen informiert werden mussten, die es wissen mussten, um es zu verwendensu
.sudo
Ermöglicht es den Sudoern, ihre Passwörter unabhängig zu ändern. Tatsächlich ist es üblich, das Konto des Root-Benutzers auf einem System mit einem Kennwort zu sperren, umsudo
zu erzwingen, dass alle Sysadmin-Aufgaben über ausgeführt werdensudo
. In einer großen Organisation mit vielen vertrauenswürdigen Sudoern bedeutet dies, dass Sie beim Verlassen eines der Sysadmins das Root-Kennwort nicht ändern und an die verbleibenden Administratoren weitergeben müssen.Der Hauptunterschied zwischen
sudo bash
undsudo -s
besteht darin, dass-s
es kürzer ist und Sie auf verschiedene Arten Befehle übergeben können, die in der Standard-Shell Ihres Benutzers ausgeführt werden sollen:Sie können sagen,
sudo -s some-command
wassome-command
unter Ihrer Shell läuft . Es ist im Grunde eine Abkürzung fürsudo $SHELL -c some-command
.Sie können die Befehle stattdessen wie folgt an die Standardeingabe der Shell übergeben
sudo -s < my-shell-script
. Sie können dies mit einem heredoc verwenden , um mehrere Befehle an einen einzigensudo
Aufruf zu senden , ohne dass Siesudo
wiederholt tippen müssen .Beide Verhaltensweisen sind optional. Weitaus häufiger geben Sie
-s
allein, sodass die Shell Ihres Benutzers nur interaktiv ausgeführt wird. In diesem Modus unterscheidet es sich davon,sudo bash
dass möglicherweise eine andere Shell ausgeführt wird alsbash
, da diese zuerst in derSHELL
Umgebungsvariablen und dann, wenn diese nicht festgelegt ist, in der Login-Shell-Einstellung Ihres Benutzers (normalerweise in) angezeigt wird/etc/passwd
.Die Shell, die von ausgeführt wird,
sudo -s
erbt Ihre aktuelle Benutzerumgebung. Wenn Sie tatsächlich eine saubere Umgebung wünschen, wie Sie sie direkt nach der Anmeldung erhalten, möchten Sie stattdessensudo -i
eine relativ neue Erweiterung vonsudo
. Grob gesagt,sudo -i
ist es ,sudo -s
wiesu -
istsu
: es alle , aber ein paar wichtige Umgebungsvariablen setzt und sendet Sie zurück zu Ihrem Home - Verzeichnis des Benutzers. Wenn Sie ihm nicht auch Befehle zur Ausführung unter dieser Shell über die Standardeingabe oder gebensudo -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
sudo -i
wesentlich sicherer alssudo -s
. Warum? Denn wenn jemand Ihre Umgebung zuvor ändern kannsudo -s
, kann dies dazu führen, dass unbeabsichtigte Befehle ausgeführt werden. Der naheliegendste Fall ist das ÄndernSHELL
, aber es kann auch weniger direkt vorkommen, z. B. über,PAGER
wenn Sie sagen,man foo
während Sie unter sindsudo -s
.Sie könnten sagen: "Wenn sie etwas modifizieren können
PAGER
, könnenPATH
sie etwas modifizieren und dann einfach ein bösessudo
Programm ersetzen ", aber jemand, der paranoid genug ist, kann dies sagen/usr/bin/sudo /bin/bash
, um diese Falle zu umgehen. Sie sind wahrscheinlich nicht so paranoid, dass Sie auch die Fallen in allen anderen anfälligen Umgebungsvariablen meiden . Haben SieEDITOR
zum Beispiel auch daran gedacht, dies zu überprüfen , bevor Sie einen VCS- Befehl ausgeführt haben? Alsosudo -i
.Da
sudo -i
auch das Arbeitsverzeichnis zu Ihrem Benutzer-Home - Verzeichnis ändert, können Sie immer noch verwendensudo -s
für Situationen , in denen Sie wissen , dass Sie im gleichen Verzeichnis bleiben wollen wurden Siecd
‚d in , wenn Sie läuftsudo
. Es ist immer noch sicherersudo -i
undcd
zurück, wo Sie waren, though.quelle
vi
, Art:sh
und drücken Sie die Eingabetaste. Jetzt befinden Sie sich in einer Sub-Shell mit allen Berechtigungen desvi
Prozesses, der diese Shell ausgelöst hat. Wennvi
mit Root-Rechten ausgeführt wird, wird dies auch für die Shell gelten. Oder Sie können etwas anderes als eine Shell über ausführen:!cmd
, die Ausgabe eines Befehls in den Bearbeitungspuffer über lesen:r !cmd
usw. Wenn alle diese gesperrt sind, sindMakefile
Ziele Shell-Skripte, und Vim verfügt über den:make
Befehl, mit dem Sie effektiv eine beliebige Shell ausführen können Skripte aus dem Editor. Die Möglichkeiten für Unfug sind viel zu groß für dieses Kommentarfeld./usr/bin/sudo
PATH
nicht das einzige Problem.Aus einem Ubuntuforums-Post, den ich vor einiger Zeit gemacht habe:
Betrachten Sie das folgende Experiment:
Hier sind die Unterschiede, die ich gefunden habe:
Mit
sudo -s
:Mit
sudo su
:Beachten Sie den Unterschied in
$HOME
. Root zu sein und$HOME
zu Hause zu sein, kann zu Problemen führen. Wenn Sie beispielsweise eine grafische App ausführen, kann der normale Benutzer~/.Xauthority
von root überschrieben werden. Dies führt später zu normalen Benutzerproblemen, z. B. dass bestimmte grafische Apps nicht über cron ausgeführt werden können.Zusammenfassen:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
wahrscheinlich von gesetzt/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Die unterste Zeile ist
sudo -i
der richtige Befehl, der ausgeführt werden soll, wenn Sie eine Root-Shell benötigen, die von der Benutzerumgebung nicht beeinträchtigt wird.quelle
sudo
(in/etc/sudoers
und verwandten Dateien) ab. Konfigurationseinstellungen wie zum Beispielalways_set_home
,env_reset
,env_keep
,env_check
undenv_reset
, und diese können in Abhängigkeit von dem Benutzer und dem Befehl. Siehe den Abschnitt ' Befehlsumgebung ' und SUDOERS-OPTIONEN auf der Hilfeseite sudoers (5) .sudo -Hs
wenn ich eine Umgebung ohne Beeinträchtigung durch meine Einstellungen haben möchte, da ich zsh und alle Anwendungskonten verwende, die ich möglicherweise auf bash umstelle. Dies lässt eine bestimmte Anzahl von Umgebungsvariablen ungestört passieren, aber ich finde normalerweise, dass diejenigen, die wichtig sind, von /etc/profile.d/* überschrieben werden.su
Mit ( s witch u ser oder s ubstitute u ser) können Sie den Benutzer wechseln.su
Im Grunde startet eine andere Shell-Instanz mit den Rechten des vorgesehenen Benutzers. Standardmäßig werden Sie zumroot
Benutzer gewechselt. Wenn Sie einen bestimmten Benutzer wechseln möchten, müssen Sie den Benutzer wie folgt übergeben:su -
bedeutet, dass Umgebungsvariablen auf root zurückgesetzt werden undsu
bedeutet, dass Umgebungsvariablen als alter Benutzer verwendet werden.Zum Beispiel: Roots Home-Verzeichnis, wenn Sie es verwenden,
su -
oder altes Benutzer-Home-Verzeichnis, wenn Sie es verwendensu
.sudo ( s uper u ser do ) ist ein Befehlszeilenprogramm, mit dem Benutzer Programme mit den Sicherheitsberechtigungen eines anderen Benutzers ausführen können. Standardmäßig ist es Superuser, d
root
. h . Es wird eine Konfigurationsdatei verwendet, in/etc/sudoers
der aufgeführt ist, welche Benutzer Rechte für bestimmte Aktionen habensudo sollte als / ˈsuːduː / gelesen werden . syntax
sudo command
ie s witch u ser und mache diesen befehl.su
ist äquivalent zusudo -i
und simuliert ein Login in das Root-Konto. Ihr Arbeitsverzeichnis/root
ist und es liest root.profile
usw. Die Eingabeaufforderung ändert sich von $ zu # und zeigt an, dass Sie root-Zugriff haben.sudo -s
Startet eine Shell als root, ändert aber nicht Ihr Arbeitsverzeichnis.sudo bash
wobash
ist Befehl auszuführen mitsudo
. Dieser Befehl wirdbash
als Superuser ausgeführt.sudo
kann alles protokolliert werden, was jemand macht.sudo
verhindert, dass ein Benutzer das root-Passwort kennen muss.sudo
wir einschränken, welche Befehle ausgeführt werden dürfen.quelle