Como fazer um “requisito” de subpilha PAM?

Como fazer um “requisito” de subpilha PAM?

Para a seção de autenticação da minha configuração do PAM logine mdmetc. common-authEu common-authchamei 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.soapenas 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, mdmchamará inutilmente pam_gnome_keyring.so, loginchamará 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 includea 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 includee 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 doneou dieem krb5ldap-cache-auth, o PAM porá fim aopilha inteira, e não apenas a subpilha.

informação relacionada