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


Ich habe es schon aus dem Handbuch gelesen, aber ich kann den Unterschied nicht sehen.

su - Benutzer-ID ändern oder Superuser werden

sudo -s [command]

Das -s (Shell) -Option führt die Shell aus, die von der SHELL-Umgebungsvariablen angegeben wird, wenn sie festgelegt ist, oder die Shell, die in passwd (5) angegeben ist. Wenn ein                    Befehl wird angegeben, er wird zur Ausführung an die Shell übergeben. Andernfalls wird eine interaktive Shell ausgeführt.

sudo -i  Beschreibung im Handbuch verschwinden


131
2017-10-22 06:11


Ursprung


Auch nicht verwenden su user sich von nicht vertrauenswürdigen Shells anzumelden, aber su - user. Sehen unix.stackexchange.com/q/7013/8250 - Lekensteyn
@Lekensteyn wow, tolles Beispiel. Danke für die LOL :) - törzsmókus
Erinnere dich immer an das alte Gebot: Du sollst den Namen der Wurzel nicht umsonst beanspruchen! - törzsmókus
Nicht sagen sudo -i ist schlecht, aber du kannst es mit Sicherheit verpatzen - Kolob Canyon
Nah-Duplikat: askubuntu.com/questions/376199/ ... - Reinier Post


Antworten:


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

su  (was "Benutzer ersetzen" oder "Benutzer wechseln" bedeutet) - tut genau das, es startet eine andere Shell-Instanz mit Privilegien des Zielbenutzers. Um sicherzustellen, dass Sie dazu berechtigt sind, werden Sie nach dem Passwort gefragt des Zielbenutzers. Um Root zu werden, müssen Sie das root-Passwort kennen. Wenn mehrere Benutzer auf Ihrem Computer Befehle als root ausführen müssen, müssen sie alle das root-Passwort kennen. Beachten Sie, dass es sich um das gleiche Passwort handelt. Wenn Sie Administratorrechte von einem der Benutzer widerrufen müssen, müssen Sie das root-Passwort ändern und es nur an diejenigen Personen weitergeben, die den Zugriff behalten müssen - unordentlich.

sudo  (hmm ... was ist die mnemonic? Super-User-DO?) ist ganz anders. Es verwendet eine Konfigurationsdatei (/ etc / sudoers), die auflistet, welche Benutzer Rechte an bestimmten Aktionen haben (Befehle als root usw. ausführen). Wenn sie aufgerufen werden, fragt sie nach das Passwort des Benutzers, der es gestartet hat  - um sicherzustellen, dass die Person am Terminal wirklich die gleiche "Joe" ist, die in aufgeführt ist /etc/sudoers. Um Admin-Privilegien einer Person zu entziehen, müssen Sie lediglich 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 Privilegien.

Als Folge davon, in vielen Debian-basierten Systemen root Der Benutzer hat kein Passwort festgelegt - d. h. es ist nicht möglich, sich direkt als root anzumelden.

Ebenfalls, /etc/sudoers ermöglicht die Angabe einiger zusätzlicher Optionen - d. h. Benutzer X kann nur Programm Y usw. ausführen

Das oft verwendete sudo su Die Kombination funktioniert wie folgt: zuerst sudo fragt dich nach Ihre Kennwort, und, wenn Sie dazu berechtigt sind, ruft das nächste Kommando auf (su) als Super-User. weil su wird aufgerufen von rootEs ist nicht erforderlich, dass Sie das Passwort des Zielbenutzers eingeben. Damit, sudo su ermöglicht es Ihnen, eine Shell als einen anderen Benutzer (einschließlich root) zu öffnen, wenn Sie Super-User-Zugriff von der /etc/sudoers Datei.


107
2017-10-22 07:21



ich habe noch nie gesehen su als "Benutzer wechseln", aber immer als Superuser; das Standardverhalten ohne den Benutzernamen eines anderen (obwohl es Sinn macht). Von Wikipedia : "Der Befehl su, der bereits 1974 als Super User [1] bezeichnet wurde, wurde auch" Substitute User "," Spoof User "oder" Set User "genannt, weil er das Konto des aktuellen Terminals ändern kann ( Fenster)." - dr jimbob
@dr jimbob: du hast Recht, aber ich finde, dass "switch user" irgendwie besser beschreibt, was es tut - obwohl es historisch für "super user" steht. Ich bin auch erfreut, dass der Wikipedia-Artikel meiner Antwort sehr ähnlich ist - ich habe den Artikel nie zuvor gesehen :) - Sergey
Die offizielle Bedeutung von "su" ist "Ersatzbenutzer". Siehe: "Man su". - Angel O'Sphere
@ AngelO'Sphere: Interessanterweise erwähnt Ubuntus Manpage gar nicht "substitutive". Die Manpage auf gnu.org (gnu.org/software/coreutils/manual/html_node/su-invocation.html) sagt tatsächlich "su: Führe einen Befehl mit Ersatzbenutzer und Gruppen-ID aus". Ich denke, gnu.org ist eine kanonische Quelle :) - Sergey
@ Serqey gut, Linux ist nicht unix: D vielleicht ist das kleine Wort verloren gegangen. Habe momentan keinen Solaris- oder SunOS-Rechner zur Hand, aber später schaue ich auf meinem Mac nach. Soweit ich weiß (also vor etwa 25 Jahren) war es immer "Ersatzbenutzer". - Angel O'Sphere


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

sudo -s Führt eine Shell mit root-Rechten aus. sudo -i Erwirbt auch die Umgebung des Root-Benutzers.

Um den Unterschied zu sehen su und sudo -s, machen cd ~ und dann pwd nach jedem von ihnen. Im ersten Fall befinden Sie sich im Stammverzeichnis von root, da Sie root sind. Im zweiten Fall befinden Sie sich in Ihrem eigenen Home-Verzeichnis, da Sie selbst Root-Rechte besitzen.

Es gibt mehr Diskussion über diese genaue Frage Hier.


48
2017-10-22 06:28



"Du bist selbst mit Root-Rechten" ist nicht das, was tatsächlich passiert :) Eigentlich ist es nicht möglich, "dich selbst mit root-Rechten" zu haben - entweder bist du root oder du bist du selbst. Versuche zu tippen Wer bin ich in beiden Fällen. Die Tatsache, dass cd ~ Die Ergebnisse sind anders ist ein Ergebnis von sudo -s $ HOME-Umgebungsvariable nicht festlegen. - Sergey
@Sergey, whoami, es heißt 'root', weil du den 'whoami' Cmd ausführst, als ob du es sudoedest, also scheinst du (für die Dauer dieses Befehls) der root Benutzer zu sein, aber du hast vielleicht noch nicht voll root-Zugriff gemäß der sudoers-Datei. - Octopus
@ Octopus: Was ich sagen wollte, ist, dass in Unix ein Prozess nur eine UID haben kann und dass die UID die Berechtigungen des Prozesses bestimmt. Sie können nicht "sich selbst mit root-Rechten" sein, ein Programm läuft entweder mit Ihrer UID oder mit der UID (0) von root. - Sergey
In Bezug auf "Sie haben möglicherweise noch keinen vollständigen Root-Zugriff gemäß der Sudoers-Datei": der sudoers Datei steuert, wer welchen Befehl als einen anderen Benutzer ausführen kann, aber das passiert, bevor der Befehl ausgeführt wird. Sobald Sie jedoch einen Prozess als root starten konnten - der laufende Prozess hat die UID der Root und hat vollen Zugriff auf das System, es gibt keine Möglichkeit, dies durch sudo zu beschränken. Auch hier bist du entweder du selbst oder root, es gibt keine "Half-n-half". Also, wenn sudoers Datei ermöglicht es Ihnen, Shell als root auszuführen - Berechtigungen in dieser Shell wären von einer "normalen" root-Shell nicht zu unterscheiden. - Sergey


Diese Antwort ist ein Betrüger meiner Antwort auf ein Betrüger dieser Fragesetzen Sie hier auf 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 ~/.bashrc wird ignoriert.
  • sudo -s gibt Ihnen die Umgebung des Benutzers, also Ihre ~/.bashrc wird respektiert.

Hier ist ein Beispiel, Sie können sehen, dass ich eine Anwendung habe lsl in meinem ~/.bin/ Verzeichnis, das über erreichbar ist sudo -s aber nicht zugänglich mit sudo -i. Beachten Sie auch, dass sich die Bash-Eingabeaufforderung wie mit ändert sudo -i aber 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 ist praktisch, um Ihnen die Umgebung zu geben, die Sie kennen, Ich empfehle die Verwendung von sudo -i aus zwei Gründen:

  1. Die visuelle Erinnerung, dass Sie sich in einer 'root'-Sitzung befinden.
  2. Die root-Umgebung wird weit weniger wahrscheinlich mit Malware vergiftet, z .bashrc.

27
2017-11-08 14:07



Mir ist aufgefallen, dass sudo -s anscheinend nicht / etc / profile verarbeitet oder irgendetwas, was ich in /etc/profile.d/ habe. - meffect


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, was über konfiguriert ist /etc/sudoers - Standardmäßig dürfen alle Benutzerkonten, die zur Gruppe "admin" gehören, sudo verwenden).

sudo -s Startet eine Shell als root, ändert aber nicht Ihr Arbeitsverzeichnis. sudo -i simuliert eine Anmeldung im root-Konto: Ihr Arbeitsverzeichnis wird sein /rootund Wurzel .profile etc. wird wie bei der Anmeldung bezogen.


6
2017-10-22 19:38



Um die Antwort vollständiger zu machen: sudo -s ist fast gleich su ($ HOME ist anders) und sudo -i entspricht su - - DJCrashdummy


In Ubuntu oder einem verwandten System finde ich nicht viel Gebrauch dafür su im traditionellen Super-User-Sinn. sudo behandelt diesen Fall viel besser. Jedoch, su Es ist großartig, in einmaligen Situationen ein anderer Benutzer zu werden, bei dem das Konfigurieren von sudoers albern wäre.

Zum Beispiel, wenn ich mein System von einer Live-CD / USB repariere, werde ich oft meine Festplatte und andere notwendige Sachen montieren und chroot in das System. In einem solchen Fall ist mein erstes Kommando 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 mein normaler Benutzer, den ich dann nutze sudo wie angemessen.


2
2017-10-26 07:23