# Role : docker_openldap ## Services fournis Installation de l'image bitnami openldap sur un serveur docker_host avec schemas rfc2307bis, owncloud (pour quotas) et postfix-book. ## Variables Fournir les variables suivantes. Par exemple : ```yaml docker_openldap_data_dir: /data1 docker_openldap_service_id: ldap_example_com docker_openldap_version: latest docker_openldap_rootdn: "dc=example,dc=com" docker_openldap_admin_password: "pwdAdmin" docker_openldap_config_password: "pwdConfig" ``` | Option | Valeur par défaut | Description | |----------------------------------------|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| | docker_openldap_data_dir | | L'emplacement dans lequel se trouvent les volumes de donnees docker pour le service | | docker_openldap_service_id | | Le nom de service souhaité : conditionne le nommage des volumes | | docker_openldap_version | | Version du conteneur docker souhaité | | docker_openldap_port | 389 | Le numero de port local pour la connexion à openldap non chiffré | | docker_openldap_port_tls | 636 | Le numero de port local pour la connexion à openldap via tls | | docker_openldap_rootdn | | dn de la racine de l'annuaire (par exemple: dc=example,dc=com) | | docker_openldap_admin_username | ldapadmin | Nom de l'administrateur de l'annuaire | | docker_openldap_admin_password | | Mot de passe administrateur de l'annuaire ; le dn de l'administrateur est cn=admin suivi du rootdn, par exemple : cn=admin,dc=example,dc=com) | | docker_openldap_config_username | configadmin | Nom de l'administrateur de configuration de l'annuaire | | docker_openldap_config_password | | Mot de passe administrateur de configuration de l'annuaire ; le dn de l'administrateur est cn=admin suivi du rootdn, par exemple : cn=admin,dc=example,dc=com) | | docker_openldap_configure_ppolicy | yes | Permet d'activer la configuration du module openldap ppolicy permettant de définir un stratégie applicable aux mots de passe | | docker_openldap_ppolicy_hash_cleartext | yes | Si le module ppolicy est activé, configure le hachage des mots de passe si ces derniers sont définis par le client en clair | | docker_openldap_enable_tls | no | Permet d'activer la configuration de tls. Lire la section TLS ci-dessous. | | docker_openldap_require_tls | no | Permet d'exiger tls même sur le port non chiffré | | docker_openldap_allow_anon_binding: | no | Permet d'exiger une authentification pour se connecter à l'annuaire | ## Configuration TLS Si la configuration TLS est activée, le dossier certs, présent dans le même dossier que docker-compose.yml, devra contenir : - pubcert.pem : le certificat présenté par le serveur - privkey.pem : la clé privée relative à la clé publique du certificat ci-dessus - chain.pem : la chaine de certification permettant aux clients de vérifier la validité du certificat présenté. # Poursuite de l'installation du serveur openldap ## Vérification de la bonne connexion à l'annuaire * Connexion à l'annuaire en tant qu'administrateur ``` ldapvi -h ldap://fqdn:389 -b "dc=example,dc=org" -D cn=ldapadmin,dc=example,dc=org ``` * Connexion à l'annuaire en tant qu'administrateur de configuration (pour modification des acl ou autre) ``` ldapvi -h ldap://fqdn:389 -b "cn=config" -D cn=configadmin,cn=config ``` - dn de base : cn=config => pour configurer le serveur openldap - dn de base : cn=schema,cn=config => pour consulter les schemas connus par openldap ## Configuration de la strategie de mot de passe avec le module ppolicy ### Vérification que le module ppolicy est bien activé ``` # docker compose exec -i openldap slapcat -n 0 -F /bitnami/openldap/slapd.d/ | grep olcModuleLoad | grep ppolicy olcModuleLoad: {0}ppolicy.so ``` ### Configuration du module ppolicy Repérer l'overlay ppolicy et le modifier comme suit : ``` # ldapvi -h ldap://fqdn:389 -b "cn=config" -D cn=configadmin,cn=config [...] dn: olcOverlay={0}ppolicy,olcDatabase={2}mdb,cn=config objectClass: olcPPolicyConfig objectClass: olcOverlayConfig olcOverlay: {0}ppolicy olcPPolicyDefault: cn=defaultPasswordPolicy,ou=policies,dc=example,dc=org olcPPolicyForwardUpdates: TRUE olcPPolicyHashCleartext: TRUE olcPPolicyUseLockout: TRUE [...] ``` ### Ajout d'une stratégie de mot de passe par défaut Valeurs à adapter en fonction du besoin. ``` # ldapvi -h ldap://fqdn:389 -b "dc=example,dc=org" -D cn=ldapadmin,dc=example,org [...] add: ou=policies,dc=example,dc=org objectClass: organizationalUnit ou: policies add: cn=defaultPasswordPolicy,ou=policies,dc=example,dc=org objectClass: top objectClass: device objectClass: pwdPolicyChecker objectClass: pwdPolicy cn: defaultPasswordPolicy pwdAttribute: userPassword pwdInHistory: 3 pwdMinLength: 8 pwdMaxFailure: 5 pwdFailureCountInterval: 600 pwdCheckQuality: 0 pwdMustChange: FALSE pwdGraceAuthNLimit: 0 pwdMaxAge: 0 pwdExpireWarning: 1209600 pwdLockoutDuration: 900 pwdLockout: TRUE [...] ``` ## Ajout des overlays memberOf et refint Ces overlays permettent d'avoir des attributs "virtuels" memberof dans les utilisateurs qui contiennent les groupes auxquels un utilisateur appartient. Adapter les valeurs si besoin. Ne s'applique qu'aux groupes créés postérieurement à la configuration. ``` # ldapvi -h ldap://fqdn:389 -b "cn=config" -D cn=configadmin,cn=config [...] add cn=module{2},cn=config objectClass: olcModuleList cn: module{2} olcModulePath: /opt/bitnami/openldap/lib/openldap olcModuleLoad: {0}memberof.so add cn=module{3},cn=config objectClass: olcModuleList cn: module{3} olcModulePath: /opt/bitnami/openldap/lib/openldap olcModuleLoad: {0}refint.so add olcOverlay={0}memberof,olcDatabase={2}mdb,cn=config objectClass: olcConfig objectClass: olcMemberOfConfig objectClass: olcOverlayConfig objectClass: top olcOverlay: {0}memberof olcMemberOfDangling: ignore olcMemberOfRefInt: TRUE olcMemberOfGroupOC: groupOfUniqueNames olcMemberOfMemberAD: uniqueMember olcMemberOfMemberOfAD: memberOf add olcOverlay={1}refint,olcDatabase={2}mdb,cn=config objectClass: olcConfig objectClass: olcOverlayConfig objectClass: olcRefintConfig objectClass: top olcOverlay: {1}refint olcRefintAttribute: manager olcRefintAttribute: member olcRefintAttribute: memberof olcRefintAttribute: owner olcRefintAttribute: uniqueMember [...] ``` ## Changer un mot de passe admin * Obtenir le mot de passe chiffré ``` # docker compose exec -i openldap slappasswd New password: Re-enter new password: {SSHA}FqKYv/azMmj/tp2LTSWzOzJf65h/nRKp ``` * Se connecter avec le compte administrateur approprié et editer l'attribut userPassword pour remplacer l'ancien mot de passe chiffré par le nouveau ## Configuration TLS Le conteneur prend en charge la configuration de TLS dans OpenLDAP si cette configuration est présente dans les variables d'environnement lors du premier démarrage. Il est donc préférable de disposer des certificats avant le premier démarrage. Dans le cas contraire, l'ajout des directives *TLS* dans la configuration sera sans effet. Pour configurer TLS à posteriori : ``` # ldapvi -h ldap://fqdn:389 -b "cn=config" -D cn=configadmin,cn=config 0 cn=config objectClass: olcGlobal cn: config [...] olcTLSCACertificateFile: /bitnami/certs/chain.pem olcTLSCertificateFile: /bitnami/certs/pubcert.pem olcTLSCertificateKeyFile: /bitnami/certs/privkey.pem olcTLSVerifyClient: never [...] ``` Pour tester et deboguer : ``` ldapsearch -d 1 -LLL -H ldaps://fqdn:636 -x "dc=example,dc=org" -D cn=ldapadmin,dc=example,org ``` Pour tester la chaine de certification : ``` openssl s_client -connect fqdn:636 -msg -verify 1 ``` Et en, cas de problème tel que : ``` ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1) ``` vérifier que le fichier de configuration du client LDAP contient bien un trousseau de certificats contenant la racine, par exemple : ``` # cat /etc/ldap/ldap.conf TLS_CACERTDIR /etc/ssl/certs/ ``` ## Ajout de schemas supplémentaires Si des schémas supplémentaires sont présents dans le dossier custom-schemas avant le premier démarrage, ils seront intégrés à l'annuaire. Dans le cas contraire, pour en ajouter, placer le fichier ldif du schema à ajouter dans le dossier custom-schemas puis faire : ``` ldapadd -H ldap://fqdn:389 -x -W -D "cn=configadmin,cn=config" -f custom-schemas/monschema.ldif ```