Para a seção de autenticação da minha configuração do PAM login
e mdm
etc. common-auth
Eu common-auth
chamei o seguinte como uma subpilha (as 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
apenas para depuração.)
Isso parece funcionar bem para uma autenticação bem-sucedida. O mecanismo da subpilha é conveniente porque posso usar "suficiente" e "pronto" para encerrar a subpilha sem encerrar a pilha maior.
Mas, em caso de falha na autenticação, a pilha maior continua (por exemplo, mdm
chamará inutilmente pam_gnome_keyring.so
, login
chamará inutilmente pam_group.so
) quando deveria morrer.
Existe uma maneira de chamar uma subpilha de modo que, se a subpilha falhar, a pilha morra? Eu tentei auth requisite substack krb5ldap-cache-auth
, mas isso é apenas uma sintaxe ruim do PAM.
Responder1
No guia do administrador do PAM:
substack
Inclui todas as linhas de determinado tipo do arquivo de configuração especificado como argumento para este controle.Isso difere porque
include
a avaliação das ações concluídas e mortas em uma subpilha não causa o salto do restante da pilha completa do módulo, mas apenas da subpilha.
Lendo sua pergunta, me parece que você está procurando include
e não substack
. Portanto, você provavelmente deve substituir ...
auth substack krb5ldap-cache-auth
com...
auth include krb5ldap-cache-auth
Em um sistema Debian, entretanto, você pode ter que usar isto:
@include krb5ldap-cache-auth
Além disso, em sistemas RedHat e derivados, você pode até ter que usar pam_stack
, que muitas vezes é considerado obsoleto (acredito que devido a problemas no tratamento incluem recursões):
auth requisite pam_stack.so service=krb5ldap-cache-auth
Nestes casos, se alguma coisa acionar uma ação done
ou die
em krb5ldap-cache-auth
, o PAM porá fim aopilha inteira, e não apenas a subpilha.