Nach welchem ​​Benutzerpasswort fragt `sudo`?

10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

so sudoist von jedem Benutzer runnable, und jeder Benutzer, der läuft sudoroot als die effektive Benutzer - ID des Prozesses haben wird , da die Set-user-id Bit - /usr/bin/sudoSet ist.

Von /unix//a/11287/674

Der sichtbarste Unterschied zwischen sudo und su besteht darin, dass für sudo das Kennwort des Benutzers und für su das Kennwort von root erforderlich ist.

  1. Nach welchem ​​Benutzerpasswort wird sudogefragt? Ist es der Benutzer, der durch die tatsächliche Benutzer-ID des Prozesses dargestellt wird?

    Wenn ja, kann kein Benutzer das Superuser-Privileg erhalten, indem er ausgeführt wird sudound dann sein eigenes Kennwort angibt? Kann Linux das bei einigen Benutzern einschränken?

  2. Ist es richtig , dass sudonach dem Passwort fragt nach execve() beginnt die Ausführung main()von /usr/bin/sudo?

    Da die EUID des Prozesses in root geändert wurde (weil das Bit set-user-id von / usr / bin / sudo gesetzt ist), wozu fragt sudo später nach dem Passwort?

Vielen Dank.

Ich habe /unix//a/80350/674 gelesen , aber die obigen Fragen werden nicht beantwortet.

Tim
quelle
3
Es ist kein Benutzer, sondern nur der in der Sudoers-Liste enthaltene.
Rodrigo
1
@ Rodrigo Das klingt nach einer Antwort, füge es in eine Antwort ein, nicht in einen Kommentar.
Philip Kendall
2
@PhilipKendall Das hat nur einen Teil der Zweifel des OP beantwortet.
Rodrigo

Antworten:

22
  1. In seiner am weitesten verbreiteten Konfiguration, sudofragt nach dem Passwort des Benutzers ausgeführt sudo wird (wie Sie sagen, der Benutzer mit dem Prozess reale Benutzer - ID entspricht). Der Zweck von sudobesteht darin, bestimmten Benutzern zusätzliche Berechtigungen zu gewähren (wie durch die Konfiguration in festgelegt sudoers), ohne dass diese Benutzer eine andere Authentifizierung als ihre eigene bereitstellen müssen. Allerdings sudo tut prüfen, ob der Benutzer, der sudowirklich ist , die sie vorgeben zu sein, und es tut, indem sie ihr Passwort zu fragen (oder was auch immer Authentifizierungsmechanismus eingerichtet ist , für sudogewöhnlich PAM verwenden - so dies einen Fingerabdruck könnte beinhalten, oder Zwei-Faktor Authentifizierung etc.).

    sudogewährt nicht unbedingt das Recht, root zu werden, sondern kann eine Vielzahl von Privilegien gewähren. Jeder Benutzer, der als Root angemeldet werden darf, sudoerskann dies nur mit seiner eigenen Authentifizierung tun. aber ein Benutzer darf nicht, kann nicht (zumindest nicht mit sudo). Dies wird nicht von Linux selbst erzwungen, sondern von sudo(und seinem Authentifizierungssetup).

  2. sudofragt tatsächlich nach dem Passwort, nachdem es gestartet wurde; es kann nichts anderes tun ( dh es kann nichts tun, bevor es zu laufen beginnt). Der Punkt , der sudonach dem Passwort fragen, auch wenn es der Wurzel ist der Lauf der Identität des Benutzers (in seiner typischen Konfiguration) zu überprüfen.

Stephen Kitt
quelle
12

sudofragt normalerweise nach dem Kennwort des Benutzers, der es ausführt, obwohl dies konfiguriert werden kann :

Im Gegensatz dazu su(1), wenn sudoerseine Authentifizierung erforderlich ist, werden die Anmeldeinformationen des aufrufenden Benutzers überprüft, nicht die Anmeldeinformationen des Zielbenutzers (oder des Stamms). Dies kann über die geändert werden rootpw, targetpwund runaspwFahnen, die später beschrieben.

Die Einstellung rootpwhat sudoimmer targetpwnach dem Passwort des Roots gefragt, nach dem Passwort des Benutzers gefragt, sudowird das Programm schließlich als ausgeführt und runaspwfragt nach dem Passwort des eingestellten Benutzers runas_default.

Eine sudosolche binäre Einrichtung kann tatsächlich von jedem Benutzer mit Root-Rechten gestartet werden. Vorausgesetzt, sudoder Authentifizierungscode weist keine Fehler auf, ist das an sich nicht wichtig.

In ähnlicher Weise kann jeder Prozess auch Code im Kernelmodus ausführen, indem er beispielsweise einen beliebigen Systemaufruf aufruft open(). (Dies ist nicht dasselbe wie Userspace-Code als Root.) Solange der Kernel keine Fehler aufweist, können sie jedoch keinen beliebigen Code ausführen.

ilkkachu
quelle
8

Aus der ersten Zeile (n) von man sudo:

BESCHREIBUNG Mit
sudo kann ein zulässiger Benutzer einen Befehl als Superuser oder als anderer Benutzer ausführen, wie in der Sicherheitsrichtlinie angegeben. Die tatsächliche (nicht wirksame) Benutzer-ID des aufrufenden Benutzers wird verwendet, um den Benutzernamen zu bestimmen, mit dem die Sicherheitsrichtlinie abgefragt werden soll.

So:

  1. Die reale (nicht effektive) Benutzer-ID des aufrufenden Benutzers wird verwendet ...
  2. Ja, jeder ( zulässige ) Benutzer kann die Superuser (oder andere) zusätzlichen Berechtigungen erhalten, indem er sudo ausführt und dann die erforderliche ( konfigurierte ) Authentifizierung bereitstellt . Sowohl zulässig als auch konfiguriert werden in sudoers-Dateien festgelegt.

  3. Kann Linux das bei einigen Benutzern einschränken?
    Ja, das kann es, aber das tut es nicht. Linux ist so eingestellt, dass die sudo-Binärdatei die Entscheidung basierend auf den Regeln (Sicherheitsrichtlinien) im sudo-Programm und in der Datei treffen kann /etc/sudoers. Normalerweise können andere Dateien (auch / stattdessen) verwendet werden.

Von man setresuid:

BESCHREIBUNG
setresuid () setzt den realen Benutzer - ID, um die effektive Benutzer - ID und die gespeicherte Satz-user-ID des aufrufenden Prozesses.

  1. Die einzige Möglichkeit, vom Kernel erteilte Superuser-Berechtigungen zu erhalten, besteht darin, ein Programm suid auszuführen. Es kann nicht anders sein. Auf diese Weise hat Linux ausgewählt, Superuser-Berechtigungen zu erteilen.

  2. Nachdem der Kernel eine ausführbare Datei geladen hat, die von keinem anderen Benutzer geändert werden kann (Datei und Verzeichnis von root und nur von root beschreibbar), authentifiziert die ausführbare Datei selbst (sudo) den Benutzer, indem sie nach seinem Kennwort fragt (oder nach etwas anderem, wie konfiguriert). und entscheidet, ob und welche Berechtigungen erteilt werden sollen.

Isaac
quelle
-1

Zusätzlich zu anderen guten Antworten zu sudo:

suermöglicht es Ihnen, effektiv ein anderer Benutzer zu werden. Auf meinem eigenen Computer arbeite ich nicht als Administrator für den täglichen Gebrauch - was unter anderem bedeutet, dass ich nicht (direkt) verwenden kann sudo. Wenn ich verwenden möchte sudo, kann ich verwenden su, um der Administrator-Benutzer zu werden und dann in dieser Rolle zu verwenden sudo. In dieser Situation gebe ich das Kennwort des Administratorkontos zweimal ein - einmal beim Ausführen suund einmal beim Ausführen sudo.

Stephen R.
quelle