¿Cómo hacer que una subpila PAM sea "requisito"?

¿Cómo hacer que una subpila PAM sea "requisito"?

Para la sección de autenticación de mi configuración PAM, loginetc. mdm, llame a common-auth. He common-authllamado 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.sosolo 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, mdmllamará inútilmente pam_gnome_keyring.so, loginllamará 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 includeen 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 includey 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 doneo dieen krb5ldap-cache-auth, PAM pondrá fin a lapila completa, y no solo la subpila.

información relacionada