Services/LDAP.md
... ...
@@ -1,51 +1,108 @@
1
-Lightweight Directory Access Protocol (LDAP)
2
-=======================================
1
+<!-- --- title: Infrastructure LDAP ResEl-->
3 2
4
-## Généralités
3
+# Description
5 4
6
-Le LDAP est la base de donnée centrale au ResEl. C'est dans cette base de donnée qu'est enregistré toutes les informations concernant les utilisateurs et leurs machines, ainsi que les serveurs du ResEl.
5
+Le **LDAP** est la base de donnée centrale au ResEl. C'est dans cette base de donnée que sont enregistrés toutes les informations concernant les utilisateurs et leurs machines, les clubs, ainsi que les serveurs du ResEl.
7 6
8
-Le LDAP est hébergé sur la machine [Beaune](Serveurs/Beaune) à Brest et [Lussac](Rennes/Serveurs/Lussac) à Rennes qui fait de la réplication LDAP. Le service utilisé est OpenLDAP.
7
+Le *LDAP* pour *Lightweight Directory Access Protocol* est à l'origine un [protocole](https://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) et sert de norme pour l'architecture d'un annuaire. Un **serveur LDAP** permet de gérer un arbre *LDAP*.
9 8
10
-**Important : Ne jamais lancer slapd en tant que root (flo ne le répétera assez)**
9
+
10
+# Mise en place
11
+
12
+Pour gérer le LDAP, le ResEl utilise la [suite](https://www.openldap.org/software/man.cgi?query=slapd) **OpenLDAP**, dont le serveur est **slapd** (pour *stand alone LDAP daemon*).
13
+
14
+Le serveur LDAP est hébergé sur la machine [Beaune](Serveurs/Beaune) à Brest et [Lussac](Rennes/Serveurs/Lussac) à Rennes qui fait de la réplication LDAP.
15
+
16
+Le serveur LDAP écoute sur *ldap.adm.resel.fr*, le port est *389* pour une connexion non-sécurisée ou *636* pour une connexion TLS.
17
+Le LDAP n'est accessible que depuis le vlan admin. Le DNS a une entrée *ldap.resel.fr* pointant vers le serveur selon le campus.
18
+
19
+En plus de cela, un service de synchronisation, **slurpd** (pour *Stand Alone Update Replication Daemon*), permet de synchroniser l'arbre entre les deux serveurs. *Beaune* est maître. Voir [replication]().
20
+
21
+Un script permet la vérification de l'intégrité du LDAP. Voir [intégrité]().
11 22
12 23
## Structure de l'arbre
13 24
14
- * dc=maisel,dc=enst-bretagne,dc=fr
15
- * ou=anciens
16
- * ou=club-old : ancienne branche, n'est plus utilisée
17
- * ou=clubs : ancienne branche, n'est plus utilisée
18
- * ou=divers
19
- * **ou=organisations** : associations et clubs du campus
20
- * **ou=people** : personnes inscrites au ResEl
21
- * **ou=webmasters** : tous les webmasters
22
- * dc=resel,dc=enst-bretagne,dc=fr
23
- * cn=replicator
24
- * **ou=admins** : admins ResEl
25
- * **ou=machines** : machines inscrites au ResEl
26
- * ou=reseau : switch du ResEl
27
- * ou=sites : sites web (fortement lié avec golf)
28
- * ou=snmp : alias snmp pour les différents switchs
29
-
30
-## Lire dans le LDAP
25
+ * **dc=maisel,dc=enst-bretagne,dc=fr**
26
+ * *ou=anciens*
27
+ * *ou=club-old* : ancienne branche, n'est plus utilisée
28
+ * *ou=clubs* : ancienne branche, n'est plus utilisée
29
+ * *ou=divers*
30
+ * *ou=organisations* : associations et clubs du campus
31
+ * *ou=people* : personnes inscrites au ResEl
32
+ * *ou=webmasters* : tous les webmasters
33
+ * **dc=resel,dc=enst-bretagne,dc=fr**
34
+ * *cn=replicator*
35
+ * *ou=admins* : admins ResEl
36
+ * *ou=machines* : machines inscrites au ResEl
37
+ * *ou=reseau* : switch du ResEl
38
+ * *ou=sites* : sites web (fortement lié avec golf)
39
+ * *ou=snmp* : alias snmp pour les différents switchs
40
+
41
+### Informations complémentaires sur les champs
42
+
43
+* Les machines du ResEl ( machines utilisateurs et serveur ) sont enregistrées dans le ldap avec un type `reselmachine` qui contient un champ `lastdate`. Ce champ `lastdate` permet de mettre les machines en zone inactive lorsqu'elle ne sont pas vues sur le réseau depuis un certains temps.
44
+
45
+# Utilisation
46
+
47
+**Important : Ne jamais lancer slapd en tant que root (flo ne le répétera assez)**
48
+## Côté Utilisateur
49
+
50
+Pour accéder au LDAP en tant qu'admin
51
+
52
+### Interfaces admins
31 53
32 54
Pour les lectures courantes (de la part d'administrateurs), il est conseillé d'utiliser [l'interface admin](https://admin.resel.fr). Vous ne risquez pas de faire trop de betises avec.
33 55
34
-Dans certains cas, il est nécessaire de faire des requêtes personnalisés. Dans ce cas il est conseillé d'utiliser [phpLdapAdmin](https://admin.resel.fr/phpldapadmin/). Sinon vous pouvez vous connecter sur [Beaune](Serveurs/Beaune) et lancer `ldapvi` dessus :
56
+Dans certains cas, il est nécessaire de faire des requêtes personnalisés. Dans ce cas il est conseillé d'utiliser [phpLdapAdmin](https://admin.resel.fr/phpldapadmin/).
57
+
58
+### Manuellement
35 59
60
+#### Lire dans le LDAP
61
+
62
+**ldapvi** est un éditeur en ligne de commande qui ouvre l'ensemble du LDAP dans votre éditeur de texte préféré, défini dans la variable `$EDITOR`. Pour l'utiliser, voilà deux solutions :
63
+
64
+* Se connecter sur [Beaune](Serveurs/Beaune) et lancer `ldapvi` dessus :
36 65
```
37 66
ldapvi --discover
38 67
```
39
-
40 68
Si vous avez les droits nécessaire, vous pouvez faire les modifications que vous voulez.
69
+* En local, éditer `~/.ldaprc`
70
+```
71
+HOST ldap.adm.resel.fr
72
+BINDDN uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr
73
+TLS_CACERT chemin/vers/ca.pem
74
+```
75
+Puis on peut lancer :
76
+```
77
+ldapvi -d -D uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr
78
+```
79
+
80
+#### Export avec ldapsearch
81
+
82
+On peut exporter des portions du *LDAP* au format *LDIF* avec **ldapsearch** :
83
+```
84
+ldapsearch -LLL -x -H ldap://lussac.adm.maisel.rennes.enst-bretagne.fr -b "dc=resel,dc=enst-bretagne,dc=fr"
85
+
86
+ -LLL Affichage au format LDIF (sans commentaires, sans version LDIF)
87
+ -x Authentification simple (sans utiliser SASL)
88
+ -D dn DN de connexion
89
+ -W Demande le mot de passe
90
+ -h uri URI du serveur LDAP
91
+ -b base Base de la recherche
92
+ -s scope Etendue de la recherche (base, one, sub)
93
+ -S "attr" trie selon l'attribut
94
+```
41 95
42
-Si vous avez besoin d'accéder au ldap dans des scripts il existe quelques ressources sur internet :
96
+### Scripting
97
+
98
+Si vous avez besoin d'accéder au ldap dans des scripts, ou depuis quelconque code d'un projet ResEl il existe quelques ressources sur internet :
43 99
* https://www.python-ldap.org/
44 100
* https://github.com/pyldap/pyldap
45 101
46
-### La syntaxe LDAP
102
+### Les filtres LDAP
47 103
48
-La syntaxe pour faire une recherche LDAP est relativement simple :
104
+Pour faire des recherches, on peut utiliser des filtres.
105
+La syntaxe pour faire ces filtres suit la notation polonaise inversée :
49 106
```
50 107
(OPERATEUR_BOOLÉEN(attribut OPERATEUR_BINAIRE valeur)(attribut OPERATEUR_BINAIRE valeur)...)
51 108
```
... ...
@@ -84,7 +141,7 @@ Toutes les personnes dont le nom ressemble à Febvre (Faivre, Fèvre, Lefebvre,
84 141
(&(objectclass=person)(cn~=febvre))
85 142
```
86 143
87
-Idem que le premier exemple en excluant la branche eou=club-old,dc=maisel,dc=enst-bretagne,dc=fr :
144
+Idem que le premier exemple en excluant la branche `ou=club-old,dc=maisel,dc=enst-bretagne,dc=fr` :
88 145
```
89 146
(&(|(uid=*musique*)(firstname=*musique*)(lastname=*musique*)(nickname=*musique*)(orgaName=*musique*))
90 147
(!(entryDN:dnSubtreeMatch:=ou=club-old,dc=maisel,dc=enst-bretagne,dc=fr)))
... ...
@@ -92,18 +149,18 @@ Idem que le premier exemple en excluant la branche eou=club-old,dc=maisel,dc=ens
92 149
93 150
### Les URL et URI LDAP
94 151
95
-Afin d'accéder rapidement à une ressource, nous pouvons utiliser une url ldap de la forme suivance :
152
+Afin d'accéder rapidement à une ressource, nous pouvons utiliser une url ldap de la forme suivante :
96 153
```
97 154
ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>?<extensions>
98 155
```
99 156
100 157
avec les paramètres suivants:
101 158
* `hostname` : Adresse du serveur. L'adresse peut être absente, le client est supposé connaître un serveur LDAP à contacter, en fonction du contexte.
102
- * `port` : Port TCP de la connexion. Par défaut il s'agit du port 389. Il ne peut y avoir de port s'il n'y a pas d'adresse.
159
+ * `port` : Port TCP de la connexion. Il ne peut y avoir de port s'il n'y a pas d'adresse.
103 160
* `base_dn` : DN de l'entrée qui est le point de départ de la recherche.
104 161
* `attributes` : Les attributs que l'on veut récupérer, séparés par des virgules.
105 162
106
-Si la valeur n'est pas remplie, ou si elle est rempli avec une '''*''', tous les attributs d'usage userApplication doivent être retournés.
163
+Si la valeur n'est pas remplie, ou si elle est rempli avec une `*`, tous les attributs d'usage `userApplication` doivent être retournés.
107 164
* `scope` : La profondeur de la recherche dans l'arbre : base, one ou sub.
108 165
* `filter` : Le filtre de recherche, tel que nous venons de le définir. Le filtre par défaut est (objectClass=*).
109 166
* `extensions` : Les extensions sont un moyen pour pouvoir ajouter des fonctionnalités aux URLs
... ...
@@ -118,60 +175,50 @@ Les genericPerson dans la branche dc=maisel,dc=enst-bretagne,dc=fr
118 175
ldaps://ldap.resel.fr:636/dc=maisel,dc=enst-bretagne,dc=fr??sub?(objectclass=genericPerson)
119 176
```
120 177
121
-## Écrire dans le LDAP
122
-
123
-Pour la plupart des modifications faites dans le LDAP (ajout de machine ou de personne) il est recommandé de passer par le [site admin](https://admin.resel.fr/)
124
-
125
-Pour d'autres modifications plus avancées vous pouvez utiliser [phpLdapAdmin](https://admin.resel.fr/phpadmin.resel.fr)
126
-
127
-Si vraiment vous voulez tout casser, il vous reste quelques solutions : :)
128
-
129
-### ldapvi
130
-
131
-ldapvi est un éditeur en ligne de commande qui ouvre l'ensemble du LDAP dans votre éditeur de texte préféré, défini dans la variable `$EDITOR`. Pour l'utiliser, voilà une solution :
132
-
133
-Éditer `~/.ldaprc`
178
+#### Ajout d'un nouveau switch
134 179
180
+ObjectClass?: reselMachine Importer dans le LDAP en remplacant host par le nom du switch :
135 181
```
136
-# ~/.ldaprc
137
-
138
-HOST ldap.maisel.enst-bretagne.fr
139
-BINDDN uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr
140
-TLS_CACERT chemin/vers/ca.pem
182
+dn: host=pessac,ou=machines,dc=resel,dc=enst-bretagne,dc=fr
183
+host: pessac
184
+objectClass: reselMachine
185
+uidProprio: uid=reselMachine,ou=people,dc=maisel,dc=enst-bretagne,dc=fr
186
+zone: Rennes
187
+zone: SW-Adm
188
+ipHostNumber: 0.7
189
+lastDate: 20101017000000Z
190
+macAddress: 00:1c:57:4b:42:41
191
+
192
+ObjectClass?: reselSwitch
141 193
```
142 194
143
-Se créer un alias pour le lancer comme il faut, c'est-à-dire :
195
+Importer dans le LDAP en remplacant l'ou=C1 par l'emplacement du switch, le cn et host par le nom du switch. Il faut aussi incrémenter unite:
144 196
```
145
-ldapvi -d -D uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr
197
+dn: cn=pessac,ou=C1,ou=reseau,dc=resel,dc=enst-bretagne,dc=fr
198
+objectClass: reselSwitch
199
+cn: pessac
200
+machine: host=pessac,ou=machines,dc=resel,dc=enst-bretagne,dc=fr
201
+switchType: type=C3750,ou=snmp,dc=resel,dc=enst-bretagne,dc=fr
202
+unite: 1
146 203
```
147 204
148
-Il faut rajouter cette ligne à votre .zshrc ou .bashrc (en modifiant le login) :
149
-```
150
-alias ldapresel="ldapvi -d -D uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr"
151
-```
152
-Il vous suffira ensuite de taper "ldapresel".
205
+# Configuration
206
+*On ne le saura peut être jamais...*
153 207
208
+:warning: La configuration du LDAP fait l'objet d'un versionnage sur le dépôt Git [confs/LDAP](https://git.resel.fr/confs/ldap/). N'oubliez pas de commitez vos modifications !
154 209
155
-## Configuration et installation
156
-*On ne le saura peut être jamais...*
157
-[Voir le repo Git](https://git.resel.fr/confs/ldap/)
210
+### Gestion du daemon
158 211
159
-### Lancement du daemon
212
+Le *daemon* est géré par un simple service SysVinit.
160 213
161
-Pour redémarrer le daemon en cas de modification :
214
+On peut le contrôler avec :
162 215
```bash
163
-service slapd restart
216
+service slapd (start|stop|restart|status)
164 217
```
165 218
166
-Veuillez utiliser l'utilitaire `slaptest` pour tester la configuration avant de relancer le serveur
167
-
168
-
169
-## Informations complémentaires sur le LDAP
170
-
171
-Les machines du ResEl ( machines utilisateurs et serveur ) sont enregistrées dans le ldap avec un type `reselmachine` qui contient un champ `lastdate`.
172
-
173
-Ce champ `lastdate` permet de mettre les machines en zone inactive lorsqu'elle ne sont pas vues sur le réseau depuis un certains temps.
219
+Veuillez utiliser l'utilitaire `slaptest` pour tester la configuration avant de relancer le serveur.
174 220
221
+### Vérification de l'intégrité
175 222
176 223
Le script check_ldap.pl situé sur Beaune qui vérifie l'intégrité du LDAP.
177 224
-> il est disponible ici : https://git.resel.fr/resel/scripts/blob/master/ldap/check_ldap.pl
... ...
@@ -237,6 +284,11 @@ Le script check_ldap.pl situé sur Beaune qui vérifie l'intégrité du LDAP.
237 284
238 285
(TODO: Le nouveau site ne le gérant pas encore, ça serait pas très utile de le documenter maintenant)
239 286
287
+Sur l'ancien site admin RA2 :
288
+
289
+Lorsqu'un personne enregistré auprès de l'école, souhaite un accès au resel, il est possible de récupèrer son compte depuis le ldap de l'école.
290
+Il suffit d'aller dans ​RA2 , dans synchro ldap, ​https://admin.resel.fr/ldap/synchro.php , puis de remplir le champ de recherche avec un filtre de recherche ldap.
291
+
240 292
## Réplication Brest-Rennes
241 293
242 294
On utilise pour la réplication SyncRepl, voir la configuration dans le [git](https://git.resel.fr/confs/ldap)
... ...
@@ -252,26 +304,24 @@ Documentation sur la réplication LDAP:
252 304
* [Documentation officielle](http://www.openldap.org/doc/admin24/replication.html)
253 305
* [Article plus pratique](http://www.vogelweith.com/debian_server/050_openldap.php#x1-210005)
254 306
255
-## Bugs connus
307
+
308
+# Bugs connus
256 309
257 310
* Janvier 2016 : Il y a une erreur au démarrage, pour que cela fonctionne il faut le lancer le démon slapd en mode débug.
258 311
259
-## Ressources utiles
312
+# Liens utiles
313
+
314
+## Articles connexes
315
+* [Beaune](Serveurs/Beaune)
316
+
317
+## Ressources externes
260 318
* [Page Wikipedia sur le LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol)
261 319
* [Le manuel de ldapvi](http://www.lichteblau.com/ldapvi/manual/)
262 320
* [OpenLDAP](http://www.openldap.org/)
263 321
* [Repo de la configuration](https://git.resel.fr/confs/ldap/)
322
+* [Note sur la synchro LDAP](www.admin-linux.fr/?p=715)
264 323
265
-## Articles liés
266
-* [Beaune](Serveurs/Beaune)
267
-
268
-## TODO (rédacteur)
324
+# TODO (rédacteur)
269 325
* Synchro LDAP
270 326
* Installation et configuration
271
-* Documentation de certains objets LDAP et l'utilité de chacun de leur champs
272
-------
273
-
274
-Rédigé depuis :
275
-* https://trac.resel.fr/wiki/Services/LDAP
276
-* https://trac.resel.fr/wiki/Doc/Howto/LDAP
277
-* https://redmine.resel.fr/projects/netservices/wiki/LDAP
327
+* Documentation de certains objets LDAP et l'utilité de chacun de leur champs
... ...
\ No newline at end of file