автономная аутентификация с ldap, pam-ccreds и nss_updatedb

Я установил Linux-машину (debian 6.0.7) с аутентификацией ldap со следующими конфигурациями:

/etc/nsswitch.conf

passwd:         compat ldap [NOTFOUND=return UNAVAIL=continue] db
group:          compat ldap [NOTFOUND=return UNAVAIL=continue] db
shadow:         compat ldap

/etc/pam.d/common-account

# here are the per-package modules (the "Primary" block)
account [user_unknown=ignore authinfo_unavail=ignore default=ok]        pam_unix.so
account [success=ok user_unknown=ignore authinfo_unavail=ignore default=ignore] pam_succeed_if.so uid < 1000 debug
account [success=done default=ignore authinfo_unavail=1]     pam_ldap.so debug
# here's the fallback if no module succeeds
account requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config

/etc/pam.d/common-auth

# here are the per-package modules (the "Primary" block)
auth    [success=done default=ignore]      pam_unix.so nullok_secure
auth    requisite       pam_succeed_if.so uid >= 1000 quiet
auth    requisite       pam_succeed_if.so gid >= 1000 quiet
auth    requisite       pam_succeed_if.so user notingroup root
auth    requisite       pam_succeed_if.so user notingroup wheel
auth    [success=3 default=2 authinfo_unavail=ignore]      pam_ldap.so use_first_pass
auth    [success=2 default=ignore]      pam_ccreds.so minimum_uid=1000 action=validate use_first_pass
auth    [default=ignore]                pam_ccreds.so minimum_uid=1000 action=update
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth    optional                        pam_ccreds.so minimum_uid=1000 action=store
# end of pam-auth-update config

/etc/pam.d/common-password

# here are the per-package modules (the "Primary" block)
password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 user_unknown=ignore default=die authinfo_unavail=ignore]     pam_ldap.so try_first_pass
# here's the fallback if no module succeeds
password        requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password        required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
password        optional        pam_gnome_keyring.so
# end of pam-auth-update config

/etc/pam.d/common-session

# here are the per-package modules (the "Primary" block)
session [default=1]                     pam_permit.so
# here's the fallback if no module succeeds
session requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel umask=0022
session optional        pam_ldap.so
# end of pam-auth-update config

в common-account мне пришлось перейти на pam_permit, если ldap-сервер недоступен, иначе пользователи с кэшированными учетными данными не могут пройти аутентификацию, но я думаю, что это не очень хорошая идея.

Я также запускаю nss_updatedb ldap для кеширования passwd и групп.

Все работает нормально, даже офлайн-аутентификация. Проблема в том, что я отключаю пользователя на ldap (устанавливая для shadowexpire значение 1). Когда машина находится в режиме онлайн, система аутентификации уведомляет, что учетная запись отключена, но когда машина находится в автономном режиме, отключенный пользователь может войти в систему, используя кэшированные учетные данные. Я считаю, это потому, что теневая информация не кешируется.

Это способ кэшировать теневую информацию об отключенных пользователях, чтобы они не могли войти в систему, даже когда машина отключена?


person user2956442    schedule 05.11.2013    source источник


Ответы (2)


pam_ccreds README говорит, что в настоящее время это не поддерживается. Вы можете сбросить пароль пользователя вместо использования shadowexpire.

person Eric Johnson    schedule 23.02.2017

Спасибо, что поделились своим конфигом! Я изменил /etc/pam.d/common-account с

account [user_unknown=ignore authinfo_unavail=ignore default=ok]        pam_unix.so

to

account [success=done user_unknown=ignore authinfo_unavail=ignore default=ok]        pam_unix.so

Проблема заключалась в том, что когда сервер LDAP был недоступен, локальный пользователь был отключен даже с хорошим паролем. success = done завершает цепочку, как только pam_unix.so сообщает, что все в порядке.

person Reinhard Mayr    schedule 14.03.2018