Für den Authentifizierungsabschnitt meiner PAM-Konfiguration login
usw. mdm
rufen Sie auf common-auth
. Ich habe common-auth
Folgendes als Unterstapel (als auth substack krb5ldap-cache-auth
) aufgerufen:
auth optional pam_echo.so Trying UNIX
# Try UNIX, empty passwords OK
auth sufficient pam_unix.so nullok
auth optional pam_echo.so Checking UID
# If the uid < 500 and UNIX didn't work, then die.
auth requisite pam_succeed_if.so uid >= 500 quiet_success
auth optional pam_echo.so Trying Kerberos
# Try Kerberos, using the same password
# If the password is correct (success), then skip next lines
# If the password is wrong (auth_err), then die
# If Kerberos can't connect (?), then ignore
auth [success=2 auth_err=die default=ignore] pam_krb5.so debug use_first_pass
# Try the cache, using the same password
# Last chance.
auth optional pam_echo.so Trying cache
auth [success=done default=die] pam_ccreds.so action=validate use_first_pass
# Kerberos validated our password.
auth optional pam_echo.so Kerberos validated
# Store the password hash.
auth optional pam_ccreds.so action=store use_first_pass
# See if we can mount user drives, since we have a Kerberos token.
auth optional pam_mount.so
auth optional pam_echo.so Done.
(Wird pam_echo.so
nur zum Debuggen verwendet.)
Dies scheint für eine erfolgreiche Authentifizierung gut zu funktionieren. Der Substack-Mechanismus ist praktisch, da ich „sufficient“ und „done“ verwenden kann, um den Substack zu beenden, ohne den größeren Stack zu beenden.
Aber bei einer fehlgeschlagenen Authentifizierung wird der größere Stapel fortgesetzt (wird beispielsweise mdm
nutzlos aufrufen pam_gnome_keyring.so
, login
wird nutzlos aufrufen pam_group.so
), obwohl er beendet werden sollte.
Gibt es eine Möglichkeit, einen Unterstapel aufzurufen, sodass der Stapel beendet wird, wenn der Unterstapel fehlschlägt? Ich habe es versucht, auth requisite substack krb5ldap-cache-auth
aber das ist einfach eine schlechte PAM-Syntax.
Antwort1
Aus dem PAM-Administratorhandbuch:
substack
Schließen Sie alle Zeilen des angegebenen Typs aus der Konfigurationsdatei ein, die als Argument für dieses Steuerelement angegeben ist.Der Unterschied besteht darin,
include
dass die Auswertung der Done- und Die-Aktionen in einem Unterstapel nicht dazu führt, dass der Rest des gesamten Modulstapels übersprungen wird, sondern nur der Unterstapel.
Wenn ich Ihre Frage lese, scheint es mir, als ob Sie nach include
und nicht nach suchen substack
. Daher sollten Sie wahrscheinlich ersetzen ...
auth substack krb5ldap-cache-auth
mit...
auth include krb5ldap-cache-auth
Auf einem Debian-System müssen Sie jedoch möglicherweise stattdessen Folgendes verwenden:
@include krb5ldap-cache-auth
Außerdem müssen Sie auf RedHat-Systemen und Derivaten möglicherweise sogar verwenden pam_stack
, das oft als veraltet gilt (ich glaube, aufgrund von Problemen bei der Handhabung von Include-Rekursionen):
auth requisite pam_stack.so service=krb5ldap-cache-auth
In diesen Fällen wird PAM , wenn irgendetwas eine done
oder die
eine Aktion in auslöst, diekrb5ldap-cache-auth
gesamter Stapel, und nicht nur der Unterstapel.