diff --git a/group_vars/re2o_ldap_replica.yml b/group_vars/re2o_ldap.yml similarity index 68% rename from group_vars/re2o_ldap_replica.yml rename to group_vars/re2o_ldap.yml index ae4b34c1663e78c4f730d46f287937dc1822c552..fc2be9063d1cd6c0ad5ed39d857b8cbb6eb6f159 100644 --- a/group_vars/re2o_ldap_replica.yml +++ b/group_vars/re2o_ldap.yml @@ -1,8 +1,5 @@ --- -glob_re2o_ldap_replica: - replicator: - username: replicator - password: "{{ vault.ldap_replication_re2o_credentials }}" +glob_re2o_ldap: suffix: dc=crans,dc=org url: "ldaps://{{ query('ldap', 'ip', 'terenez', 'adm') | ipv4 | first }}:636" root_password_hash: "{{ vault.ldap_master_password_hash }}" diff --git a/host_vars/yson-partou.adm.crans.org.yml b/host_vars/yson-partou.adm.crans.org.yml index 5cde204461d4051fcc160eab974a5c25e3663a6c..647582fefb30f22e50c7d778fd3da47cf654aaa0 100644 --- a/host_vars/yson-partou.adm.crans.org.yml +++ b/host_vars/yson-partou.adm.crans.org.yml @@ -1,3 +1,8 @@ --- interfaces: adm: eth0 + +loc_re2o_ldap: + replica: + username: replicator + password: "{{ vault.ldap_replication_re2o_credentials }}" diff --git a/hosts b/hosts index b87feae27884d778d0a24f731e38f6408ed83dbd..af37685348f815a6f7f9025967ea007528262d50 100644 --- a/hosts +++ b/hosts @@ -193,7 +193,7 @@ radius [re2o_front] re2o.adm.crans.org -[re2o_ldap_replica] +[re2o_ldap] re2o-dev.adm.crans.org yson-partou.adm.crans.org diff --git a/plays/re2o-ldap-replica.yml b/plays/re2o-ldap-replica.yml deleted file mode 100755 index 1d1344a04e03ee97bf7ca2f404577122701eae8d..0000000000000000000000000000000000000000 --- a/plays/re2o-ldap-replica.yml +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env ansible-playbook ---- -- hosts: re2o_ldap_replica - vars: - re2o_ldap_replica: "{{ glob_re2o_ldap_replica | default({}) | combine(loc_re2o_ldap_replica | default({})) }}" - roles: - - re2o-ldap-replica diff --git a/plays/re2o-ldap.yml b/plays/re2o-ldap.yml new file mode 100755 index 0000000000000000000000000000000000000000..33964e190a7888a10b0e305ef7e0295566bd3242 --- /dev/null +++ b/plays/re2o-ldap.yml @@ -0,0 +1,7 @@ +#!/usr/bin/env ansible-playbook +--- +- hosts: re2o_ldap + vars: + re2o_ldap: "{{ glob_re2o_ldap | default({}) | combine(loc_re2o_ldap | default({})) }}" + roles: + - re2o-ldap-replica diff --git a/roles/re2o-ldap-replica/templates/ldap/certinfo.ldif.j2 b/roles/re2o-ldap-replica/templates/ldap/certinfo.ldif.j2 deleted file mode 100644 index 8571016c49550c556b8d95fee23c700736850eeb..0000000000000000000000000000000000000000 --- a/roles/re2o-ldap-replica/templates/ldap/certinfo.ldif.j2 +++ /dev/null @@ -1,8 +0,0 @@ -{{ ansible_header | comment }} - -dn: cn=config -add: olcTLSCertificateFile -olcTLSCertificateFile: /etc/ldap/ldap.pem -- -add: olcTLSCertificateKeyFile -olcTLSCertificateKeyFile: /etc/ldap/ldap.key diff --git a/roles/re2o-ldap-replica/templates/ldap/ldap.key.j2 b/roles/re2o-ldap-replica/templates/ldap/ldap.key.j2 deleted file mode 100644 index 1dc6da0ca8f682be4727c0395fb680fad31cbc81..0000000000000000000000000000000000000000 --- a/roles/re2o-ldap-replica/templates/ldap/ldap.key.j2 +++ /dev/null @@ -1 +0,0 @@ -{{ re2o_ldap_replica.private_key }} diff --git a/roles/re2o-ldap-replica/templates/ldap/ldap.pem.j2 b/roles/re2o-ldap-replica/templates/ldap/ldap.pem.j2 deleted file mode 100644 index 71d67e1ab8360ed865a8ea1b3868930d25089a1d..0000000000000000000000000000000000000000 --- a/roles/re2o-ldap-replica/templates/ldap/ldap.pem.j2 +++ /dev/null @@ -1 +0,0 @@ -{{ re2o_ldap_replica.certificate }} diff --git a/roles/re2o-ldap-replica/handlers/main.yml b/roles/re2o-ldap/handlers/main.yml similarity index 100% rename from roles/re2o-ldap-replica/handlers/main.yml rename to roles/re2o-ldap/handlers/main.yml diff --git a/roles/re2o-ldap-replica/tasks/main.yml b/roles/re2o-ldap/tasks/main.yml similarity index 87% rename from roles/re2o-ldap-replica/tasks/main.yml rename to roles/re2o-ldap/tasks/main.yml index 0bcd4c8dbac29cf810ad499c9f07ff25416dfe8e..687f13324e4a9c28353c28defa3084906fabfe30 100644 --- a/roles/re2o-ldap-replica/tasks/main.yml +++ b/roles/re2o-ldap/tasks/main.yml @@ -58,8 +58,7 @@ loop: - db - schema - - consumer_simple_sync - - certinfo + - replication - name: Initialize re2o-ldap schema when: not installation.stat.exists @@ -78,8 +77,8 @@ state: started - name: Enable data replication - when: not installation.stat.exists - shell: ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /var/lib/slapd/consumer_simple_sync.ldif + when: not installation.stat.exists and re2o_ldap.replica exists + shell: ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /var/lib/slapd/replication.ldif # LDAPS configuration - name: Copy TLS certificate @@ -93,17 +92,13 @@ - ldap.pem - ldap.key -- name: Load TLS certificates - when: not installation.stat.exists - shell: ldapmodify -Y EXTERNAL -H ldapi:/// -f /var/lib/slapd/certinfo.ldif - - name: Enable LDAPS lineinfile: path: /etc/default/slapd regexp: '^SLAPD_SERVICES=' line: 'SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"' notify: Restart slapd - check_mode: false + when: not ansible_check_mode - name: Touch installation marker when: not installation.stat.exists diff --git a/roles/re2o-ldap-replica/templates/ldap/db.ldif.j2 b/roles/re2o-ldap/templates/ldap/db.ldif.j2 similarity index 58% rename from roles/re2o-ldap-replica/templates/ldap/db.ldif.j2 rename to roles/re2o-ldap/templates/ldap/db.ldif.j2 index 16414ad97e1f826c325c53241e044a44b66b4db4..0181c093c918888cba435733144a6696702f3049 100644 --- a/roles/re2o-ldap-replica/templates/ldap/db.ldif.j2 +++ b/roles/re2o-ldap/templates/ldap/db.ldif.j2 @@ -3,7 +3,7 @@ # This file comes from the installation of Re2o # https://gitlab.federez.net/re2o/re2o/-/blob/master/install_utils/db.ldiff -dn: {{ re2o_ldap_replica.suffix }} +dn: {{ re2o_ldap.suffix }} o: rezo structuralObjectClass: organization description: ldap @@ -12,15 +12,15 @@ objectClass: dcObject objectClass: organization contextCSN: 20161004233332.689769Z#000000#000#000000 -dn: cn=admin,{{ re2o_ldap_replica.suffix }} +dn: cn=admin,{{ re2o_ldap.suffix }} objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin structuralObjectClass: organizationalRole description:: TERBUCBhZG1pbmlzdHJhdG9yDQo= -userPassword: {{ re2o_ldap_replica.root_password_hash }} +userPassword: {{ re2o_ldap.root_password_hash }} -dn: cn=Utilisateurs,{{ re2o_ldap_replica.suffix }} +dn: cn=Utilisateurs,{{ re2o_ldap.suffix }} gidNumber: 500 cn: Utilisateurs structuralObjectClass: posixGroup @@ -31,74 +31,74 @@ objectClass: top objectClass: sambaSamAccount objectClass: radiusprofile -dn: ou=groups,{{ re2o_ldap_replica.suffix }} +dn: ou=groups,{{ re2o_ldap.suffix }} objectClass: organizationalUnit description: Groupes d'utilisateurs ou: groups structuralObjectClass: organizationalUnit -dn: ou=services,ou=groups,{{ re2o_ldap_replica.suffix }} +dn: ou=services,ou=groups,{{ re2o_ldap.suffix }} objectClass: organizationalUnit description: Groupes de comptes techniques ou: services structuralObjectClass: organizationalUnit -dn: ou=service-users,{{ re2o_ldap_replica.suffix }} +dn: ou=service-users,{{ re2o_ldap.suffix }} objectClass: organizationalUnit description: Utilisateurs techniques de l'annuaire ou: service-users structuralObjectClass: organizationalUnit -dn: cn=freeradius,ou=service-users,{{ re2o_ldap_replica.suffix }} +dn: cn=freeradius,ou=service-users,{{ re2o_ldap.suffix }} objectClass: applicationProcess objectClass: simpleSecurityObject cn: freeradius -userPassword: {{ re2o_ldap_replica.root_password_hash }} +userPassword: {{ re2o_ldap.root_password_hash }} structuralObjectClass: applicationProcess -dn: cn=nssauth,ou=service-users,{{ re2o_ldap_replica.suffix }} +dn: cn=nssauth,ou=service-users,{{ re2o_ldap.suffix }} objectClass: applicationProcess objectClass: simpleSecurityObject cn: nssauth structuralObjectClass: applicationProcess -userPassword: {{ re2o_ldap_replica.root_password_hash }} +userPassword: {{ re2o_ldap.root_password_hash }} -dn: cn=auth,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }} +dn: cn=auth,ou=services,ou=groups,{{ re2o_ldap.suffix }} objectClass: groupOfNames cn: auth -member: cn=nssauth,ou=service-users,{{ re2o_ldap_replica.suffix }} +member: cn=nssauth,ou=service-users,{{ re2o_ldap.suffix }} structuralObjectClass: groupOfNames -dn: ou=posix,ou=groups,{{ re2o_ldap_replica.suffix }} +dn: ou=posix,ou=groups,{{ re2o_ldap.suffix }} objectClass: organizationalUnit description: Groupes de comptes POSIX ou: posix structuralObjectClass: organizationalUnit -dn: cn=wifi,ou=service-users,{{ re2o_ldap_replica.suffix }} +dn: cn=wifi,ou=service-users,{{ re2o_ldap.suffix }} objectClass: applicationProcess objectClass: simpleSecurityObject cn: wifi structuralObjectClass: applicationProcess -userPassword: {{ re2o_ldap_replica.root_password_hash }} +userPassword: {{ re2o_ldap.root_password_hash }} -dn: cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }} +dn: cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap.suffix }} objectClass: groupOfNames cn: usermgmt structuralObjectClass: groupOfNames -member: cn=wifi,ou=service-users,{{ re2o_ldap_replica.suffix }} +member: cn=wifi,ou=service-users,{{ re2o_ldap.suffix }} -dn: cn=replica,ou=service-users,{{ re2o_ldap_replica.suffix }} +dn: cn=replica,ou=service-users,{{ re2o_ldap.suffix }} objectClass: applicationProcess objectClass: simpleSecurityObject cn: replica structuralObjectClass: applicationProcess -userPassword: {{ re2o_ldap_replica.root_password_hash }} +userPassword: {{ re2o_ldap.root_password_hash }} -dn: cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }} +dn: cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }} objectClass: groupOfNames cn: readonly structuralObjectClass: groupOfNames -member: cn=replica,ou=service-users,{{ re2o_ldap_replica.suffix }} -member: cn=freeradius,ou=service-users,{{ re2o_ldap_replica.suffix }} +member: cn=replica,ou=service-users,{{ re2o_ldap.suffix }} +member: cn=freeradius,ou=service-users,{{ re2o_ldap.suffix }} diff --git a/roles/re2o-ldap/templates/ldap/ldap.key.j2 b/roles/re2o-ldap/templates/ldap/ldap.key.j2 new file mode 100644 index 0000000000000000000000000000000000000000..007496f0db3034a985a4a582c7e7775471cb2e94 --- /dev/null +++ b/roles/re2o-ldap/templates/ldap/ldap.key.j2 @@ -0,0 +1 @@ +{{ re2o_ldap.private_key }} diff --git a/roles/re2o-ldap/templates/ldap/ldap.pem.j2 b/roles/re2o-ldap/templates/ldap/ldap.pem.j2 new file mode 100644 index 0000000000000000000000000000000000000000..853d78b66c41355cb2ef4ea9d378c09e5666a148 --- /dev/null +++ b/roles/re2o-ldap/templates/ldap/ldap.pem.j2 @@ -0,0 +1 @@ +{{ re2o_ldap.certificate }} diff --git a/roles/re2o-ldap-replica/templates/ldap/consumer_simple_sync.ldif.j2 b/roles/re2o-ldap/templates/ldap/replication.ldif.j2 similarity index 53% rename from roles/re2o-ldap-replica/templates/ldap/consumer_simple_sync.ldif.j2 rename to roles/re2o-ldap/templates/ldap/replication.ldif.j2 index f15a81dfcde86af2b4cce00ee9612bdaa96a642b..7065c26057978edc3b3f0ccb3918383c462942a4 100644 --- a/roles/re2o-ldap-replica/templates/ldap/consumer_simple_sync.ldif.j2 +++ b/roles/re2o-ldap/templates/ldap/replication.ldif.j2 @@ -4,11 +4,11 @@ dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcSyncrepl olcSyncrepl: rid=1 - provider={{ re2o_ldap_replica.url }} + provider={{ re2o_ldap.url }} bindmethod=simple - binddn="cn={{ re2o_ldap_replica.replicator.username }},{{ re2o_ldap_replica.suffix }}" - credentials={{ re2o_ldap_replica.replicator.password }} - searchbase="{{ re2o_ldap_replica.suffix }}" + binddn="cn={{ re2o_ldap.replica.username }},{{ re2o_ldap.suffix }}" + credentials={{ re2o_ldap.replica.password }} + searchbase="{{ re2o_ldap.suffix }}" scope=sub schemachecking=on type=refreshAndPersist @@ -18,4 +18,4 @@ olcSyncrepl: rid=1 tls_reqcert=allow - add: olcUpdateRef -olcUpdateRef: {{ re2o_ldap_replica.url }} +olcUpdateRef: {{ re2o_ldap.url }} diff --git a/roles/re2o-ldap-replica/templates/ldap/schema.ldif.j2 b/roles/re2o-ldap/templates/ldap/schema.ldif.j2 similarity index 98% rename from roles/re2o-ldap-replica/templates/ldap/schema.ldif.j2 rename to roles/re2o-ldap/templates/ldap/schema.ldif.j2 index 174374371f07a202795a0e5365f4b81b9a5cfbaa..036ab3afd2ab27ec043e40096ecd34f1a5386011 100644 --- a/roles/re2o-ldap-replica/templates/ldap/schema.ldif.j2 +++ b/roles/re2o-ldap/templates/ldap/schema.ldif.j2 @@ -14,6 +14,8 @@ olcSaslSecProps: none olcToolThreads: 1 structuralObjectClass: olcGlobal contextCSN: 20160619215244.315124Z#000000#000#000000 +olcTLSCertificateFile: /etc/ldap/ldap.pem +olcTLSCertificateKeyFile: /etc/ldap/ldap.key dn: cn=module{0},cn=config objectClass: olcModuleList @@ -1021,7 +1023,7 @@ olcDatabase: {0}config olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern al,cn=auth manage by * break olcRootDN: cn=config -olcRootPW: {{ re2o_ldap_replica.root_password_hash }} +olcRootPW: {{ re2o_ldap.root_password_hash }} structuralObjectClass: olcDatabaseConfig dn: olcOverlay={0}syncprov,olcDatabase={0}config,cn=config @@ -1035,52 +1037,52 @@ objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}hdb olcDbDirectory: /var/lib/ldap -olcSuffix: {{ re2o_ldap_replica.suffix }} +olcSuffix: {{ re2o_ldap.suffix }} olcAccess: {0}to attrs=userPassword,sambaNTPassword,mail by set="[cn=nounou,ou=posix,ou=groups,dc=crans,dc=org]/memberUid & user/uid" write by self write by anonymous auth - by dn="cn=admin,{{ re2o_ldap_replica.suffix }}" write - by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read - by group="cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" write + by dn="cn=admin,{{ re2o_ldap.suffix }}" write + by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read + by group="cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap.suffix }}" write by * none olcAccess: {1}to attrs=shadowLastChange,gecos,loginShell by set="[cn=nounou,ou=posix,ou=groups,dc=crans,dc=org]/memberUid & user/uid" write by self write by anonymous auth - by dn="cn=admin,{{ re2o_ldap_replica.suffix }}" write - by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read - by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read - by group="cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" write + by dn="cn=admin,{{ re2o_ldap.suffix }}" write + by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read + by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read + by group="cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap.suffix }}" write by * none olcAccess: {2}to dn.base="" by * read -olcAccess: {3}to dn.sub="ou=groups,{{ re2o_ldap_replica.suffix }}" +olcAccess: {3}to dn.sub="ou=groups,{{ re2o_ldap.suffix }}" by set="[cn=nounou,ou=posix,ou=groups,dc=crans,dc=org]/memberUid & user/uid" write - by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read - by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read -olcAccess: {4}to dn.base="cn=Utilisateurs,{{ re2o_ldap_replica.suffix }}" + by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read + by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read +olcAccess: {4}to dn.base="cn=Utilisateurs,{{ re2o_ldap.suffix }}" by * read -olcAccess: {5}to dn.sub="cn=Utilisateurs,{{ re2o_ldap_replica.suffix }}" - by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read +olcAccess: {5}to dn.sub="cn=Utilisateurs,{{ re2o_ldap.suffix }}" + by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read by set="[cn=nounou,ou=posix,ou=groups,dc=crans,dc=org]/memberUid & user/uid" write by self read - by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read - by group="cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" write -olcAccess: {6}to dn.sub="ou=service-users,{{ re2o_ldap_replica.suffix }}" + by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read + by group="cn=usermgmt,ou=services,ou=groups,{{ re2o_ldap.suffix }}" write +olcAccess: {6}to dn.sub="ou=service-users,{{ re2o_ldap.suffix }}" by set="[cn=nounou,ou=posix,ou=groups,dc=crans,dc=org]/memberUid & user/uid" write - by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read - by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read -olcAccess: {7}to dn.base="{{ re2o_ldap_replica.suffix }}" + by group="cn=auth,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read + by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read +olcAccess: {7}to dn.base="{{ re2o_ldap.suffix }}" by * read olcAccess: {8}to * by set="[cn=nounou,ou=posix,ou=groups,dc=crans,dc=org]/memberUid & user/uid" write - by dn="cn=admin,{{ re2o_ldap_replica.suffix }}" write + by dn="cn=admin,{{ re2o_ldap.suffix }}" write by self read - by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap_replica.suffix }}" read + by group="cn=readonly,ou=services,ou=groups,{{ re2o_ldap.suffix }}" read olcLastMod: TRUE -olcRootDN: cn=admin,{{ re2o_ldap_replica.suffix }} -olcRootPW: {{ re2o_ldap_replica.root_password_hash }} +olcRootDN: cn=admin,{{ re2o_ldap.suffix }} +olcRootPW: {{ re2o_ldap.root_password_hash }} olcDbCheckpoint: 512 30 olcDbConfig: {0}set_cachesize 0 2097152 0 olcDbConfig: {1}set_lk_max_objects 1500