it-swarm.com.de

Warum benötigt der Sudo-Befehl nicht das Root-Passwort?

Ich benutze Linux jetzt schon eine Weile und wann immer ich Sudo tippte, dachte ich, ich würde für einen Befehl zum Root-Benutzer wechseln.

Anscheinend ist dies nicht wahr, da ich nur das Passwort meines Benutzerkontos benötige. Ich vermute, da ich nicht mit mehreren Benutzern gearbeitet habe, habe ich dies in der realen Welt nicht wirklich bemerkt.

Ich bin mir nicht sicher, wie Ubuntu mein erstes Konto eingerichtet hat. Gibt es einen Root-Benutzer? Bin ich root? Ich vermute, ich habe gerade bei der Installation einen neuen Benutzer erstellt, aber es hat mir Root-Rechte gegeben? Nur ein bisschen verwirrt hier ...

Warum darf ich Root-Befehle mit dem Passwort meines Benutzers ausführen?

48
EGHDK

Im Detail funktioniert es folgendermaßen:

  1. /usr/bin/Sudo Die ausführbare Datei hat Setuid-Bit gesetzt. Selbst wenn sie von einem anderen Benutzer ausgeführt wird, wird sie mit der Benutzer-ID des Dateibesitzers ausgeführt (in diesem Fall root).

  2. Sudo checkt ein /etc/sudoers Datei, welche Berechtigungen Sie haben und ob Sie den von Ihnen aufgerufenen Befehl ausführen dürfen. Einfach gesagt, /etc/sudoers ist eine Datei, die definiert, welche Benutzer welche Befehle mit dem Mechanismus Sudo ausführen können.

    So sieht diese Datei auf meinem Ubuntu aus:

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    
    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL
    
    # Allow members of group Sudo to execute any command
    %Sudo   ALL=(ALL:ALL) ALL
    

    Die dritte Zeile interessiert Sie vermutlich. Damit kann jeder in der "Sudo" -Gruppe einen beliebigen Befehl als Benutzer ausführen.

    Wenn Ubuntu während der Installation das erste Konto einrichtet, fügt es dieses Konto der Gruppe "Sudo" hinzu. Mit dem Befehl group können Sie überprüfen, zu welchen Gruppen welche Benutzer gehören.

  3. Sudo fragt Sie nach einem Passwort. In Bezug auf die Tatsache, dass das Passwort des Benutzers benötigt wird, nicht das des Roots, ist dies ein Auszug aus sudoers manual :

    Authentifizierung und Protokollierung

    Die Sicherheitsrichtlinie von sudoers erfordert, dass sich die meisten Benutzer authentifizieren, bevor sie Sudo verwenden können. Ein Kennwort ist nicht erforderlich, wenn der aufrufende Benutzer root ist, wenn der Zielbenutzer mit dem aufrufenden Benutzer identisch ist oder wenn die Richtlinie die Authentifizierung für den Benutzer oder Befehl deaktiviert hat. Im Gegensatz zu su (1) überprüft sudoers, wenn eine Authentifizierung erforderlich ist, die Anmeldeinformationen des aufrufenden Benutzers und nicht die Anmeldeinformationen des Zielbenutzers (oder des Roots). Dies kann geändert werden über die später beschriebenen Flags rootpw, targetpw und runaspw.

    Tatsächlich benötigt Sudo jedoch für nichts Ihr Benutzerkennwort. Es wird darum gebeten, nur um sicherzustellen, dass Sie wirklich Sie sind, und um Sie zu warnen (oder zu stoppen), bevor Sie einen potenziell gefährlichen Befehl aufrufen. Wenn Sie die Passwortabfrage deaktivieren möchten, ändern Sie den sudoers-Eintrag in:

    %Sudo   ALL=(ALL:ALL) NOPASSWD: ALL
    
  4. Nach der Authentifizierung erzeugt Sudo einen untergeordneten Prozess, der den aufgerufenen Befehl ausführt. Das Kind erbt die Root-Benutzer-ID von seinem Elternteil - dem Sudo -Prozess.


Beantworten Sie Ihre Fragen also genau:

Ich dachte, ich würde für einen Befehl zum Root-Benutzer wechseln.

Du hattest Recht. Jeder Befehl mit vorangestelltem Sudo wird mit der Root-Benutzer-ID ausgeführt.

Gibt es einen Root-Benutzer?

Ja, es gibt ein Root-Benutzerkonto, das von Ihrem Benutzerkonto getrennt ist, das während der Systeminstallation erstellt wurde. In Ubuntu dürfen Sie sich jedoch standardmäßig nicht als Root-Benutzer am interaktiven Terminal anmelden.

Bin ich root?

Nein, du bist keine Wurzel. Sie haben nur das Recht, einzelne Befehle als Root auszuführen, indem Sie den oben beschriebenen Mechanismus Sudo verwenden.

Warum darf ich Root-Befehle mit dem Passwort meines Benutzers ausführen?

Sie müssen das Kennwort des Benutzers nur aufgrund des internen Sicherheitsmechanismus Sudo eingeben. Es kann leicht ausgeschaltet werden. Sie erhalten Ihre Wurzelkräfte durch das Setuid-Bit von /usr/bin/Sudo, nicht wegen eingegebener Passwörter.

65
  • Der springende Punkt bei Sudo ist, Ihnen die Berechtigungen eines anderen zu gewähren (normalerweise root), ohne nach dem Passwort dieses anderen Kontos zu fragen (im Gegensatz zu su).

  • Sudo fragt hier nach Ihrem Passwort, um sicherzustellen, dass ein Passant Ihr entsperrtes Terminal nicht missbraucht.

  • Ubuntu und viele andere Linux- und Unix-Betriebssysteme gewähren einem bei der Installation erstellten Erstkonto das Recht, Befehle als root auszuführen.

  • Während root unter Linux noch ein Konto ist, sind direkte root -Anmeldungen zur besseren Sicherheit und Rückverfolgbarkeit standardmäßig deaktiviert.

15
jlliagre

Piotr gab eine sehr gute Erklärung, wie Sudo funktioniert. Er hat jedoch nicht wirklich motiviert warum es funktioniert so, also werde ich versuchen, das hier hinzuzufügen.

Bevor der Befehl Sudo erstellt wurde, hatten wir den Befehl su. Mit diesem Befehl kann ein Benutzer Befehle als ein anderer Benutzer ausführen, normalerweise root (wie bei Sudo ist dies der Standardzielbenutzer). Es war völlig undiskriminierend, man kann jeden Befehl ausführen. Da es von jedem Benutzer verwendet werden konnte und der Anmeldung als dieser Benutzer entsprach, mussten Sie das Kennwort des Zielbenutzers kennen.

Irgendwann wurde etwas mehr Zugriffskontrolle hinzugefügt: Um su zu verwenden, musste man Mitglied der Gruppe wheel sein. Da Sie jedoch immer noch einen Befehl ausführen konnten, war es dennoch sinnvoll, dass Sie das Kennwort kennen.

Es war jedoch nicht sehr sicher, dass Benutzer das Kennwort des anderen oder des Superusers kennen mussten. Oft möchten Sie bestimmten Benutzern nur eingeschränkten Zugriff auf ein anderes Konto gewähren (dies ist Teil eines Sicherheitskonzepts namens Prinzip der geringsten Berechtigung). Dies erschwert auch die Rechenschaftspflicht: Wenn mehrere Personen das Kennwort eines Kontos kennen und dieses Konto in einen Fehler oder Missbrauch verwickelt ist, können Sie nicht sagen, welcher von ihnen dies tatsächlich getan hat.

Also wurde Sudo erstellt. Anstatt Benutzern das Ausführen von Befehlen zu ermöglichen, enthält sie eine ausführliche Konfigurationsdatei, die in Piotrs Antwort kurz angesprochen wird und genau angibt, wer sie verwenden darf, zu welchen Benutzern sie wechseln können und welche Befehle sie ausführen dürfen. Mit dieser detaillierten Kontrolle darüber, wer was mit wem machen kann, müssen wir den Benutzern nicht mehr das Passwort des Zielkontos geben. In diesem Fall könnten sie problemlos alle Steuerelemente in der Konfigurationsdatei umgehen, indem sie sich als dieser Benutzer anmelden. Stattdessen müssen sie normalerweise nur durch Eingabe ihres eigenen Passworts nachweisen, dass sie derjenige sind, als den sie sich angemeldet haben. Dies soll verhindern, dass jemand ein Konto nutzt, wenn das Terminal unbeaufsichtigt bleibt.

Auf diese Anforderung wird für den Superuser verzichtet - dieses Konto kann fast alles mit dem System tun, ohne Sudo zu verwenden, daher wurde es als überflüssig erachtet. In der Konfigurationsdatei kann auch angegeben werden, dass Benutzer überhaupt kein Kennwort eingeben müssen. Einige Organisationen verwenden dieses Kennwort, wenn sie der Meinung sind, dass die physische Sicherheit ihrer Workstation-Umgebung ausreicht, um Missbrauch zu verhindern.

5
Barmar

Die Antwort auf Ihre Frage lautet:

Wenn Sie einen Befehl mit Sudo ausführen, führen Sie den Befehl mit erhöhte Berechtigungen aus, dh Root-Berechtigungen. Sie müssen nur Ihr normales Benutzerkennwort eingeben, da Sie (der Benutzer) zur sudoers-Datei hinzugefügt wurden, die Ihnen root privilegiliges gibt.

3

Zum Deaktivieren eines Kontos wird normalerweise das verschlüsselte Kennwort auf * gesetzt, was nicht der verschlüsselte Wert einer Zeichenfolge ist. Ich kann es momentan nicht überprüfen, aber ich glaube, dass Ubuntu dies auch für root tut. Technisch gesehen gibt es unter Ubuntu kein Root-Passwort.

Aber Sudo geht Ubuntu voraus; Es wurde für Systeme entwickelt, auf denen es sicherlich Root-Passwörter gab. Warum ist das Root-Passwort nicht erforderlich? Grundsätzlich ist Sudo so konzipiert, dass bestimmte Benutzer bestimmte Befehle ausführen können, z. B. einem Entwickler-Root-Zugriff erlauben, die Webanwendung neu zu starten, aber keine beliebigen Server zu starten. Wenn Sie dagegen das Root-Passwort kennen, haben Sie uneingeschränkten Zugriff. Sie können login oder su verwenden, um eine Root-Shell zu öffnen und beliebige Befehle auszuführen. Da Sudo für Personen ohne diese Zugriffsebene arbeiten muss, kann das Root-Kennwort nicht ausgeführt werden.

1
Jonathan Cast