f4e944c106480117226fc38d187e11c7d9a9e0a5
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 |