PAM - Erforderliches und ausreichendes Kontrollflag

14

Ich lerne PAM und bin etwas ratlos über die Bedeutung einer Kombination von Kontroll-Flags. Aus der Red Hat-Dokumentation haben wir:

  • Der erforderliche
    Ausfall eines solchen PAM führt letztendlich dazu, dass die PAM-API nicht mehr ausgeführt wird, sondern erst, nachdem die verbleibenden gestapelten Module (für diesen Dienst und Typ) aufgerufen wurden

  • Erforderlich
    wie erforderlich. Wenn jedoch ein solches Modul einen Fehler zurückgibt, wird die Steuerung direkt an die Anwendung zurückgegeben.

  • Ein ausreichender
    Erfolg eines solchen Moduls reicht aus, um die Authentifizierungsanforderungen des Modulstapels zu erfüllen (wenn ein zuvor erforderliches Modul ausgefallen ist, wird der Erfolg dieses Moduls ignoriert). Ein Ausfall dieses Moduls gilt nicht als schwerwiegend für die erfolgreiche Anwendung dieses Typs. Wenn das Modul erfolgreich ist, gibt das PAM-Framework den Erfolg sofort an die Anwendung zurück, ohne andere Module auszuprobieren.

Wenn also nach meinem Verständnis ein Modul requisiteausfällt, wird nicht der gesamte Modulstapel analysiert, und die Steuerung kehrt sofort zur Anwendung zurück. Wenn ein Modul sufficienterfolgreich ist, wird der Rest des Modulstapels nicht analysiert und das Steuerelement kehrt sofort zur Anwendung zurück. Wenn ein Modul requiredausfällt, wird der gesamte Stapel analysiert.

Jetzt kann ich nicht verstehen, wie es sich verhält, wenn ein bestimmtes Modul requiredausfällt und ein anderes Modul sufficienterfolgreich ist.

ludiegu
quelle

Antworten:

11

PAM durchläuft nacheinander die Elemente auf dem Stapel. Es speichert nur, in welchem ​​Zustand es sich befindet (Erfolg oder Ablehnung, wobei Erfolg bisher Erfolg bedeutet), und nicht, wie es diesen Zustand erreicht hat.

Wenn ein als sufficienterfolgreich gekennzeichnetes Element erfolgreich ist, beendet die PAM-Bibliothek die Verarbeitung dieses Stapels. Dies geschieht unabhängig davon, ob vorherige requiredElemente vorhanden waren oder nicht. Zu diesem Zeitpunkt gibt PAM den aktuellen Status zurück: Erfolg, wenn kein vorheriges requiredElement fehlgeschlagen ist, andernfalls Ablehnung.

In ähnlicher Weise requisitebricht die PAM-Bibliothek die Verarbeitung ab und gibt einen Fehler zurück , wenn ein als fehlerhaft gekennzeichnetes Element markiert ist . Zu diesem Zeitpunkt ist es unerheblich, ob ein vorheriger requiredArtikel fehlgeschlagen ist.

Mit anderen Worten, es requiredmuss nicht unbedingt der gesamte Stapel verarbeitet werden. Es bedeutet nur, weiterzumachen.

Gilles 'SO - hör auf böse zu sein'
quelle
Aber wenn ein requiredElement fehlgeschlagen ist, warum muss PAMder Stapel dann weiter durchlaufen werden? ob es doch endlich scheitern wird?
Mohammed Noureldin
1
@MohammedNoureldin Auch wenn ein Anmeldeversuch fehlschlägt, müssen einige Dinge erledigt werden, wie z. B. die Protokollierung, das Hinzufügen einer Zeitüberschreitung für Brute-Force-Versuche usw. Außerdem gibt das System in der Regel nicht den genauen Grund für den Fehler an, z Der Benutzername schlägt fehl, und der Benutzer wird weiterhin zur Eingabe eines Kennworts aufgefordert.
Gilles 'SO- hör auf böse zu sein'
Die Reihenfolge ist die Reihenfolge, in der sie in der Konfiguration aufgeführt sind?
OrangeDog
@OrangeDog Ja. Das in der ersten Zeile aufgeführte Modul wird ausgeführt, dann wird die zweite Zeile ausgeführt (oder je nach Ergebnis der ersten Zeile übersprungen) usw.
Gilles 'SO - hör auf, böse zu sein'
1

Meiner Meinung nach muss ein requiredKontrollflag immer erfolgreich sein, damit ein Modul erfolgreich ist.

Ein sufficientmarkiertes Modul wird ignoriert, wenn es fehlschlägt. Wenn es erfolgreich ist und keine der oben genannten requiredmarkierten Module fehlgeschlagen sind, müssen keine anderen Module des gleichen Typs überprüft werden, und das Modul wird als erfolgreich angesehen. Im Grunde hat das requiredFlag eine höhere Priorität als das sufficientFlag, aber das letztere hat die Möglichkeit, die Überprüfung der restlichen zu beenden, wenn die vorherigen requirederfolgreich waren.

Beispiel:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

Wenn die Zeilen 1, 2, 3 und 4 erfolgreich sind, kann die Zeile 5 übersprungen werden und das Modul authist erfolgreich. Wenn die Zeile 4 nicht erfolgreich ist, wird sie ignoriert und die Zeile 5 überprüft. Wenn eine der Zeilen 1, 2, 3 ausgefallen ist, wird die Zeile 4 nicht berücksichtigt.

dsmsk80
quelle
1
Ich denke, seine Frage ist, was passiert, wenn 1 fehlschlägt und 2-4 erfolgreich sind. Werden 5 ausgeführt? Wenn 1 erfolgreich gewesen wäre, würden 5 nicht ausgeführt. Oder anders ausgedrückt: Gilt die Option "Stopp nach ausreichendem Erfolg", wenn ein zuvor erforderliches Modul ausgefallen ist?
cjm
Nein, das Authentifizierungsmodul würde bei einer solchen Kombination fehlschlagen.
dsmsk80
Die Frage ist nicht, ob die Autorisierung fehlschlägt. Es wird. Die Frage ist, ob Modul 5 ausgeführt wird, bevor dieser Fehler an die Anwendung gemeldet wird.
cjm