From 19685dc466fcf14936a3fe262f3f484804f01211 Mon Sep 17 00:00:00 2001 From: Benjamin Graillot <graillot@crans.org> Date: Fri, 17 Jul 2020 22:32:14 +0200 Subject: [PATCH] [slapd] added slapd role --- ldap.yml | 11 ++ roles/slapd/handlers/main.yml | 6 + roles/slapd/tasks/main.yml | 30 ++++ roles/slapd/templates/ldap/slapd.conf.j2 | 195 +++++++++++++++++++++++ 4 files changed, 242 insertions(+) create mode 100755 ldap.yml create mode 100644 roles/slapd/handlers/main.yml create mode 100644 roles/slapd/tasks/main.yml create mode 100644 roles/slapd/templates/ldap/slapd.conf.j2 diff --git a/ldap.yml b/ldap.yml new file mode 100755 index 00000000..04c56eaf --- /dev/null +++ b/ldap.yml @@ -0,0 +1,11 @@ +#!/usr/bin/env ansible-playbook +--- +- hosts: daniel.adm.crans.org + vars: + ldap: + replica: true + master_ip: 172.16.1.1 # faire une query pour l'adresse de tealc sur le ldap + replica_rid: 2 + ip: 172.16.1.12 + roles: + - slapd diff --git a/roles/slapd/handlers/main.yml b/roles/slapd/handlers/main.yml new file mode 100644 index 00000000..c8b9f3c0 --- /dev/null +++ b/roles/slapd/handlers/main.yml @@ -0,0 +1,6 @@ +--- + +- name: Restart slapd + service: + name: slapd.service + state: restarted diff --git a/roles/slapd/tasks/main.yml b/roles/slapd/tasks/main.yml new file mode 100644 index 00000000..f1ff8b87 --- /dev/null +++ b/roles/slapd/tasks/main.yml @@ -0,0 +1,30 @@ +--- +- name: Install slapd + apt: + update_cache: true + name: + - slapd + register: apt_result + retries: 3 + until: apt_result is succeeded + +- name: Remove slapd config directory + files: + path: /etc/ldap/slapd.d/ + state: absent + +- name: Deploy slapd configuration + template: + src: ldap/slapd.conf.j2 + dest: /etc/slapd/slapd.conf + mode: 0600 + owner: openldap + group: openldap + notify: Restart slapd + +- name: Deploy ldap services + lineinfile: + path: /etc/default/slapd + regexp: '^SLAPD_SERVICES=' + line: 'SLAPD_SERVICES="ldaps://{{ ldap.ip }}/ ldapi:///"' + notify: Restart slapd diff --git a/roles/slapd/templates/ldap/slapd.conf.j2 b/roles/slapd/templates/ldap/slapd.conf.j2 new file mode 100644 index 00000000..95f92a54 --- /dev/null +++ b/roles/slapd/templates/ldap/slapd.conf.j2 @@ -0,0 +1,195 @@ +# This is the main slapd configuration file. See slapd.conf(5) for more +# info on the configuration options. + +####################################################################### +# Global Directives: + +# Schema and objectClass definitions +include /etc/ldap/schema/core.schema +include /etc/ldap/schema/cosine.schema +include /etc/ldap/schema/nis.schema +include /etc/ldap/schema/inetorgperson.schema + +# Where the pid file is put. The init.d script +# will not stop the server if you change this. +pidfile /var/run/slapd/slapd.pid + +# List of arguments that were passed to the server +argsfile /var/run/slapd/slapd.args + +# Read slapd.conf(5) for possible values +loglevel none + +# Where the dynamically loaded modules are stored +modulepath /usr/lib/ldap +moduleload back_mdb +{% if not ldap.replica %} +moduleload auditlog + +overlay auditlog +auditlog /var/log/openldap/auditlog.log + +moduleload syncprov +{% endif %} + +# TODO FAIRE LES CERTIFICATS +# TLS Certificates +#TLSCipherSuite HIGH:MEDIUM:-SSLv2:-SSLv3 +#TLSCACertificateFile /etc/ssl/certs/ServENS.crt +#TLSCertificateFile /etc/ldap/ldap.pem +#TLSCertificateKeyFile /etc/ldap/ldap.key + +# The maximum number of entries that is returned for a search operation +sizelimit 500 + +# The tool-threads parameter sets the actual amount of cpu's that is used +# for indexing. +tool-threads 1 + +####################################################################### +# Specific Backend Directives for mdb: +# Backend specific directives apply to this backend until another +# 'backend' directive occurs +backend mdb + +####################################################################### +# Specific Backend Directives for 'other': +# Backend specific directives apply to this backend until another +# 'backend' directive occurs +#backend <other> + +####################################################################### +# Specific Directives for database #1, of type mdb: +# Database specific directives apply to this databasse until another +# 'database' directive occurs +database mdb + +# The base of your directory in database #1 +suffix "dc=crans,dc=org" + +# rootdn directive for specifying a superuser on the database. This is needed +# for syncrepl. +rootdn "cn=admin,dc=crans,dc=org" + +# Where the database file are physically stored for database #1 +directory "/var/lib/ldap" + +# The dbconfig settings are used to generate a DB_CONFIG file the first +# time slapd starts. They do NOT override existing an existing DB_CONFIG +# file. You should therefore change these settings in DB_CONFIG directly +# or remove DB_CONFIG and restart slapd for changes to take effect. + +# For the Debian package we use 2MB as default but be sure to update this +# value if you have plenty of RAM +#dbconfig set_cachesize 0 2097152 0 + +# Sven Hartge reported that he had to set this value incredibly high +# to get slapd running at all. See http://bugs.debian.org/303057 for more +# information. + +# Number of objects that can be locked at the same time. +#dbconfig set_lk_max_objects 1500 +# Number of locks (both requested and granted) +#dbconfig set_lk_max_locks 1500 +# Number of lockers +#dbconfig set_lk_max_lockers 1500 + +# Indexing options for database #1 +index objectClass eq + +# Save the time that the entry gets modified, for database #1 +lastmod on + +# Checkpoint the BerkeleyDB database periodically in case of system +# failure and to speed slapd shutdown. +checkpoint 512 30 + +{% if ldap.replica %} +syncrepl + rid={{ ldap.replica_rid }} + provider=ldaps://{{ ldap.master_ip }}:636 + bindmethod=simple + binddn="cn=replicator,dc=crans,dc=org" + credentials=test1234 # TODO cranspasswords + searchbase="dc=crans,dc=org" + schemachecking=on + type=refreshOnly + interval=00:00:10:00 + scope=sub + tls_reqcert=allow +{% endif %} + +{% if ldap.replica %} +# The userPassword by default can be changed +# by the entry owning it if they are authenticated. +# Others should not be able to see it, except the +# admin entry below +# These access lines apply to database #1 only +access to attrs=userPassword,shadowLastChange + by anonymous auth + by * none + +# Ensure read access to the base for things like +# supportedSASLMechanisms. Without this you may +# have problems with SASL not knowing what +# mechanisms are available and the like. +# Note that this is covered by the 'access to *' +# ACL below too but if you change that as people +# are wont to do you'll still need this if you +# want SASL (and possible other things) to work +# happily. +access to dn.base="" by * read + +# The admin dn has full write access, everyone else +# can read everything. +access to * + by * read +{% else %} +overlay syncprov + +# The userPassword by default can be changed +# by the entry owning it if they are authenticated. +# Others should not be able to see it, except the +# admin entry below +# These access lines apply to database #1 only +access to attrs=userPassword,shadowLastChange + by anonymous auth + by self write + by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write + by dn="cn=replicator,dc=crans,dc=org" read + by * none + +access to attrs=loginShell,mail,telephoneNumber + by self write + by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write + by dn="cn=replicator,dc=crans,dc=org" read + by * read + +# Ensure read access to the base for things like +# supportedSASLMechanisms. Without this you may +# have problems with SASL not knowing what +# mechanisms are available and the like. +# Note that this is covered by the 'access to *' +# ACL below too but if you change that as people +# are wont to do you'll still need this if you +# want SASL (and possible other things) to work +# happily. +access to dn.base="" by * read + +# The admin dn has full write access, everyone else +# can read everything. +access to * + by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write + by dn="cn=replicator,dc=crans,dc=org" read + by * read +{% endif %} + + +####################################################################### +# Specific Directives for database #2, of type 'other' (can be mdb too): +# Database specific directives apply to this databasse until another +# 'database' directive occurs +#database <other> + +# The base of your directory for database #2 +#suffix "dc=debian,dc=org" -- GitLab