Référence : https://help.ubuntu.com/community/PamCcredsHowto

Installation des paquets:
apt-get install libpam-ldap libpam-cracklib libnss-ldap libpam-cracklib
A la suite de cette commande un assistant s'ouvre, remplir les informations. Sinon lancer la commande dpkg-reconfigure libpam-ldap ou dpkg-reconfigure libnss-ldap

Configuration des fichiers:

Fichier/etc/pam.d/common-account
account     [user_unknown=ignore authinfo_unavail=ignore default=done] pam_unix.so
account     [user_unknown=ignore authinfo_unavail=ignore default=done] pam_ldap.so
account     required       pam_permit.so

#Directive suivante modifié en required pour le hostcontrol via ldap
#account required        pam_ldap.so ignore_unknown_user
Fichier /etc/pam.d/common-auth
auth    [success=done default=ignore]   pam_unix.so nullok_secure try_first_pass
auth    [authinfo_unavail=ignore success=1 default=2] 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
auth    [default=bad]   pam_ccreds.so action=update
Fichier /etc/pam.d/common-password
password        requisite                       pam_cracklib.so retry=3 minlen=8 difok=3
password        [success=2 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
password        [success=1 user_unknown=ignore default=die]     pam_ldap.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so
password        optional        pam_gnome_keyring.so
Fichier /etc/pam.d/common-session
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so
session required                        pam_mkhomedir.so skel=/etc/skel/ umask=0077
session optional                        pam_ldap.so
session optional                        pam_ck_connector.so nox11
Fichier /etc/pam.d/common-session-noninteractive
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so
session optional                        pam_ldap.so
Fichier /etc/pam_ldap.secret
#cat /etc/pam_ldap.secret
votrepassword
#chmod 600 /etc/pam_ldap.secret
Fichier /etc/nsswitch.conf
passwd:         compat ldap [NOTFOUND=return] db
group:          compat ldap [NOTFOUND=return] db
shadow:         compat ldap
Fichier /etc/libnss-ldap.conf
host 192.xxx.xxx.xxx 192.xxx.xxx.xxx
#uri ldap://192.xxx.xxx.xxx ldap://192.xxx.xxx.xxx
base ou=users,dc=homelinux,dc=net
ldap_version 3
rootbinddn  cn=admin,dc=homelinux,dc=net
bind_policy soft
nss_base_passwd         ou=users,dc=homelinux,dc=net?sub
nss_base_group           ou=group,dc=homelinux,dc=net?one
nss_base_shadow         ou=users,dc=homelinux,dc=net?sub
Fichier /etc/pam_ldap.conf
uri ldap://192.xxx.xxx.xxx ldap://192.xxx.xxx.xxx
ldap_version 3
base ou=users,dc=homelinux,dc=net
rootbinddn  cn=admin,dc=homelinux,dc=net
scope sub
# Exclusion de root
pam_filter !(uid=root)
# Contrôle si la personne est autorisé sur cette hôte 
pam_check_host_attr yes
# Méthode pam pour la couplage avec smbk5pwd
#pam_password crypt
pam_password exop
# ID = On change le pwd unix et samba sans conservé l'ancien
exop_arguments id
Mise en place d'un système de cache credentials pour les portbales
# /etc/init.d/nscd stop
# vi /etc/nscd.conf

        debug-level             0
        reload-count            unlimited
        paranoia                no

        enable-cache            passwd          yes
        positive-time-to-live   passwd          2592000
        negative-time-to-live   passwd          20
        suggested-size          passwd          211
        check-files             passwd          yes
        persistent              passwd          yes
        shared                  passwd          yes
        max-db-size             passwd          33554432
        auto-propagate          passwd          yes

        enable-cache            group           yes
        positive-time-to-live   group           2592000
        negative-time-to-live   group           60
        suggested-size          group           211
        check-files             group           yes
        persistent              group           yes
        shared                  group           yes
        max-db-size             group           33554432
        auto-propagate          group           yes
# apt-get install nss-updatedb libnss-db libpam-ccreds
Création de la base locale passwd et group :
# nss_updatedb ldap
passwd... done.
group... done.
# ls -l /var/lib/misc/*.db
  -rw-r--r-- 1 root root 8192 2008-08-26 18:20 /var/lib/misc/group.db
  -rw-r--r-- 1 root root 8192 2008-08-26 18:20 /var/lib/misc/passwd.db
Création d'un script via anacron pour le refresh de la base.
# vi /etc/cron.hourly/upd-local-nss-db 

#!/bin/sh
/usr/sbin/nss_updatedb ldap >/dev/null 2>&1

# chmod +x /etc/cron.hourly/upd-local-nss-db 

#  /etc/init.d/nscd restart

Pour tester la bonne marche de l'authentification via le cache, j'utilise la commande su afin de vérifier le timestamp sur le fichier .security.db.
ls -l /var/cache/.security.db 
  -rw------- 1 root root 8192 2008-08-28 08:31 /var/cache/.security.db
date
  Thu Aug 28 10:09:03 EST 2008
su neoclimb
  Password: 
  exit
ls -l /var/cache/.security.db 
  -rw------- 1 root root 8192 2008-08-28 10:09 /var/cache/.security.db
Via la commande cc_dump. Je peux contrôler la présence de mon login/passwor dans le fichier .security.db.
# sudo cc_dump 
Credential Type  User             Service  Cached Credentials  
----------------------------------------------------------------------------------
Salted SHA1      neoclimb       any     4a985b233701cf106ed450a0168fa8e0aa86ef5d
Astuce : En mode graphique le mdp root est souvent demandé, lancé gksu-properties et selectionner sudo.