Linux:Configuration de NSS/PAM pour une authentification via un LDAP
Sommaire
But
Permet au système Linux:
- d'authentifier les utilisateurs via le LDAP,
- d'obtenir les informations des utilisateurs à travers le LDAP.
Étape préliminaire
Avant de commencer, il est impératif:
- de disposer d'un serveur LDAP,
- d'avoir testé un accès client vers le LDAP (voir Configuration du client LDAP),
- et d'avoir procédé à l'installation d'OpenSSL.
Installation
Taper la commande suivante pour installer les composants nécessaires à NSS et PAM pour faire de l'authentification à travers un LDAP sur une CentOS/RedHat/Fedora:
yum install pam_ldap nss-pam-ldapd
ou sur une Debian:
aptitude install libnss-ldapd libpam-smbpass libpam-mount
Configuration au niveau du serveur LDAP
Création du compte pour l'accès au LDAP
Créer le compte que NSS/PAM va utiliser pour accéder au LDAP:
- pour cela, commencer par créer le fichier LDIF:
dn: cn=linux,ou=sysaccount,ou=localnet,dc=minetti,dc=org objectClass: organizationalRole objectClass: simpleSecurityObject cn: linux description: Compte NSS/PAM userPassword: ....
- REMARQUE: Ne jamais mettre le mot de passe en clair (userPassword). Utiliser la commande suivante pour chiffrer le mot de passe:
slappasswd
- Taper la commande suivante pour importer le nouveau compte dans le LDAP:
ldapadd -x -v -ZZ -D "cn=Manager,dc=minetti,dc=org" -W -f linux.ldif
Ajout des droits d'accès pour NSS/PAM
Voir chapitre Ajout des droits d'accès pour samba.
Configuration de NSS
- Modifier le fichier /etc/nslcd.conf pour qu'il ressemble à ceci:
# UID/GID du démon nslcd uid nslcd gid ldap # pour CentOS/RedHat/Fedora gid nslcd # pour Debian # Connexion uri ldap://ldap.srv.minetti.org base dc=minetti,dc=org binddn cn=linux,ou=sysaccount,ou=localnet,dc=minetti,dc=org bindpw LeMotDePasseEnClair rootpwmoddn cn=Manager,dc=minetti,dc=org ldap_version 3 #bind_timelimit 30 #timelimit 30 #idle_timelimit 3600 # Certificats SSL ssl start_tls tls_reqcert demand tls_cacertdir /etc/openldap/cacerts # pour CentOS/RedHat/Fedora tls_cacertfile /etc/ssl/certs/minetti-ca.pem # pour Debian #tls_randfile /var/run/egd-pool #tls_ciphers TLSv1 tls_cert /etc/pki/tls/certs/amon.pem # pour CentOS/RedHat/Fedora tls_cert /etc/ssl/certs/amon.pem # pour Debian tls_key /etc/pki/tls/private/amon.key # pour CentOS/RedHat/Fedora tls_key /etc/ssl/private.amon/amon.key # pour Debian # Recherche arborescence du LDAP scope sub base group ou=group,ou=localnet,dc=minetti,dc=org base passwd ou=people,ou=localnet,dc=minetti,dc=org base shadow ou=people,ou=localnet,dc=minetti,dc=org base hosts ou=hosts,ou=localnet,dc=minetti,dc=org base services ou=services,ou=localnet,dc=minetti,dc=org base networks ou=networks,ou=localnet,dc=minetti,dc=org base protocols ou=protocols,ou=localnet,dc=minetti,dc=org base rpc ou=rpc,ou=localnet,dc=minetti,dc=org base ethers ou=ethers,ou=localnet,dc=minetti,dc=org base aliases ou=aliases,ou=localnet,dc=minetti,dc=org base netgroup ou=netgroup,ou=localnet,dc=minetti,dc=org # PAM (pour Debian uniquement) pam_authz_search (&(objectClass=posixAccount)(uid=$username))
- Créer le fichier /etc/ldap.secret et mettez y le mot de passe du manager du LDAP:
echo "MonMotDePasse" > /etc/ldap.secret chmod 600 /etc/ldap.secret
- Modifier le fichier /etc/nsswitch.conf pour qu'il ressemble à ceci:
passwd: files ldap shadow: files ldap group: files ldap hosts: files ldap dns bootparams: nisplus [NOTFOUND=return] files ethers: files ldap netmasks: files networks: files ldap protocols: files ldap rpc: files ldap services: files ldap netgroup: nisplus ldap publickey: nisplus automount: files nisplus ldap aliases: files nisplus ldap
- Pour CentOS/RedHat/Fedora, modifier la ligne suivante dans le fichier /etc/sysconfig/authconfig:
USELDAP=yes
- Démarrer le démon nslcd:
service nslcd start
Configuration de PAM (CentOS/RedHat/Fedora)
- Modifier le fichier /etc/pam_ldap.conf pour qu'il ressemble à ceci:
# Connexion uri ldap://ldap.srv.minetti.org base dc=minetti,dc=org binddn cn=linux,ou=sysaccount,ou=localnet,dc=minetti,dc=org bindpw LeMotDePasseEnClair rootbinddn cn=Manager,dc=minetti,dc=org ldap_version 3 #timelimit 30 #bind_timelimit 30 #bind_policy hard #idle_timelimit 3600 # Certificats SSL ssl start_tls tls_checkpeer yes tls_cacertdir /etc/openldap/cacerts #tls_randfile /var/run/egd-pool #tls_ciphers TLSv1 tls_cert /etc/pki/tls/certs/amon.pem tls_key /etc/pki/tls/private/amon.key # Recherche arborescence du LDAP scope sub pam_filter objectclass=posixAccount pam_login_attribute uid pam_check_host_attr no pam_check_service_attr no #pam_groupdn cn=pam,ou=group,ou=localnet,dc=minetti,dc=org pam_member_attribute memberUid pam_min_uid 10001 #pam_max_uid 0 #pam_login_attribute userPrincipalName #pam_template_login_attribute uid #pam_template_login nobody pam_password md5 # Paramètres pour NSS (normalement obsolète) nss_base_passwd ou=people,ou=localnet,dc=minetti,dc=org?sub nss_base_shadow ou=people,ou=localnet,dc=minetti,dc=org?sub nss_base_group ou=group,ou=localnet,dc=minetti,dc=org?sub nss_base_hosts ou=hosts,ou=localnet,dc=minetti,dc=org?sub nss_base_services ou=services,ou=localnet,dc=minetti,dc=org?sub nss_base_networks ou=networks,ou=localnet,dc=minetti,dc=org?sub nss_base_protocols ou=protocols,ou=localnet,dc=minetti,dc=org?sub nss_base_rpc ou=rpc,ou=localnet,dc=minetti,dc=org?sub nss_base_ethers ou=ethers,ou=localnet,dc=minetti,dc=org?sub nss_base_netmasks ou=networks,ou=localnet,dc=minetti,dc=org?sub nss_base_bootparams ou=ethers,ou=localnet,dc=minetti,dc=org?sub nss_base_aliases ou=aliases,ou=localnet,dc=minetti,dc=org?sub nss_base_netgroup ou=netgroup,ou=localnet,dc=minetti,dc=org?sub
- Créer le fichier /etc/pam_ldap.secret et mettez y le mot de passe du manager du LDAP:
echo "MonMotDePasse" > /etc/pam_ldap.secret chmod 600 /etc/pam_ldap.secret
- Modifier le fichier /etc/pam.d/system-auth pour qu'il ressemble à ceci:
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_ldap.so session optional pam_mkhomedir.so skel=/etc/skel umask=077
Configuration de PAM (Debian)
Debian configure automatiquement PAM au moment de l'installation de libnss-ldapd. Néanmoins il faudra s'assurer d'avoir la configuration suivante:
- pour /etc/pam.d/common-account:
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so account requisite pam_deny.so account required pam_permit.so account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad] pam_ldap.so minimum_uid=10001
- pour /etc/pam.d/common-auth:
auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so minimum_uid=10001 use_first_pass auth requisite pam_deny.so auth required pam_permit.so auth optional pam_mount.so auth optional pam_smbpass.so migrate
- pour /etc/pam.d/common-password:
password [success=2 default=ignore] pam_unix.so obscure sha512 password [success=1 default=ignore] pam_ldap.so minimum_uid=10001 md5 try_first_pass password requisite pam_deny.so password required pam_permit.so password optional pam_smbpass.so nullok use_authtok use_first_pass
- pour /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 optional pam_mount.so session [success=ok default=ignore] pam_ldap.so minimum_uid=10001 session required pam_mkhomedir.so skel=/etc/skel umask=0077
Test
Pour tester, taper les commandes suivantes pour lister les utilisateurs du système:
getent passwd getent shadow
Vérifier que les utilisateurs du LDAP apparaissent bien à la fin de la liste.
Taper la commande suivante:
getent group
Vérifier que les groupes du LDAP apparaissent bien à la fin de la liste.
Ouvrir une session et tester l'authentification.