Was sind die Unterschiede zwischen "su", "sudo -s", "sudo -i", "sudo su"?

133

Ich habe es bereits aus dem Handbuch gelesen, sehe aber keinen Unterschied.

su - Benutzer-ID ändern oder Superuser werden

sudo -s [command]

Die Option -s (shell) führt die in der Umgebungsvariable SHELL angegebene Shell oder die in passwd (5) angegebene Shell aus. Wenn eine                    Kommando angegeben, wird es zur Ausführung an die Shell übergeben. Andernfalls wird eine interaktive Shell ausgeführt.

sudo -i Beschreibung im Handbuch verschwinden

    
Smile.Hunter 22.10.2011, 08:11
quelle

5 Antworten

111

Der Hauptunterschied zwischen diesen Befehlen liegt in der Art, wie sie den Zugriff auf ihre Funktionen einschränken.

su (was "Ersatzbenutzer" oder "Benutzerwechsel" bedeutet) - macht genau das, es startet eine andere Shell-Instanz mit den Berechtigungen des Zielbenutzers. Um sicherzustellen, dass Sie über die entsprechenden Rechte verfügen, werden Sie nach dem Kennwort des Zielbenutzers gefragt. Um root zu werden, müssen Sie das root-Passwort kennen. Wenn auf Ihrem Computer mehrere Benutzer vorhanden sind, die Befehle als root ausführen müssen, müssen alle das root-Passwort kennen. Beachten Sie, dass es sich um dasselbe Passwort handelt. Wenn Sie Administratorberechtigungen von einem der Benutzer widerrufen müssen, müssen Sie das root-Passwort ändern und es nur den Personen mitteilen, die Zugriff behalten müssen - unordentlich.

sudo (hmm ... was ist die Mnemonik? Super-User-DO?) ist völlig anders. Es verwendet eine Konfigurationsdatei (/ etc / sudoers), die auflistet, welche Benutzer über Rechte für bestimmte Aktionen verfügen (Befehle als Root ausführen usw.). Beim Aufruf werden nach dem Kennwort des Benutzers gefragt, der sie gestartet hat - um sicherzustellen, dass es sich bei der Person am Terminal tatsächlich um den gleichen "Joe" handelt, der in /etc/sudoers aufgeführt ist. Um Administratorberechtigungen einer Person zu widerrufen, müssen Sie nur die Konfigurationsdatei bearbeiten (oder den Benutzer aus einer Gruppe entfernen, die in dieser Konfiguration aufgeführt ist). Dies führt zu einer viel saubereren Verwaltung von Berechtigungen.

Infolgedessen hat root user in vielen Debian-basierten Systemen kein Kennwort festgelegt - d. h., es ist nicht möglich, sich direkt als root anzumelden.

Außerdem können mit /etc/sudoers einige zusätzliche Optionen angegeben werden, d. h. Benutzer X kann nur Programm Y ausführen.

Die häufig verwendete Kombination sudo su funktioniert folgendermaßen: Zuerst werden Sie von sudo nach Ihrem -Kennwort gefragt. Wenn Sie dazu berechtigt sind, wird der nächste Befehl (% co_de) aufgerufen %) als Superuser. Da su von su aufgerufen wird, müssen Sie das Kennwort des Zielbenutzers nicht eingeben. Mit root können Sie also eine Shell als anderen Benutzer (einschließlich root) öffnen, wenn Sie über die sudo su -Datei Superbenutzerzugriff haben.

    
Sergey 22.10.2011, 09:21
quelle
48
Mit

sudo können Sie Befehle in Ihrem eigenen Benutzerkonto mit Root-Berechtigungen ausführen. Mit su können Sie den Benutzer wechseln, sodass Sie tatsächlich als root angemeldet sind.

sudo -s führt eine Shell mit Root-Berechtigungen aus. sudo -i erfasst auch die Umgebung des Root-Benutzers.

Um die Differenz zwischen su und sudo -s zu sehen, führen Sie nach jedem von ihnen cd ~ und dann pwd aus. Im ersten Fall befinden Sie sich im Stammverzeichnis von root, da Sie root sind. Im zweiten Fall befinden Sie sich in Ihrem eigenen Basisverzeichnis, da Sie selbst über Root-Berechtigungen verfügen.

Weitere Informationen zu dieser genauen Frage finden Sie hier .

    
Mike Scott 22.10.2011 08:28
quelle
27

Diese Antwort ist ein Dupe meiner Antwort auf ein Betrogener dieser Frage , hier die kanonische Antwort, damit die Leute sie finden können!

Der Hauptunterschied zwischen sudo -i und sudo -s ist:

  • sudo -i gibt Ihnen die Root-Umgebung, d. h. Ihre ~/.bashrc wird ignoriert.
  • sudo -s gibt Ihnen die Umgebung des Benutzers an, sodass Ihr ~/.bashrc berücksichtigt wird.

Hier ist ein Beispiel. Sie können sehen, dass sich in meinem Verzeichnis lsl eine Anwendung ~/.bin/ befindet, auf die über sudo -s zugegriffen werden kann, aber nicht mit sudo -i . Beachten Sie auch, dass sich die Bash-Eingabeaufforderung mit sudo -i ändert, jedoch nicht mit sudo -s :

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Obwohl sudo -s für die Umgebung geeignet ist, mit der Sie vertraut sind, empfehle ich die Verwendung von sudo -i aus zwei Gründen:

  1. Die visuelle Erinnerung, dass Sie sich in einer "Stammsitzung" befinden.
  2. Die Root-Umgebung ist weit weniger wahrscheinlich mit Malware vergiftet, z. B. eine unberechtigte Zeile in .bashrc .
dotancohen 08.11.2014 15:07
quelle
6

su fragt nach dem Passwort des Benutzers "root".

sudo fragt nach Ihrem eigenen Passwort (und prüft auch, ob Sie Befehle als root ausführen dürfen, die über /etc/sudoers konfiguriert werden. Standardmäßig sind alle Benutzerkonten, die zur Gruppe "admin" gehören, zulässig sudo verwenden).

sudo -s startet eine Shell als root, ändert jedoch nicht Ihr Arbeitsverzeichnis. sudo -i simuliert ein Login für das Root-Konto: Ihr Arbeitsverzeichnis lautet /root , und das Root-Verzeichnis .profile usw. wird wie bei der Anmeldung angegeben.

    
Marius Gedminas 22.10.2011 21:38
quelle
2

In Ubuntu oder einem verwandten System finde ich su im traditionellen Superuser-Sinne nicht viel. sudo behandelt diesen Fall viel besser. su eignet sich jedoch hervorragend, um in einmaligen Situationen, in denen die Konfiguration von Sudoern dumm wäre, zu einem anderen Benutzer zu werden.

Wenn ich zum Beispiel mein System von einer Live-CD / USB aus repariere, werden häufig meine Festplatte und andere erforderliche Komponenten und chroot in das System eingebunden. In diesem Fall lautet mein erster Befehl im Allgemeinen:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

Auf diese Weise arbeite ich nicht als root, sondern als normaler Benutzer und verwende dann sudo entsprechend.

    
Scott Severance 26.10.2011 09:23
quelle

Tags und Links