ansible-role-docker_openldap/README.md

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
```