Linux:Authentification LDAP
Sommaire
Installation et configuration du serveur LDAP
Paquetages
Les paquetages suivants doivent être installés:
- openldap
- openldap-clients
- openldap-servers
- openssl
Fichier /etc/openldap/slapd.conf
# ============================================================================== # CONFIGURATION SERVEUR LDAP # Copyright 2006 by MINETTI JP # ============================================================================== # ============================================================================== # Schémas # ============================================================================== include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/samba.schema # ============================================================================== # Support LDAPv2 # ============================================================================== allow bind_v2 # ============================================================================== # Paramètres du démon # ============================================================================== pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # ============================================================================== # Connexion TLS # ============================================================================== # Spéfications des algorithmes de chiffrement TLSCipherSuite HIGH:MEDIUM:+SSLv2 # Certificat de la CA TLSCACertificateFile /etc/openldap/cacerts/ca.pem # Certificat du serveur LDAP TLSCertificateFile /etc/openldap/server-certs/openldap.pem # Clée privée du serveur LDAP TLSCertificateKeyFile /etc/openldap/server-certs/openldap.key # Clôture la session si certificat non valide TLSVerifyClient demand # Connexion TLS obligatoire security tls=1 # ============================================================================== # Droits d'accès # ============================================================================== include /etc/openldap/access.conf # ============================================================================== # Base de données # ============================================================================== database bdb suffix "dc=minetti,dc=org" rootdn "cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" rootpw {SSHA}XXXXXXXXXXXXXXXXXXXX directory /var/db/ldap # ============================================================================== # Indexes # ============================================================================== index objectClass eq,pres index ou,cn,sn,mail,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub index sambaSID,uniqueMember eq index sambaDomainName eq,pres index sambaPrimaryGroupSID eq # ============================================================================== # Logs # ============================================================================== # -1 Equivaut à tout tracer # 1 Trace les appels aux fonctions # 2 Gestion des paquets # 4 Déboggage lourd et verbeux # 8 Gestion de la connexion # 16 Affiche les paquets entrants et sortants # 32 Analyse des filtres de recherche # 64 Analyse du fichier de configuration # 128 Analyse des restrictions d'accès # 256 Récapitule les stats (recherche/résultats) # 512 Log des entrées renvoyées # 1024 Analyse de la communication avec les backends # 2048 Analyse du parsing d'une entrée # 0 Désactive tout logging # ============================================================================== loglevel 0
Création des certificats du serveur
On suppose que l'on soit une autorité de certification et que nous avons déjà créé notre CA. Dans le cas contraire, reportez-vous ici.
On génère la demande de certificat auprès de l'autorité de certification (CA):
openssl genrsa -out openldap.key 1024 openssl req -new -key openldap.key -out openldap.req
L'autorité de certification (CA) accepte la demande et procède à la signature du certificat:
openssl ca -in openldap.req -extensions v3_ca -out openldap.pem -days 3650
L'autorité de certification (CA) retourne un certificat signé valable pour 10 ans. Le fichier openldap.pem qui contient ce certificat, et le fichier openldap.key qui contient le couple clé privée/publique seront placés dans le répertoire /etc/openldap/server-certs.
Pour éviter que le serveur LDAP soit obligé de demander un mot de passe au démarrage, enlever le mot de passe du certificat:
mv openldap.key openldap-pw.key openssl rsa -in openldap-pw.key -out openldap.key
Il ne faut pas oublier de placer le certificat de l'autorité de certification (CA) dans le répertoire /etc/openldap/cacerts afin que le serveur puisse vérifier la validité des certificats des clients.
Configuration des accès clients
Sur chaque machine accédant au LDAP, on modifie le fichier /etc/openldap/ldap.conf:
# ============================================================================== # PARAMETRES DE CONNEXION PAR DEFAUT DES CLIENTS LDAP # Copyright 2006 by MINETTI JP # ============================================================================== # Connexion URI ldap://ldap.srv.minetti.org/ BASE dc=minetti,dc=org # Certificats SSL (voir $HOME/.ldaprc pour chaque utilisateur) SSL start_tls # Le serveur doit posséder un certificat signé par la CA pour que la # connection soit possible TLS_REQCERT demand # Certificat de la CA TLS_CACERTDIR /etc/openldap/cacerts
Comme pour la machine serveur, on place le certificat de l'autorité de certification dans le répertoire /etc/openldap/cacerts de chaque machine afin que les clients puissent vérifier la validité du certificat du serveur.
Pour que le client LDAP puisse trouver le bon certificat (il peut y en avoir plusieurs), il faut créer un lien avec le hash du certificat:
cacertdir_rehash /etc/openldap/cacerts
Sur chaque machine et pour chaque utilisateur autorisé à se connecter au LDAP, on créé un fichier .ldaprc dans le répertoire home des utilisateurs ($HOME):
# ============================================================================== # PARAMETRES DE CONNEXION PAR DEFAUT DES CLIENTS LDAP # Copyright 2006 by MINETTI JP # ============================================================================== # Certificat x509 du client TLS_CERT /etc/pki/tls/certs/mout.pem # Clés du certificat TLS_KEY /etc/pki/tls/private/mout.key
On génère la demande de certificat du client auprès de l'autorité de certification (CA):
openssl genrsa -out mout.key 1024 openssl req -new -key mout.key -out mout.req
L'autorité de certification (CA) accepte la demande et procède à la signature du certificat:
openssl ca -in mout.req -extensions v3_ca -out mout.pem -days 3650
L'autorité de certification (CA) retourne un certificat signé valable pour 10 ans. Le fichier mout.pem qui contient ce certificat, et le fichier mout.key qui contient le couple clé privée/publique seront placés dans le répertoire /etc/pki/tls/certs et /etc/pki/tls/private.
ATTENTION: Si SELinux est activé et que les certificats se trouvent dans une autre arborescence que /etc/pki, il est impératif de positionner les contextes SELinux des fichiers contenant les certificats sur cert_t. Sans cela, le serveur LDAP ne pourrait pas avoir accès à ses certificats:
chcon -R -u system_u /var/minetti/pki semanage fcontext -a -t cert_t '/var/minetti/pki(/.*)?' restorecon -R -v /var/minetti
Démarrage/arrêt du serveur LDAP
- Pour démarrer le serveur:
/sbin/service ldap start
- Pour arrêter le serveur:
/sbin/service ldap stop
- Pour redémarrer le serveur:
/sbin/service ldap restart
- Pour connaître l'état du serveur:
/sbin/service ldap status
Peuplement du LDAP
Pour peupler le LDAP, on créé un fichier d'import au format LDIF (import.ldif):
blabla
La commande suivante permet de crypter les mots de passe:
slappasswd -s "xxxxxxxxxxxxxx"
Puis on procède à l'import:
ldapadd -W -x -v -ZZ -D "cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" -f import.ldif
Fichier /etc/openldap/access.conf
# ============================================================================== # CONFIGURATION SERVEUR LDAP: Droits d'accès # Copyright 2006 by MINETTI JP # ============================================================================== # dn.base Acces au noeud uniquement # dn.one Acces enfant direct du noeud # dn.subtree Acces au noeud et a ses descendants # dn.children Acces aux descendants du noeud (mais pas au noeud) # ============================================================================== # Accès sysaccount.localnet.minetti.org access to dn.base="ou=sysaccount,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn.regex="^cn=([^,]+),ou=sysaccount,ou=localnet,dc=minetti,dc=org$" read by * none access to dn.children="ou=sysaccount,ou=localnet,dc=minetti,dc=org" attrs="userPassword" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self read by anonymous auth by * none access to dn.children="ou=sysaccount,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self read by * none # Accès people.localnet.minetti.org access to dn.base="ou=people,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.base="ou=people,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=people,ou=localnet,dc=minetti,dc=org" filter="objectClass=posixAccount" attrs=userPassword by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self write by anonymous auth by * none access to dn.children="ou=people,ou=localnet,dc=minetti,dc=org" filter="objectClass=posixAccount" attrs=shadowlastchange by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self write by * none access to dn.subtree="uid=admin,ou=people,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self read by * none access to dn.children="ou=people,ou=localnet,dc=minetti,dc=org" filter="objectClass=sambaSamAccount" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by self read by * none access to dn.children="ou=people,ou=localnet,dc=minetti,dc=org" filter="objectClass=shadowAccount" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by self read by * none access to dn.children="ou=people,ou=localnet,dc=minetti,dc=org" filter="objectClass=posixAccount" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by self read by * none access to dn.children="ou=people,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none # Accès group.localnet.minetti.org access to dn.base="ou=group,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.base="ou=group,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=group,ou=localnet,dc=minetti,dc=org" filter="objectClass=sambaGroupMapping" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.children="ou=group,ou=localnet,dc=minetti,dc=org" filter="objectClass=posixGroup" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.children="ou=group,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none # Accès hosts.localnet.minetti.org access to dn.base="ou=hosts,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.base="ou=hosts,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=hosts,ou=localnet,dc=minetti,dc=org" filter="objectClass=posixAccount" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=hosts,ou=localnet,dc=minetti,dc=org" filter="objectClass=ipHost" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.children="ou=hosts,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none # Accès IDMAP access to dn.base="ou=idmap,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.base="ou=idmap,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=idmap,ou=localnet,dc=minetti,dc=org" filter="objectClass=sambaIdmapEntry" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=idmap,ou=localnet,dc=minetti,dc=org" filter="objectClass=sambaUNIXIdPool" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.children="ou=idmap,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none # Accès services.localnet.minetti.org access to dn.subtree="ou=services,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none # Accès protocols.localnet.minetti.org access to dn.subtree="ou=protocols,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none # Accès netgroup.localnet.minetti.org access to dn.subtree="ou=netgroup,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none # Accès autofs.localnet.minetti.org access to dn.subtree="ou=autofs,ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none # Accès localnet.minetti.org access to dn.base="ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by dn="cn=contact,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * none access to dn.one="ou=localnet,dc=minetti,dc=org" filter="objectClass=sambaDomain" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=samba,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none access to dn.one="ou=localnet,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none # Accès tomcat.appli.minetti.org access to dn.base="ou=tomcat,ou=appli,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=tomcat,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * read access to dn.children="ou=tomcat,ou=appli,dc=minetti,dc=org" attrs=userPassword by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=tomcat,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self write by anonymous auth by * read access to dn.children="ou=tomcat,ou=appli,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=tomcat,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self read by * read # Accès appli.minetti.org access to dn.base="ou=appli,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=tomcat,ou=sysaccount,ou=localnet,dc=minetti,dc=org" read by * read # Accès test.minetti.org access to dn.base="ou=test,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * read access to dn.base="ou=test,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=test,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * read access to dn.children="ou=test,dc=minetti,dc=org" attrs=userPassword by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=test,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self write by anonymous auth by * none access to dn.children="ou=test,dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by dn="cn=test,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by self write by * read # Accès minetti.org access to dn.base="dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * read access to dn.subtree="dc=minetti,dc=org" by dn="cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" write by * none # Accès par défaut access to * by users read by anonymous auth
Test
Pour valider la configuration de notre serveur, on procèdera à quelques tests.
- Pour lister tous le contenu du LDAP:
ldapsearch -vx -ZZ -D "cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" -W "(objectClass=*)"
- Pour lister les informations d'un utilisateur (myUID):
ldapsearch -vx -ZZ -D "cn=admin,ou=sysaccount,ou=localnet,dc=minetti,dc=org" -W "(uid=myUID)"
- Pour vérifier l'accès d'un utilisateur (myUID):
ldapsearch -vx -ZZ -D "uid=myUID,ou=people,ou=localnet,dc=minetti,dc=org" -W "(objectClass=*)"
Authentification LDAP avec NSS et PAM
NSS et PAM permettent l'authentification sous Linux.
Fichier /etc/ldap.conf
# ============================================================================== # PARAMETRES DE CONNEXION DE PAM_LDAP & NSS_LDAP # Copyright 2006 by MINETTI JP # ============================================================================== # ============================================================================== # CONNEXION # ============================================================================== uri ldap://ldap.srv.minetti.org/ base dc=minetti,dc=org ldap_version 3 # ============================================================================== # TLS # ============================================================================== # Activation du protocole TLS ssl start_tls # Vérifier le certificat du serveur tls_checkpeer yes # Spéfications des algorithmes de chiffrement tls_ciphers HIGH:MEDIUM:+SSLv2 # Certificat de la CA tls_cacertfile /etc/openldap/cacerts/ca.pem # Certificat x509 du client tls_cert /etc/pki/tls/certs/mout.pem # Clés du certificat tls_key /etc/pki/tls/private/mout.key # ============================================================================== # GENERAL # ============================================================================== timelimit 5 bind_timelimit 5 bind_policy soft idle_timelimit 3600 # Utilisateur pour la connexion au serveur LDAP binddn cn=nss,ou=sysaccount,ou=localnet,dc=minetti,dc=org bindpw XXXXXXXXXXXXXXX # Type de parcours de recherche scope one # ============================================================================== # Configuration PAM # ============================================================================== pam_password md5 pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberUid # ============================================================================== # Configuration NSS # ============================================================================== nss_base_passwd ou=people,ou=localnet,dc=minetti,dc=org?one nss_base_shadow ou=people,ou=localnet,dc=minetti,dc=org?one nss_base_group ou=group,ou=localnet,dc=minetti,dc=org?one nss_base_hosts ou=hosts,ou=localnet,dc=minetti,dc=org?one nss_base_services ou=services,ou=localnet,dc=minetti,dc=org?one nss_base_networks ou=networks,ou=localnet,dc=minetti,dc=org?one nss_base_protocols ou=protocols,ou=localnet,dc=minetti,dc=org?one nss_base_rpc ou=rpc,ou=localnet,dc=minetti,dc=org?one nss_base_ethers ou=ethers,ou=localnet,dc=minetti,dc=org?one nss_base_netmasks ou=networks,ou=localnet,dc=minetti,dc=org?one nss_base_bootparams ou=ethers,ou=localnet,dc=minetti,dc=org?one nss_base_aliases ou=aliases,ou=localnet,dc=minetti,dc=org?one nss_base_netgroup ou=netgroup,ou=localnet,dc=minetti,dc=org?one # Just assume that there are no supplemental groups for these named users nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd,gdm
Fichier /etc/pam.d/system-auth
#%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 sufficient pam_unix.so broken_shadow 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 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so session required pam_limits.so session required pam_unix.so session optional pam_ldap.so
Fichier /etc/nsswitch.conf
# ============================================================================== # CONFIGURATION NSS # Copyright 2006 by MINETTI JP # ============================================================================== # Utilisateurs et groupes passwd: files ldap shadow: files ldap group: files ldap # Machines du réseau hosts: files dns ldap # Autres bootparams: nisplus [NOTFOUND=return] files ethers: files netmasks: files networks: files protocols: files ldap rpc: files services: files ldap netgroup: nisplus ldap publickey: nisplus automount: files nisplus ldap aliases: files nisplus
SELinux et test
Si SELinux est activé et que les certificats se trouvent dans une autre arborescence que /etc/pki, il est impératif de positionner les contextes SELinux des fichiers contenant les certificats sur cert_t. Sans cela, PAM et NSS n'enverront pas leurs certificats au serveur LDAP:
chcon -R -u system_u /var/minetti/pki semanage fcontext -a -t cert_t '/var/minetti/pki(/.*)?' restorecon -R -v /var/minetti
Une fois tout ceci terminé, on peut tester une authentification. Mais avant, il ne faut pas oublier de redémarrer le démon NSCD:
service nscd restart
Authentification LDAP avec RADIUS
Authentification LDAP avec Apache
Applications PHP
Pour se connecter au LDAP, l'interpréteur PHP utilise le client OpenLDAP. La configuration de la connexion ne devrait donc pas représenter une difficulté. Toutefois, il faut s'assurer:
- qu'un fichier .ldaprc est bien présent dans le répertoire home ($HOME) de l'utilisateur sous lequel le serveur Apache est lancé,
- et que la variable d'environnement $HOME est bien positionné lors du lancement du serveur Apache.