Como fazer um PAM “requisite”?

3

Para a seção auth da configuração do meu PAM, login e mdm etc. chamam common-auth . Eu tenho common-auth chamando o seguinte como uma sub-pilha (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 apenas para depuração).

Isso parece funcionar bem para uma autenticação bem-sucedida. O mecanismo da subcompanha é conveniente, porque eu posso usar "suficiente" e "pronto" para terminar a sub-pilha sem terminar a pilha maior.

Mas, para falha na autenticação, a pilha maior continua (por exemplo, mdm chamará inutilmente pam_gnome_keyring.so , login chamará pam_group.so inutilmente) quando precisar morrer.

Existe uma maneira de chamar uma sub-pilha para que, se a sub-pilha falhar, a pilha morra? Eu tentei auth requisite substack krb5ldap-cache-auth , mas isso é apenas uma sintaxe PAM ruim.

    
por Ashley Yakeley 21.06.2014 / 01:26

1 resposta

0

Do guia do administrador do PAM:

substack

Include all lines of given type from the configuration file specified as an argument to this control. This differs from include in that evaluation of the done and die actions in a substack does not cause skipping the rest of the complete module stack, but only of the substack.

Ao ler sua pergunta, 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

No entanto, em um sistema Debian, você pode ter que usar isto:

@include krb5ldap-cache-auth

Além disso, em sistemas e derivativos RedHat, você pode até ter que usar pam_stack , que geralmente é considerado obsoleto (acredito que devido a problemas no manuseio incluam recursões):

auth requisite pam_stack.so service=krb5ldap-cache-auth

Nesses casos, se algo desencadeia uma ação done ou die em krb5ldap-cache-auth , o PAM colocará um fim na pilha inteira , e não apenas na sub-pilha.

    
por 29.04.2015 / 11:40

Tags