Ich benutze Linux seit einiger Zeit und sudo
dachte, ich würde bei jeder Eingabe auf den Root-Benutzer umsteigen, um einen Befehl zu erhalten.
Anscheinend ist dies nicht der Fall, da ich nur das Passwort meines Benutzerkontos benötige. Ich vermute, da ich nicht mit mehreren Benutzern gearbeitet habe, ist mir dies in der realen Welt nicht wirklich aufgefallen.
Ich bin mir nicht sicher, wie Ubuntu meinen ersten Account erstellt. Gibt es einen Root-Benutzer? Bin ich root? Ich vermute, ich habe gerade einen neuen Benutzer bei der Installation angelegt, aber er hat mir root-Rechte verliehen. Nur ein bisschen verwirrt hier ...
Warum darf ich root-Befehle mit dem Passwort meines Benutzers ausführen?
sudo
hat das Bit "setuid" gesetzt. Es wird also als der Benutzer ausgeführt, dem es gehört (der auf allen Standardsystemen root ist, wenn ich mich nicht irre), nicht als der Benutzer, der es startet.sudo
Lädt dann die/etc/sudoers
Datei und prüft, was zulässig ist, je nachdem, wer sie gestartet hat.sudo
privilegierten Personen, die möglicherweise an geografisch verteilten Orten und in Schichten rund um die Uhr arbeiten, den privilegierten Zugriff einer Person sofort widerrufen können möchten (z. B. wenn Sie vermuten seine Integrität). Wenn jeder das einmalige Root-Passwort verwendet und Sie dies ohne vorherige Abstimmung ändern, kann dies zu Chaos führen. …Antworten:
Im Detail funktioniert es folgendermaßen:
/usr/bin/sudo
Bei der ausführbaren Datei ist das setuid-Bit gesetzt, sodass sie auch dann ausgeführt wird, wenn sie von einem anderen Benutzer ausgeführt wird, und zwar mit der Benutzer-ID des Dateieigners (in diesem Fall root).sudo
Überprüft in der/etc/sudoers
Datei, über welche Berechtigungen Sie verfügen und ob Sie den aufgerufenen Befehl ausführen dürfen. Einfach gesagt,/etc/sudoers
ist eine Datei, die definiert, welche Benutzer welche Befehle mithilfe einessudo
Mechanismus ausführen können .So sieht diese Datei auf meinem Ubuntu aus:
Die dritte Zeile interessiert Sie vermutlich. Damit kann jeder in der Gruppe "sudo" jeden Befehl als jeder Benutzer ausführen.
Wenn Ubuntu während der Installation das erste Konto einrichtet, fügt es dieses Konto der Gruppe "sudo" hinzu. Mit dem
group
Befehl können Sie überprüfen, welchen Gruppen welche Benutzer angehören .sudo
fragt Sie nach einem Passwort. In Bezug auf die Tatsache, dass es ein Benutzerpasswort benötigt, nicht das des Roots , das ein Auszug aus dem Handbuch von sudoers ist :Tatsächlich wird
sudo
Ihr Benutzerkennwort jedoch für nichts benötigt. Es wird darum gebeten, nur um sicherzustellen, dass Sie wirklich Sie sind, und um Ihnen eine Art Warnung (oder die Möglichkeit zum Stoppen) zu geben, bevor Sie einen potenziell gefährlichen Befehl aufrufen. Wenn Sie die Kennwortabfrage deaktivieren möchten, ändern Sie den Eintrag sudoers in:Nach der Authentifizierung wird ein
sudo
untergeordneter Prozess gestartet, der den aufgerufenen Befehl ausführt. Das Kind erbt die Root-Benutzer-ID von seinem Elternteil - demsudo
Prozess.Beantworten Sie also Ihre Fragen genau:
Du hattest Recht. Jeder Befehl, dem
sudo
Läufe vorangestellt sind, wird mit der Root-Benutzer-ID ausgeführt.Ja, es gibt ein Root-Benutzerkonto, das sich von Ihrem Benutzerkonto unterscheidet, das während der Systeminstallation erstellt wurde. In Ubuntu ist es Ihnen jedoch standardmäßig nicht gestattet, sich als Root-Benutzer am interaktiven Terminal anzumelden.
Nein, du bist keine Wurzel. Sie haben nur die Berechtigung, einzelne Befehle mit dem
sudo
oben beschriebenen Mechanismus als Root auszuführen .Sie müssen das Passwort des Benutzers nur aufgrund des
sudo
internen Sicherheitsmechanismus eingeben . Es kann leicht ausgeschaltet werden. Sie erhalten Ihre Root-Rechte aufgrund von "setuid"/usr/bin/sudo
und nicht aufgrund von eingegebenen Passwörtern.quelle
sudo
werden kann, ohne mein Kennwort einzugeben. Gute Antwort!rootpw
Flag in abgefragt wirdsudoers
.sudo su - root
genau das tun und Ihnen ein Root-Terminal geben. Sie können sich jedoch nicht einfach als root bei einer Desktopsitzung anmelden.sudo
hat es das Root-Recht für sich und entscheidet anhand einer Konfigurationsdatei, ob es Ihnen dieses Recht erteilt.Der springende Punkt
sudo
ist, Ihnen die Privilegien eines anderen Benutzers (normalerweise root) zu gewähren, ohne nach dem Passwort dieses anderen Kontos zu fragen (im Gegensatz zusu
).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 zum Zeitpunkt der Installation erstellten Erstkonto das Recht, Befehle wie folgt auszuführen
root
.Während
root
es sich noch um ein Linux-Konto handelt, sind direkteroot
Anmeldungen aus Gründen der Sicherheit und Nachverfolgbarkeit standardmäßig deaktiviert.quelle
Piotr gab eine sehr gute Erklärung, wie es
sudo
funktioniert. Allerdings hat er nicht wirklich begründet, warum es so funktioniert, also werde ich versuchen, das hier hinzuzufügen.Bevor der
sudo
Befehl erstellt wurde, hatten wir densu
Befehl. Mit diesem Befehl kann ein Benutzer normalerweise Befehle als ein anderer Benutzer ausführenroot
(wie beisudo
ist dies der Standardzielbenutzer). Es war völlig undiskriminierend, Sie können jeden Befehl ausführen. Da es von jedem Benutzer verwendet werden konnte und praktisch der Anmeldung als dieser Benutzer entsprach, mussten Sie das Kennwort des Zielbenutzers kennen.Irgendwann wurde ein bisschen mehr Zugangskontrolle hinzugefügt: Um dies zu nutzen
su
, musste man ein Mitglied derwheel
Gruppe sein. Da Sie jedoch immer noch einen Befehl ausführen können, ist es immer noch sinnvoll, von Ihnen zu verlangen, dass Sie ihr Kennwort kennen.Es war jedoch nicht sehr sicher, dass die Benutzer das Kennwort des anderen Benutzers oder des Superbenutzers kennen mussten. Häufig möchten Sie bestimmten Benutzern nur eingeschränkten Zugriff auf ein anderes Konto gewähren (dies ist Teil eines Sicherheitskonzepts, das als Prinzip der geringsten Berechtigungen bezeichnet wird ). Dies erschwert auch die Rechenschaftspflicht: Wenn mehrere Personen das Passwort eines Kontos kennen und dieses Konto in einen Fehler oder Missbrauch verwickelt ist, können Sie nicht sagen, wer von ihnen das tatsächlich getan hat.
So
sudo
wurde geschaffen. Anstatt Benutzern die Ausführung von Befehlen zu erlauben, enthält es 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 präzisen 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, wer sie sind. Dies soll verhindern, dass jemand ein Konto in Anspruch nimmt, wenn das Terminal unbeaufsichtigt bleibt.Auf diese Anforderung wird für den Superuser verzichtet - dieser Account kann fast alles mit dem System tun, ohne es zu verwenden
sudo
, weshalb er als überflüssig erachtet wurde. Es ist auch möglich, in der Konfigurationsdatei anzugeben, dass Benutzer überhaupt kein Kennwort eingeben müssen. Einige Organisationen verwenden dies, wenn sie der Meinung sind, dass die physische Sicherheit ihrer Arbeitsstationsumgebung ausreicht, um Missbrauch zu verhindern.quelle
su
protokolliert auch, aber da es nur eine neue Shell startet, protokolliert es nur die Tatsache, dass jemand es ausgeführt hat.sudo
jedoch das Widerrufen von Berechtigungen, ohne dass das Root-Kennwort erneut an alle Personen vergeben werden muss, die es benötigen.sudo
Sie einschränken können, welche Befehle ein Benutzer ausführen darf, können Sie sicherstellen, dass Sie ihm keinen Zugriff auf Befehle gewähren, die das Protokoll überschreiben würden.Die Antwort auf Ihre Frage lautet:
Wenn Sie einen Befehl mit sudo ausführen, führen Sie den Befehl mit erhöhten Rechten aus , dh mit root-Rechten . Sie müssen nur Ihr normales Benutzerkennwort eingeben, da Sie (der Benutzer) der sudoers-Datei hinzugefügt wurden, die Ihnen Root- Rechte verleiht .
quelle
sudo
gibt nicht immer erhöhte Rechte, aber es wird mit erhöhten Rechten ausgeführt, nachdem es seine Sache getan hat (Überprüfung der Authentifizierung, es kann Privilegien verwerfen ). Diese erhöhten Berechtigungen sind erforderlich, um den Benutzer ändern zu können.sudo
tut Verwendung erweiterter Zugriffsrechte (aber das ist nicht eindeutig sudo, zB Mount tut auch), aber der Befehl, den Sie nennen , dhcommand
insudo command
nicht (je nachdem , was in gesetzt ist/etc/sudoers
).Zum Deaktivieren eines Kontos wird normalerweise das verschlüsselte Kennwort auf * gesetzt. Dies ist nicht der verschlüsselte Wert einer Zeichenfolge. 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 mit Sicherheit Root-Passwörter gab. Warum ist das Root-Passwort nicht erforderlich? Grundsätzlich wurde sudo entwickelt, um bestimmten Benutzern die Berechtigung zum Ausführen bestimmter Befehle zu erteilen. Ermöglichen Sie z. B. einem Entwickler-Root-Zugriff, die Webanwendung neu zu starten, aber keine beliebigen Server zu starten. Wenn Sie hingegen 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 Benutzer ohne diese Zugriffsberechtigung funktionieren muss, muss das root-Kennwort nicht ausgeführt werden.
quelle