Как сделать подстек PAM «реквизитом»?

Как сделать подстек PAM «реквизитом»?

Для раздела аутентификации моей конфигурации 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 положит конецвесь стек, и не только подстек.

Связанный контент