Services/LDAP.md
... ...
@@ -100,23 +100,23 @@ Classes définies :
100 100
101 101
# Utilisation
102 102
103
-### Interfaces admins
103
+### Interfaces admin
104 104
105
-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.
105
+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 bétises avec.
106 106
107
-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/).
107
+Dans certains cas, il est nécessaire de faire des requêtes personnalisées. Dans ce cas il est conseillé d'utiliser [phpLdapAdmin](https://admin.resel.fr/phpldapadmin/).
108 108
109 109
### Manuellement
110 110
111 111
#### Lire dans le LDAP
112 112
113
-**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 :
113
+**ldapvi** est un éditeur en ligne de commande qui ouvre l'ensemble du LDAP dans votre éditeur de texte préféré, défini par la variable `$EDITOR`. Pour l'utiliser, voilà deux solutions :
114 114
115 115
* Se connecter sur [Beaune](/Serveurs/Beaune) et lancer `ldapvi` dessus :
116 116
```
117 117
ldapvi --discover
118 118
```
119
-Si vous avez les droits nécessaire, vous pouvez faire les modifications que vous voulez.
119
+Si vous avez les droits nécessaires, vous pouvez faire les modifications que vous voulez.
120 120
* En local, éditer `~/.ldaprc`
121 121
```
122 122
HOST ldap.adm.resel.fr
... ...
@@ -145,16 +145,16 @@ ldapsearch -LLL -x -H ldap://lussac.adm.maisel.rennes.enst-bretagne.fr -b "dc=re
145 145
```
146 146
#### Répliquer une branche du LDAP
147 147
148
-Il arrive que l'on ait besoin de répliquer une ou plusieurs branches du LDAP, lors d'une update par exemple, ou une désynchronysation entre un LDAP de Brest et de Rennes.
149
-Pour ce faire, on commence par récupérer la branche au format *LDIF*, soit en utilisant la commande précédente ou l'ensemble de la branche, soit en utilisant **slapcat**:
148
+Il arrive que l'on ait besoin de répliquer une ou plusieurs branches du LDAP, lors d'une mise à jour, ou dans le cas d'une désynchronisation entre les LDAP de Brest et de Rennes par exemple.
149
+Pour ce faire, on commence par récupérer la branche au format *LDIF*, soit en utilisant la commande précédente, soit en utilisant **slapcat**:
150 150
```
151 151
slapcat -n dbnum > mon_fichier.ldif
152 152
153
- -n spécifie le numéro de la base de données. À l'heure où ces lignes sont écrites, la branche maisel est sur la base de données N°1, et la branche ResEl sur la N°2
153
+ -n spécifie le numéro de la base de données. À l'heure où ces lignes sont écrites, la branche Maisel est sur la base de données N°1, et la branche ResEl sur la N°2
154 154
```
155 155
**À vérifier** il peut être bon de supprimer la branche concernée avant de l'importer dans **/var/lib/ldap**
156 156
157
-Pour ajouter la sauvegarde *après avoir coupé le service sldap*, on utilise **slapadd** **en utilisant screen ou tmux** , cette action étant très longue, une coupure de connexion peut lui être fatale.:
157
+Pour ajouter la sauvegarde *après avoir coupé le service sldap*, on utilise **slapadd** **en utilisant screen ou tmux**. Cette action étant très longue, une coupure de connexion peut lui être fatale.
158 158
```
159 159
slapadd -l mon_fichier.ldif -c
160 160
... ...
@@ -163,21 +163,21 @@ slapadd -l mon_fichier.ldif -c
163 163
-q effectue moins de vérifications (plus rapide mais risque de corruption)
164 164
```
165 165
166
-**Attention** si *slapadd* est exécuté en root, il fait donner les droits au LDAP sinon slapd ne démarre pas:
166
+**Attention** si *slapadd* est exécuté en root, il faut donner les droits au LDAP sinon slapd ne démarre pas:
167 167
```
168 168
chown -R openldap:openldap /var/lib/ldap
169 169
```
170 170
171 171
### Scripting
172 172
173
-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 :
173
+Si vous avez besoin d'accéder au ldap dans des scripts, ou depuis un quelconque code d'un projet ResEl, il existe quelques ressources sur internet :
174 174
* https://www.python-ldap.org/
175 175
* https://github.com/pyldap/pyldap
176 176
177 177
### Les filtres LDAP
178 178
179 179
Pour faire des recherches, on peut utiliser des filtres.
180
-La syntaxe pour faire ces filtres suit la notation polonaise inversée :
180
+La syntaxe pour faire ces filtres suit la notation polonaise :
181 181
```
182 182
(OPERATEUR_BOOLÉEN(attribut OPERATEUR_BINAIRE valeur)(attribut OPERATEUR_BINAIRE valeur)...)
183 183
```
... ...
@@ -224,7 +224,7 @@ Idem que le premier exemple en excluant la branche `ou=club-old,dc=maisel,dc=ens
224 224
225 225
### Les URL et URI LDAP
226 226
227
-Afin d'accéder rapidement à une ressource, nous pouvons utiliser une url ldap de la forme suivante :
227
+Afin d'accéder rapidement à une ressource, nous pouvons utiliser une URL LDAP de la forme suivante :
228 228
```
229 229
ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>?<extensions>
230 230
```
... ...
@@ -235,12 +235,10 @@ avec les paramètres suivants:
235 235
* `base_dn` : DN de l'entrée qui est le point de départ de la recherche.
236 236
* `attributes` : Les attributs que l'on veut récupérer, séparés par des virgules.
237 237
238
-Si la valeur n'est pas remplie, ou si elle est rempli avec une `*`, tous les attributs d'usage `userApplication` doivent être retournés.
238
+Si la valeur n'est pas remplie, ou si elle est remplie avec un `*`, tous les attributs d'usage `userApplication` doivent être retournés.
239 239
* `scope` : La profondeur de la recherche dans l'arbre : base, one ou sub.
240 240
* `filter` : Le filtre de recherche, tel que nous venons de le définir. Le filtre par défaut est (objectClass=*).
241
- * `extensions` : Les extensions sont un moyen pour pouvoir ajouter des fonctionnalités aux URLs
242
-
243
-LDAP tout en gardant la même syntaxe. On peut mettre inclure plusieurs extensions dans une URL, en les séparant par des `,`.
241
+ * `extensions` : Les extensions sont un moyen pour pouvoir ajouter des fonctionnalités aux URL LDAP tout en gardant la même syntaxe. On peut inclure plusieurs extensions dans une URL, en les séparant par des `,`.
244 242
245 243
Les extensions ont le format suivant : `type=value`. La partie `=value` est optionnelle. Elle peuvent être préfixée par un ! pour signaler une extension critique. Une extension critique signifie que le client et le serveur doivent supporter tous les deux l'extension, sinon une erreur sera levée.
246 244
... ...
@@ -267,7 +265,7 @@ macAddress: 00:1c:57:4b:42:41
267 265
ObjectClass: reselSwitch
268 266
```
269 267
270
-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:
268
+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 :
271 269
```
272 270
dn: cn=pessac,ou=C1,ou=reseau,dc=resel,dc=enst-bretagne,dc=fr
273 271
objectClass: reselSwitch
... ...
@@ -279,7 +277,7 @@ unite: 1
279 277
280 278
# Configuration
281 279
282
-: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 !
280
+: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 commiter vos modifications !
283 281
284 282
La configuration du serveur *slapd* se trouve sur [Beaune](/Serveurs/Beaune) et [Lussac](/Serveurs/Lussac) dans `/etc/ldap`.
285 283
... ...
@@ -296,13 +294,14 @@ Le dépôt contient la configuration du maître (Beaune), et de l'esclave (Lussa
296 294
L'utilitaire `slaptest` permet de tester la validité de la configuration du serveur.
297 295
298 296
Le *daemon* est géré par un simple service SysVinit : ```service slapd (start|stop|restart|status)```
297
+
299 298
**Important : Ne jamais lancer slapd en tant que root**
300 299
301 300
### Général
302 301
303 302
Voici des éléments importants de la configuration du LDAP :
304 303
305
-Dans `master.cf`, on commence par définir divers paramètres de fonctionnement du serveur, on inclut les fichiers de configurations annexes, notemment les schémas LDAP.
304
+Dans `master.cf`, on commence par définir divers paramètres de fonctionnement du serveur, on inclut les fichiers de configurations annexes, notamment les schémas LDAP.
306 305
307 306
```conf
308 307
include /etc/ldap/schema/resel-14628.schema
... ...
@@ -311,7 +310,7 @@ include /etc/ldap/access-master.ldap
311 310
312 311
La première ligne inclut les schémas spécifiques au ResEl, la seconde inclut les règles d'accès aux éléments du LDAP en configurant les droits. Voir les parties suivantes pour plus de détails.
313 312
314
-Ensuite on configurer l'emplacement des certificats TLS.
313
+Ensuite on configure l'emplacement des certificats TLS.
315 314
```conf
316 315
TLSVerifyClient never
317 316
TLSCertificateKeyFile /etc/ldap/tls/ldap-key.pem.nopass
... ...
@@ -319,36 +318,36 @@ TLSCertificateFile /etc/ldap/tls/ldap-crt.pem
319 318
TLSCACertificateFile /etc/ldap/tls/cacert.pem
320 319
```
321 320
322
-Divers configurations pour les pid files et log files, certains paramètres de lancement définis dans le fichier `/var/run/slapd/slapd.args`.
323
-Puis des définitions des noms des modules noyaux qui vont être lancés par sladp.
321
+Diverses configurations pour les pid files et log files, certains paramètres de lancement définis dans le fichier `/var/run/slapd/slapd.args`.
322
+Puis des définitions des noms des modules noyau qui vont être lancés par sladp.
324 323
325
-Enfin commence la configuration elle même des bases de données.
324
+Enfin commence la configuration des bases de données.
326 325
327 326
On commence par indiquer que le backend est *bdb* : `backend bdb`.
328 327
329
-On déclare la branche ldap `maisel` avec :
328
+On déclare la branche LDAP `maisel` avec :
330 329
```conf
331 330
database bdb
332 331
333 332
suffix "dc=maisel,dc=enst-bretagne,dc=fr"
334 333
```
335 334
336
-Puis la configuration de cette branche suit, on commence par définir le *DN root* et le *mot de passe root* contenus dans le fichier `include /etc/ldap/rootdn-master.ldap`. Puis le chemin de sauvegarde physique de la BDD `directory "/var/lib/ldap/maisel"` et finalement divers options d'*indexing* et d'activation de fonctionnalité comme `memberof`.
335
+Puis la configuration de cette branche suit, on commence par définir le *DN root* et le *mot de passe root* contenus dans le fichier `include /etc/ldap/rootdn-master.ldap`. Puis le chemin de sauvegarde physique de la BDD `directory "/var/lib/ldap/maisel"` et finalement diverses options d'*indexing* et d'activation de fonctionnalités comme `memberof`.
337 336
338
-Les lignes suivantes active la synchronisation de la branche.
337
+Les lignes suivantes activent la synchronisation de la branche.
339 338
```conf
340 339
overlay syncprov
341 340
syncprov-checkpoint 100 10
342 341
syncprov-sessionlog 100
343 342
```
344 343
345
-Puis la configuration de la branche `resel` suit, configurée de la même manière.
344
+Puis la configuration de la branche `resel` suit.
346 345
347 346
### Schéma
348 347
349 348
Plus de détails sur la [compréhension des schémas LDAP](https://www.ldap.com/understanding-ldap-schema).
350 349
351
-La configuration de schémas est incluses dans tout les fichiers `schema/*.schema`. Elle configure tout les *objectClass* et *attributeType* décrits dans la section [Mise en place](#mise-en-place_structure-de-l-arbre_description-des-objets-resel).
350
+La configuration de schémas est incluse dans tous les fichiers `schema/*.schema`. Elle configure tout les *objectClass* et *attributeType* décrits dans la section [Mise en place](#mise-en-place_structure-de-l-arbre_description-des-objets-resel).
352 351
353 352
Voici la syntaxe des fichiers de schéma.
354 353
... ...
@@ -366,7 +365,7 @@ attributetype ( 1.3.6.1.4.1.14628.3.0 NAME 'firstName'
366 365
```
367 366
368 367
Le numéro `1.3.6.1.4.1.14628.3.0` définit l'*OID: Object Identifier*, c'est un champ très peu lisible utile pour le LDAP.
369
-A noter que le dernier numéro doit incrémenter à chaque fois.
368
+A noter que le dernier numéro doit être incrémenté à chaque fois.
370 369
371 370
#### Création d'un ObjectClass
372 371
... ...
@@ -388,9 +387,9 @@ La configuration des droits est définie dans `acces-(slave|master).conf`
388 387
- Accès au CN *Monitor* par l'utilisateur `admin` (pas les admins en général).
389 388
- Accès au CN *accesslog* par un *ldapadmin* (cn ayant le champ droit `ldapadmin`), l'admin et le *replicator*.
390 389
- Accès au CN à divers élements (et le droit associé) aux admins ayant le droit en question. (Voir l'article [gestion des droits des admins](/)
391
-- Accès au mot de passe par l'utilisateur lui même, par un *ladpadmin*, par le *replicator* en lecture, par tout le monde en comparaison.
392
-- Accès à la clé privé d'un admin par lui même, ansible et le replicator en lecture
393
-- Accès au branche *organisation* et au *sites* par les membres qui sont dans le *memberUid* du site, ou les *reseladmin*.
390
+- Accès au mot de passe par l'utilisateur lui même, par un *ldapadmin*, par le *replicator* en lecture, par tout le monde en comparaison.
391
+- Accès à la clé privée d'un admin par lui même, ansible et le replicator en lecture
392
+- Accès aux branches *organisation* et *sites* par les membres qui sont dans le *memberUid* du site, ou les *reseladmin*.
394 393
- Acces à tout par tout le monde en lecture.
395 394
396 395
... ...
@@ -401,51 +400,51 @@ Voir la [documentation officielle](http://www.openldap.org/doc/admin24/access-co
401 400
La syntaxe est la suivante :
402 401
```
403 402
access to <champ>
404
- by <regle dacces> <droit>
403
+ by <règle d'accès> <droit>
405 404
```
406
-Globalement, on configure l'accès à un endroit précis du LDAP via le *champ*, cela peut être sous la forme d'un DN : `dn.subtree="cn=Monitor"`, ce DN va préciser le CN précise, ou tout une branche ou un groupe ; ou plus généralement avec des wildcars comme `*`.
407
-On peut un attribut avec `attrs=droit` ou plus spécifiquement l'attribut d'un objet précis avec `attrs=<attr> dn.subtree=<dn_voulu>`.
405
+Globalement, on configure l'accès à un endroit précis du LDAP via le *champ*, cela peut être sous la forme d'un DN : `dn.subtree="cn=Monitor"`, ce DN va préciser le CN précis ou tout une branche ou un groupe ; ou plus généralement avec des wildcards comme `*`.
406
+On peut préciser un attribut avec `attrs=droit` ou plus spécifiquement l'attribut d'un objet précis avec `attrs=<attr> dn.subtree=<dn_voulu>`.
408 407
409
-Puis les règles d'accès consiste à vérifier comparer le CN de l'utilisateur qui accède (car tout les utilisateurs qui accèdent au LDAP se connectent avec un CN du LDAP). On peut donc vérifier que le cn vaut exactement quelque chose `by dn.exact="cn=admin,dc=maisel,dc=enst-bretagne,dc=fr"` ou être plus précis en vérifiant un attribut du CN : `set.exact="user/droit* & [ldapadmin]" write`.
410
-Dans cette règle d'accès, `this` pointe sur l'élément auquel on tente d'accéder, et `user` pointe sur l'utilisateur qui veut y accéder. On accède aux valeurs des attributs par le `/`. On précise une chaîne telle quelle entre `[ ]`
411
-Pour vérifier une égalité de champs, on peut utilise `set.exact="this/attr1 & user/attr2", ou `set.exact="user/attr & [foo]"
408
+Puis les règles d'accès consistent à comparer le CN de l'utilisateur qui accède (car tous les utilisateurs qui accèdent au LDAP se connectent avec un CN du LDAP). On peut donc vérifier que le CN vaut exactement quelque chose `by dn.exact="cn=admin,dc=maisel,dc=enst-bretagne,dc=fr"` ou être plus précis en vérifiant un attribut du CN : `set.exact="user/droit* & [ldapadmin]" write`.
409
+Dans cette règle d'accès, `this` pointe sur l'élément auquel on tente d'accéder, et `user` pointe sur l'utilisateur qui veut y accéder. On accède aux valeurs des attributs par le `/`. On précise une chaîne telle quelle entre `[ ]`.
410
+Pour vérifier une égalité de champs, on peut utiliser `set.exact="this/attr1 & user/attr2"`, ou `set.exact="user/attr & [foo]"`
412 411
413
-Finalement le droit est soit `read` soit `write` ou `compare`. Le droit *compare* est par exemple utile pour vérifier si un mot de passe est le bon sans avoir à le lire.
412
+Finalement le droit est soit `read` soit `write` soit `compare`. Le droit *compare* est par exemple utile pour vérifier si un mot de passe est le bon sans avoir à le lire.
414 413
415 414
### Réplication Brest-Rennes
416 415
417
-On utilise pour la réplication **SyncRepl**, la configuration dans le fichier `replication-resel.ldap` et `replication-maisel.ldap`, un fichier par branche.
416
+On utilise pour la réplication **SyncRepl**, configuré dans les fichiers `replication-resel.ldap` et `replication-maisel.ldap`, un fichier par branche.
418 417
419
-Le LDAP de Rennes établi une connexion persistante vers l’annuaire maître et synchronise l’annuaire en temps réel. Il est possible de vérifier que la connexion est bien établie avec la commande netstat :
418
+Le LDAP de Rennes établit une connexion persistante vers l’annuaire maître et synchronise l’annuaire en temps réel. Il est possible de vérifier que la connexion est bien établie avec la commande netstat :
420 419
421 420
```
422 421
sudo netstat -naptu | grep "ESTABLISHED.*slapd"
423 422
```
424 423
Le résultat de cette commande doit montrer une connexion TCP établie entre l’adresse IP de l’esclave et l’adresse IP du maître sur le port 389 ou 636 (TLS) suivant ce qui est défini dans les fichiers [replication-resel.ldap](https://git.resel.fr/confs/ldap/blob/master/replication-resel.ldap) et [replication-maisel.ldap](https://git.resel.fr/confs/ldap/blob/master/replication-maisel.ldap).
425 424
426
-Documentation sur la réplication LDAP:
425
+Documentation sur la réplication LDAP :
427 426
* [Documentation officielle](http://www.openldap.org/doc/admin24/replication.html)
428 427
* [Article plus pratique](http://www.vogelweith.com/debian_server/050_openldap.php#x1-210005)
429 428
430 429
### Synchro avec le LDAP école
431 430
432
-(TODO: Le nouveau site ne le gérant pas encore, ça serait pas très utile de le documenter maintenant)
431
+(TODO: Le nouveau site ne le gérant pas encore, ça ne serait pas très utile de le documenter maintenant)
433 432
434 433
Sur l'ancien site admin RA2 :
435 434
436
-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.
437
-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.
435
+Lorsqu'une personne enregistrée 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.
436
+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.
438 437
439 438
#### Script
440 439
441
-Il existe un script permettant d'importer une promo [code source](https://git.resel.fr/resel/scripts/blob/master/ldap/import_promo.py).
440
+Il existe un script permettant d'importer une promo : [code source](https://git.resel.fr/resel/scripts/blob/master/ldap/import_promo.py).
442 441
443 442
444 443
### Scripts
445 444
446 445
#### Désactivation des machines
447 446
448
-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.
447
+Les machines du ResEl (machines utilisateurs et serveurs) 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 certain temps.
449 448
450 449
Le script `/srv/ldap/desactivation_machines.pl` sur Beaune permet de désactiver les machines absentes du réseau depuis longtemps.
451 450
Il est lancé par un cron à une fréquence `37 13 * * 1`