Ldap-replica » Historique » Version 1
Pierre-Arnaud Poudret, 05/06/2013 15:46
1 | 1 | Pierre-Arnaud Poudret | h1. Réplication LDAP |
---|---|---|---|
2 | |||
3 | Configuration d'une première réplique du serveur LDAP maître. |
||
4 | |||
5 | * Attribution d'un identifiant au serveur esclave |
||
6 | * Création d'un utilisateur permettant au serveur esclave de se connecter au maître |
||
7 | * Configuration sur le serveur maître |
||
8 | * Configuration sur le serveur esclave |
||
9 | |||
10 | h1. Attribution d'un RID |
||
11 | |||
12 | Le RID est un identifiant numérique unique au sein des serveurs LDAP "esclaves". |
||
13 | |||
14 | La première réplique du LDAP aura le RID 1. C'est la valeur qui sera utilisé dans ce document. |
||
15 | La seconde réplique du LDAP aura le RID 2, etc... |
||
16 | |||
17 | On utilisera ce RID pour indexer également |
||
18 | * les noms DNS des serveurs LDAP |
||
19 | * les users dédiés à la réplication |
||
20 | |||
21 | => le serveur maître sera nommé ldap0.illyse.org |
||
22 | |||
23 | => la première réplique aura le RID 1, sera nommée ldap1.illyse.org, et se connectera au serveur maître en tant que cn=ldaprep1,ou=services,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR |
||
24 | |||
25 | => la seconde réplique aura le RID 2, sera nommée ldap2.illyse.org, et se connectera au serveur maître en tant que cn=ldaprep2,ou=services,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR |
||
26 | |||
27 | => etc |
||
28 | |||
29 | +Note+: un nom "global" ldap.illyse.org sera également défini sur le DNS, et possèdera des enregistrement A pointant sur les IP de tous les serveurs LDAP (ldap0.illyse.org, ldap1.illyse.org, ldap2.illyse.org...). Les services seront paramétrés pour attaquer ldap.illyse.org, et utiliseront donc indifféremment l'un des serveurs LDAP disponibles. |
||
30 | |||
31 | |||
32 | h1. Création d'un utilisateur pour la réplication |
||
33 | |||
34 | h2. Utilisateur du LDAP |
||
35 | |||
36 | Se connecter en tant que _cn=admin,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR_ sur le LDAP maître. |
||
37 | |||
38 | Sous _ou=services_, créer l'utilisateur _cn=ldaprep1_, dédié à la réplication. |
||
39 | (classe organizationalRole - choix un peu arbitraire) |
||
40 | <pre> |
||
41 | dn: cn=ldaprep1,ou=services,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR |
||
42 | objectClass: organizationalRole |
||
43 | objectClass: top |
||
44 | cn: ldaprep1 |
||
45 | </pre> |
||
46 | |||
47 | Note: on ne définit volontairement pas de mot de passe pour cet utilisateur. Un certificat sera nécessaire pour se connecter en tant que cn=ldaprep1. |
||
48 | |||
49 | h2. Modification des ACL |
||
50 | |||
51 | Se connecter en tant que _cn=admin,cn=config_ sur le LDAP maître. |
||
52 | |||
53 | Pour permettre la réplication, cn=ldaprep1 a besoin de droits en lecture sur l'intégralité de l'annuaire. |
||
54 | |||
55 | On ajoute aux différentes clauses la règle _by ssf=128 dn="cn=ldaprep1,ou=services,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR" read_. |
||
56 | |||
57 | <pre> |
||
58 | olcAccess: {0}to attrs=userPassword,shadowLastChange by ssf=128 self write b |
||
59 | y anonymous auth by ssf=128 dn="cn=ldaprep1,ou=services,o=ILLYSE,l=Villeurb |
||
60 | anne,st=RHA,c=FR" read by users none by * none |
||
61 | olcAccess: {3}to dn.base="" by * read |
||
62 | olcAccess: {4}to * by ssf=128 self write by ssf=128 dn="cn=ldaprep1,ou=servi |
||
63 | ces,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR" read by users none by * none |
||
64 | </pre> |
||
65 | |||
66 | h2. Certificats et clés privée |
||
67 | |||
68 | On utilise la [[PKI]] pour générer un certificat serveur et une clé privée pour _ldap1.illyse.org_ (cf [[ldap-pki]]). |
||
69 | |||
70 | On utilise la [[PKI]] pour générer un certificat client et une clé privée pour _cn=ldaprep1_. |
||
71 | |||
72 | Les certificats et les clés sont placés sur le LDAP esclave dans /etc/ldap. (FIXME) |
||
73 | Ne pas oublier le certificat de la CA. |
||
74 | |||
75 | <pre> |
||
76 | root@kirkwood:/etc/ldap# ls -al *.crt *.key |
||
77 | -rw-r--r-- 1 openldap openldap 1797 Oct 16 23:08 ca.crt |
||
78 | -rw-r--r-- 1 openldap openldap 5649 Oct 17 13:36 ldap1.illyse.org.crt |
||
79 | -rw------- 1 openldap openldap 1675 Oct 17 13:36 ldap1.illyse.org.key |
||
80 | -rw-r--r-- 1 openldap openldap 5325 Oct 16 23:08 ldaprep1.crt |
||
81 | -rw------- 1 openldap openldap 1675 Oct 16 23:08 ldaprep1.key |
||
82 | </pre> |
||
83 | |||
84 | h1. Configuration sur le serveur maître |
||
85 | |||
86 | Se connecter en tant que cn=admin,cn=config sur le serveur maître. |
||
87 | |||
88 | Le serveur "maître" est dit _provider_. |
||
89 | |||
90 | Modifier _cn=module{0},cn=config_: ajouter un attribut olcModuleLoad de valeur {1}syncprov |
||
91 | |||
92 | LDIF |
||
93 | <pre> |
||
94 | dn: cn=module{0},cn=config |
||
95 | objectClass: olcModuleList |
||
96 | cn: module{0} |
||
97 | olcModuleLoad: {0}back_hdb |
||
98 | olcModuleLoad: {1}syncprov |
||
99 | olcModulePath: /usr/lib/ldap |
||
100 | </pre> |
||
101 | |||
102 | Ajouter une nouvelle entrée sous _olcDatabase={1}hdb,cn=config_: clic-droit sur olcDatabase={1}hdb,cn=config / Nouveau / Nouvelle entrée |
||
103 | * classe olcSyncProvConfig (Note: dans la fenêtre de sélection de classes d'ADS, j'ai du jouer avec le bouton de rafraichissement pour faire apparaître cette classe - bug dans ADS?) |
||
104 | * RDN=olcOverlay |
||
105 | * olcOverlay={0}syncprov |
||
106 | |||
107 | Le serveur est maintenant configuré en tant que provider. Les serveurs esclaves peuvent s'y connecter pour répliquer son contenu. |
||
108 | |||
109 | h1. Configuration sur les serveurs esclaves |
||
110 | |||
111 | Le serveur "esclave" est dit _consumer_. |
||
112 | |||
113 | Se connecter en tant que cn=config |
||
114 | |||
115 | Il suffit d'ajouter à l'objet _olcDatabase={1}hdb,cn=config_ un attribut indiquant comment contacter le provider: |
||
116 | |||
117 | <pre> |
||
118 | olcSyncrepl: {0}rid=1 provider=ldap://ldap0.illyse.org:389 type=refreshAndPe |
||
119 | rsist retry="60 10 300 +" searchbase="o=ILLYSE,l=Villeurbanne,st=RHA,c=FR" |
||
120 | schemachecking=on bindmethod=sasl saslmech=external starttls=critical tls_c |
||
121 | ert=/etc/ldap/ldaprep1.crt tls_key=/etc/ldap/ldaprep1.key tls_cacert=/etc/l |
||
122 | dap/ca.crt tls_reqcert=demand |
||
123 | </pre> |