Services/LDAP.md
... ...
@@ -50,12 +50,26 @@ Un script permet la vérification de l'intégrité du LDAP. Voir [intégrité]()
50 50
51 51
### Description des objets ResEl
52 52
53
-Pour son utilisation, le ResEl a défini quelques objets LDAP spécifiques, [vous pouvez les retrouver dans la configuration](https://git.resel.fr/confs/ldap/blob/master/schema/resel-14628.schema), voici une description :
54
-
53
+Un annuaire LDAP contiennent des branches, dans ces branches, on peut avoir des groupes `organizationalUnit`, puis finalement à la fin de la hiérarchie, on trouve des éléments `commonName`. Chaque élément est une instance d'une classe (`objectClass`) et ces objets contiennent des attributs.
55 54
56
-**TODO**.
55
+Pour son utilisation, le ResEl a défini quelques objets LDAP spécifiques, [vous pouvez les retrouver dans la configuration](https://git.resel.fr/confs/ldap/blob/master/schema/resel-14628.schema), voici une description :
57 56
58
-* 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.
57
+Classes définies :
58
+- *enstbPerson* : pesonne ayant un compte ecole (tt le monde sur l'annuaire)
59
+- *maiselPerson* : personne ayant une chambre a la maisel
60
+- *reselPerson* : personne ayant au moins une machine au resel
61
+- *mailPerson* : personne ayant un compte mail sur le resel
62
+- *aePerson* : personne membre de l'Association des Eleves
63
+- *club* : un club
64
+- *poste* : un poste dans un club
65
+- *machine* : une machine ayant une ip sur le resel
66
+- *administrateur* : personne ayant des droits d'administration sur le resel
67
+- *reselSwitch* : switch (contenant des ports comme fils)
68
+- *switchPort* : association port/(No de chambre ou autre switch ou rien)
69
+- *snmpType* : type de switch, ses fils d?crivent comment manipuler un switch
70
+- *mib* : reference vers une valeur lisible (voire modifiable) du switch
71
+- *mibValue* : valeur possible pour un mib donn?
72
+- *guestPerson* : personne residant a la MaisEl temporairement mais ne disposant pas de compte ecole
59 73
60 74
# Utilisation
61 75
... ...
@@ -218,11 +232,6 @@ unite: 1
218 232
219 233
La configuration du serveur *slapd* se trouve sur [Beaune](/Serveurs/Beaune) et [Lussac](/Serveurs/Lussac) dans `/etc/ldap`.
220 234
221
-Le *daemon* est géré par un simple service SysVinit : ```service slapd (start|stop|restart|status)```
222
-
223
-Veuillez utiliser l'utilitaire `slaptest` pour tester la configuration avant de relancer le serveur.
224
-
225
-
226 235
Le dépôt contient la configuration du maître (Beaune), et de l'esclave (Lussac), donc les fichiers peuvent êtres en double, suffixés par un `-master` ou un `-slave`. On a les fichiers suivants :
227 236
* `slapd.conf` : configuration principale. Existe en version maître `slapd-master.conf` et esclave `slapd-slave.conf`. C'est le seul fichier qui a besoin d'être renommé en `slapd.conf` sur la machine. Chaque fichier inclus les autres fichiers avec le bon nom.
228 237
* `access.ldap` : configure les droits nécéssaires pour accéder en lecture ou en écriture à une partie du LDAP. Existe en version `access-master.ldap` et `access-slave.ldap`.
... ...
@@ -233,19 +242,122 @@ Le dépôt contient la configuration du maître (Beaune), et de l'esclave (Lussa
233 242
* `schema/` : dossier contenant les schémas.
234 243
* `ssl/` et `tls/` : dossiers contenant les configurations et certificats pour la sécurisation SSL/TLS.
235 244
245
+L'utilitaire `slaptest` permet de tester la validité de la configuration du serveur.
246
+
247
+Le *daemon* est géré par un simple service SysVinit : ```service slapd (start|stop|restart|status)```
248
+**Important : Ne jamais lancer slapd en tant que root**
249
+
236 250
### Général
237 251
238
-La configuration générale
252
+Voici des éléments importants de la configuration du LDAP :
239 253
240
-**Important : Ne jamais lancer slapd en tant que root**
254
+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.
255
+
256
+```ini
257
+include /etc/ldap/schema/resel-14628.schema
258
+include /etc/ldap/access-master.ldap
259
+```
260
+
261
+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.
262
+
263
+Ensuite on configurer l'emplacement des certificats TLS.
264
+```ini
265
+TLSVerifyClient never
266
+TLSCertificateKeyFile /etc/ldap/tls/ldap-key.pem.nopass
267
+TLSCertificateFile /etc/ldap/tls/ldap-crt.pem
268
+TLSCACertificateFile /etc/ldap/tls/cacert.pem
269
+```
270
+
271
+Divers configurations pour les pid files et log files, certains paramètres de lancement définis dans le fichier `/var/run/slapd/slapd.args`.
272
+Puis des définitions des noms des modules noyaux qui vont être lancés par sladp.
273
+
274
+Enfin commence la configuration elle même des bases de données.
275
+
276
+On commence par indiquer que le backend est *bdb* : `backend bdb`.
277
+
278
+On déclare la branche ldap `maisel` avec :
279
+```ini
280
+database bdb
281
+
282
+suffix "dc=maisel,dc=enst-bretagne,dc=fr"
283
+```
284
+
285
+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`.
286
+
287
+Les lignes suivantes active la synchronisation de la branche.
288
+```ini
289
+overlay syncprov
290
+syncprov-checkpoint 100 10
291
+syncprov-sessionlog 100
292
+```
293
+
294
+Puis la configuration de la branche `resel` suit, configurée de la même manière.
241 295
242 296
### Schéma
243 297
244
-La configuration des schémas, plus explication de la syntaxe
298
+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).
299
+
300
+Voici la syntaxe des fichiers de schéma.
301
+
302
+#### Création d'un attribut
303
+
304
+Syntaxe :
305
+```ini
306
+attributetype ( 1.3.6.1.4.1.14628.3.0 NAME 'firstName'
307
+ DESC 'Prénom'
308
+ EQUALITY caseIgnoreMatch
309
+ ORDERING caseIgnoreOrderingMatch
310
+ SUBSTR caseIgnoreSubstringsMatch
311
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
312
+ SINGLE-VALUE )
313
+```
314
+
315
+Le numéro `1.3.6.1.4.1.14628.3.0` définit ??
316
+Le champ `syntaxe` ??
317
+
318
+#### Création d'un ObjectClass
319
+
320
+Syntaxe:
321
+```ini
322
+objectclass ( 1.3.6.1.4.1.14628.1.7 NAME 'reselMachine' STRUCTURAL
323
+ DESC 'Machine ayant une IP et une entrée dans le DNS'
324
+ MUST ( host $ uidProprio $ ipHostNumber $ macAddress $ zone )
325
+ MAY ( hostAlias $ lastDate $ ipv6HostNumber $ paramConn $ duidHostNumber $ ipv6HostPrefix $ description $ group ) )
326
+```
327
+
328
+Le champ `MUST` précise les attributs obligatoires à renseigner, `MAY` ceux optionnels.
245 329
246 330
### Droits
247 331
248
-La configuration des droits, plus explication de la syntaxe
332
+La configuration des droits est définie dans `acces-(slave|master).conf`
333
+
334
+À Brest, on définit globalement les règles suivantes :
335
+- Accès au CN *Monitor* par l'utilisateur `admin` (pas les admins en général).
336
+- Accès au CN *accesslog* par un *ldapadmin* (cn ayant le champ droit `ldapadmin`), l'admin et le *replicator*.
337
+- 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](/)
338
+- 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.
339
+- Accès à la clé privé d'un admin par lui même, ansible et le replicator en lecture
340
+- Accès au branche *organisation* et au *sites* par les membres qui sont dans le *memberUid* du site, ou les *reseladmin*.
341
+- Acces à tout par tout le monde en lecture.
342
+
343
+
344
+#### Explication de la syntaxe
345
+
346
+Voir la [documentation officielle](http://www.openldap.org/doc/admin24/access-control.html) pour plus de détails.
347
+
348
+La syntaxe est la suivante :
349
+```
350
+access to <champ>
351
+ by <regle dacces> <droit>
352
+```
353
+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 `*`.
354
+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>`.
355
+
356
+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`.
357
+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 `[ ]`
358
+Pour vérifier une égalité de champs, on peut utilise `set.exact="this/attr1 & user/attr2", ou `set.exact="user/attr & [foo]"
359
+
360
+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.
249 361
250 362
### Réplication Brest-Rennes
251 363
... ...
@@ -280,6 +392,8 @@ Il existe un script permettant d'importer une promo [code source](https://git.re
280 392
281 393
#### Désactivation des machines
282 394
395
+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.
396
+
283 397
Le script `/srv/ldap/desactivation_machines.pl` sur Beaune permet de désactiver les machines absentes du réseau depuis longtemps.
284 398
Il est lancé par un cron à une fréquence `37 13 * * 1`
285 399