Para la sección de autenticación de mi configuración PAM, login
etc. mdm
, llame a common-auth
. He common-auth
llamado a lo siguiente como una subpila (como auth substack krb5ldap-cache-auth
):
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.
(Usando pam_echo.so
solo para depurar).
Esto parece funcionar bien para una autenticación exitosa. El mecanismo de subpila es conveniente porque puedo usar "suficiente" y "hecho" para terminar la subpila sin terminar la pila más grande.
Pero si falla la autenticación, la pila más grande continúa (por ejemplo, mdm
llamará inútilmente pam_gnome_keyring.so
, login
llamará inútilmente pam_group.so
) cuando debería morir.
¿Hay alguna forma de llamar a una subpila de modo que, si la subpila falla, la pila muera? Lo intenté auth requisite substack krb5ldap-cache-auth
, pero esa es simplemente una mala sintaxis de PAM.
Respuesta1
De la guía del administrador de PAM:
substack
Incluya todas las líneas de tipo dado del archivo de configuración especificado como argumento para este control.Esto difiere
include
en que la evaluación de las acciones hechas y muertas en una subpila no provoca que se omita el resto de la pila de módulos completa, sino solo la subpila.
Leyendo tu pregunta me parece que estás buscando include
y no substack
. Por lo tanto probablemente deberías reemplazar...
auth substack krb5ldap-cache-auth
con...
auth include krb5ldap-cache-auth
Sin embargo, en un sistema Debian, es posible que tengas que usar esto en su lugar:
@include krb5ldap-cache-auth
Además, en los sistemas RedHat y sus derivados, es posible que incluso tengas que usar pam_stack
, que a menudo se considera obsoleto (creo que debido a problemas en el manejo se incluyen las recursiones):
auth requisite pam_stack.so service=krb5ldap-cache-auth
En estos casos, si algo desencadena una acción done
o die
en krb5ldap-cache-auth
, PAM pondrá fin a lapila completa, y no solo la subpila.