241 lines
9.9 KiB
Markdown
241 lines
9.9 KiB
Markdown
# 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
|
|
```
|
|
|