From e7aaed3b33117c2dd49ec4530b702d967df2b40a Mon Sep 17 00:00:00 2001 From: Olivier Navas Date: Fri, 5 Aug 2022 14:18:44 +0200 Subject: [PATCH] initial commit --- README.md | 162 +++++++++++++++++++++++++++++++++++ defaults/main.yml | 1 + handlers/main.yml | 5 ++ tasks/main.yml | 14 +++ templates/docker-compose.yml | 21 +++++ 5 files changed, 203 insertions(+) create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 tasks/main.yml create mode 100644 templates/docker-compose.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..613e113 --- /dev/null +++ b/README.md @@ -0,0 +1,162 @@ +# Role : docker_openldap + + +## Services fournis + +Installation de openldap sur un serveur docker_host + + +## Variables + +Fournir les variables suivantes. Par exemple : + +```yaml +docker_openldap_data_dir: /data1 +docker_openldap_service_id: openldap +``` + +| 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_port | 389 | Le numero de port local pour la connexion à openldap | +| docker_openldap_version | | Version du conteneur docker souhaité | +| docker_openldap_rootdn | | dn de la racine de l'annuaire (par exemple: dc=example,dc=com) | +| 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_organization | | Le nom de l'organisation pour cet annuaire (attribut o de la racine) | + + +# Poursuite de l'installation du serveur openldap + +## Configuration de la strategie de mot de passe avec le module ppolicy + +### Activation du module ppolicy + +``` +# docker exec -ti -u openldap 7520847e9e47 bash +openldap@7520847e9e47:/$ cd /tmp + +openldap@7520847e9e47:/tmp$ slapcat -n 0 | grep olcModuleLoad | grep ppolicy + +openldap@7520847e9e47:/tmp$ cat > ppolicy-module.ldif +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModuleLoad: ppolicy +^D + +openldap@7520847e9e47:/tmp$ slapadd -n0 -l ppolicy-module.ldif +_#################### 100.00% eta none elapsed none fast! +Closing DB... + +openldap@7520847e9e47:/tmp$ slapcat -n 0 | grep olcModuleLoad | grep ppolicy +olcModuleLoad: {0}ppolicy +``` + +et redémarrer le conteneur + +### Ajout de la configuration du module ppolicy + +``` +# docker exec -ti d7f2803e5cfb bash +root@d7f2803e5cfb:/# cd /tmp/ + +root@d7f2803e5cfb:/tmp# cat > ppolicyoverlay.ldif +dn: olcOverlay={2}ppolicy,olcDatabase={1}mdb,cn=config +changetype: add +objectClass: olcPPolicyConfig +objectClass: olcOverlayConfig +olcOverlay: {2}ppolicy +olcPPolicyDefault: cn=defaultPasswordPolicy,ou=policies,dc=libretic,dc=fr +olcPPolicyForwardUpdates: TRUE +olcPPolicyHashCleartext: TRUE +olcPPolicyUseLockout: TRUE +^D + +root@d7f2803e5cfb:/tmp# ldapadd -Y EXTERNAL -H ldapi:// -f ppolicyoverlay.ldif +SASL/EXTERNAL authentication started +SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth +SASL SSF: 0 +adding new entry "olcOverlay={2}ppolicy,olcDatabase={1}mdb,cn=config" +``` + +### Ajout d'une stratégie de mot de passe par défaut + +Valeurs à adapter en fonction du besoin. + +``` +root@d7f2803e5cfb:/tmp# cat > defaultppolicy.ldif +dn: ou=policies,dc=libretic,dc=fr +objectClass: organizationalUnit +ou: policies + +dn: cn=defaultPasswordPolicy,ou=policies,dc=libretic,dc=fr +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 +root@d7f2803e5cfb:/tmp# ldapadd -Y EXTERNAL -H ldapi:// -f defaultppolicy.ldif +SASL/EXTERNAL authentication started +SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth +SASL SSF: 0 +adding new entry "ou=policies,dc=libretic,dc=fr" + +adding new entry "cn=defaultPasswordPolicy,ou=policies,dc=libretic,dc=fr" +``` + + +## Accès à l'annuaire en tant qu'administrateur de config + +Permet par exemple une modification des acl pour une modification avec apache directory studio (pratique). + + +### Modifier le mdp de l'administrateur de config + +#### Créer la valeur chiffrée du mdp +``` +root@docker-host:/# docker exec -ti 04a84d35f749 bash + +root@04a84d35f749:/# slappasswd +New password: +Re-enter new password: +{SSHA}FqKYv/azMmj/tp2LTSWzOzJf65h/nRKp +``` + +#### Créer un fichier modify.ldif pour +``` +root@04a84d35f749:/# cd /tmp/ + +root@04a84d35f749:/tmp# cat > modify.ldif +dn: olcDatabase={0}config,cn=config +changetype: modify +delete: olcRootPW +- +add: olcRootPW +olcRootPW: {SSHA}FqKYv/azMmj/tp2LTSWzOzJf65h/nRKp +^D + +root@04a84d35f749:/tmp# ldapmodify -Y EXTERNAL -H ldapi:// -f modify.ldif +``` + + +## Connection depuis apache directory studio + +Configurer ADS avec : +- compte : cn=admin,cn=config +- mdp : celui utilisé avec slappasswd +- dn de base : olcDatabase={1}mdb,cn=config => pour configurer le serveur openldap +- dn de base : cn=schema,cn=config => pour consulter les schemas connus par openldap + diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..552532b --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1 @@ +docker_openldap_port: "389" diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..0e1fe57 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,5 @@ +- name: docker-compose-up + shell: | + docker-compose up -d + args: + chdir: /opt/{{ docker_openldap_service_id }}/ diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..554dde2 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,14 @@ +- name: docker directory + file: + path: /opt/{{ docker_openldap_service_id }}/ + state: directory + +- name: prepare docker-compose.yml + template: + src: "{{ item }}" + dest: /opt/{{ docker_openldap_service_id }}/ + with_items: + - docker-compose.yml + notify: docker-compose-up + + diff --git a/templates/docker-compose.yml b/templates/docker-compose.yml new file mode 100644 index 0000000..e421f83 --- /dev/null +++ b/templates/docker-compose.yml @@ -0,0 +1,21 @@ +# {{ ansible_managed }} +version: '3.1' + +services: + openldap: + image: osixia/openldap:{{ docker_openldap_version }} + environment: + - LDAP_ORGANISATION={{ docker_openldap_organization }} + - LDAP_DOMAIN={{ docker_openldap_rootdn }} + - LDAP_ADMIN_PASSWORD={{ docker_openldap_admin_password }} + - LDAP_TLS=false + - LDAP_RFC2307BIS_SCHEMA=true + restart: always + volumes: + - {{ docker_openldap_data_dir }}/{{ docker_openldap_service_id }}/ldap:/var/lib/ldap + - {{ docker_openldap_data_dir }}/{{ docker_openldap_service_id }}/slapd.d:/etc/ldap/slapd.d + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - {{ docker_openldap_port }}:389 +