0bcb9e2e74398e67c6af0a09f613dbaeaee2bebd
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 |