Ověření přihlášení do systému proti LDAP serveru a jeho výpadek – pam_ccreds

Předpokládejme, že máte nakonfigurovaný systém pro ověřování přihlášení proti LDAP serveru. V případ výpadku LDAP serveru nebo poruchy nějakého síťového prvku po cestě k němu vzniká docela nepříjemný problém s ověřením uživatele. Částečně se dá řešit pomocí PAM modulu pam_ccred, který umožňuje kešovat přihlašovací informace.

Umístění souborů odpovídá distribuci Debian (momentálně mám na testovacím počítači unstable)

/etc/pam.d/common-auth

auth    sufficient      pam_unix.so
auth    [authinfo_unavail=ignore success=1 default=die] pam_ldap.so use_first_pass
auth    [default=done]  pam_ccreds.so action=validate use_first_pass
auth    [default=done]  pam_ccreds.so action=store use_first_pass
auth    [default=done]  pam_ccreds.so action=update use_first_pass

/etc/pam.d/common-account

account sufficient      pam_unix.so nullok_secure
account sufficient      pam_ldap.so
account required        pam_permit.so

Přihlásíme se do systému, když normálně funguje LDAP server a zkontrolujeme jestli se nám uložily informace do cache (/var/cache/.security.db).

vodik:/var/cache# cc_dump 
Credential Type  User             Service  Cached Credentials  
----------------------------------------------------------------------------------
Salted SHA1      tsunami          any     80141f0721cf1eeaca6d182db474ed7eeec0925e

Máme také možnost vyzkoušet, jestli cache obsahuje správné údaje zkušebním přihlášením:

vodik:/var/cache# cc_test -validate any tsunami heslo /var/cache/.security.db 
pam_cc_validate_credentials: Success

Zastavte LDAP server (/etc/init.d/slapd stop) a zkuste se přihlásit

[uzivatel@vodik]$ su - tsunami
Password: 
You have been logged on using cached credentials.
tsunami@vodik:~$

Pokud se vám to povede, tak jste správně nastavili pam_ccreds. 🙂

Ověření uživatele (PAM) při výpadku LDAPu není všechno, ještě by to chtělo pořešit NSS (převod uid na username a podobně). Na to používám daemona nscd a libnss-db.

Tento text je vykouslý z ldap.zdenda.com.