Для раздела аутентификации моей конфигурации PAM login
и mdm
т. д. вызовите common-auth
. Я common-auth
вызываю следующее как подстек (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.
(Используется pam_echo.so
только для отладки.)
Кажется, это отлично работает для успешной аутентификации. Механизм подстека удобен, потому что я могу использовать «достаточно» и «выполнено», чтобы завершить подстек, не завершая при этом более крупный стек.
Но в случае неудачной аутентификации больший стек продолжает работу (например, mdm
будет бесполезно вызывать pam_gnome_keyring.so
, login
будет бесполезно вызывать pam_group.so
), когда он должен умереть.
Есть ли способ вызвать подстек, чтобы при сбое подстека стек умирал? Я пробовал, auth requisite substack krb5ldap-cache-auth
но это просто плохой синтаксис PAM.
решение1
Из руководства администратора PAM:
substack
Включить все строки указанного типа из файла конфигурации, указанного в качестве аргумента для этого элемента управления.Это отличается от
include
того, что оценка действий done и die в подстеке не приводит к пропуску остальной части полного стека модулей, а только подстека.
Читая ваш вопрос, мне кажется, что вы ищете include
и не substack
. Поэтому вам, вероятно, следует заменить...
auth substack krb5ldap-cache-auth
с...
auth include krb5ldap-cache-auth
Однако в системе Debian вам, возможно, придется использовать это:
@include krb5ldap-cache-auth
Кроме того, в системах RedHat и производных от них вам, возможно, даже придется использовать pam_stack
, который часто считается устаревшим (я полагаю, из-за проблем с обработкой рекурсий include):
auth requisite pam_stack.so service=krb5ldap-cache-auth
В этих случаях, если что-либо запускает действие done
или die
в krb5ldap-cache-auth
, PAM положит конецвесь стек, и не только подстек.