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.
Le LDAP pour Lightweight Directory Access Protocol est à l'origine un protocole et sert de norme pour l'architecture d'un annuaire. Un serveur LDAP permet de gérer un arbre LDAP.
Pour gérer le LDAP, le ResEl utilise la suite OpenLDAP, dont le serveur est slapd (pour stand alone LDAP daemon).
Le serveur LDAP est hébergé sur la machine Beaune à Brest et Lussac à Rennes qui fait de la réplication LDAP.
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. 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.
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.
Un script permet la vérification de l'intégrité du LDAP. Voir intégrité.
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.Important : Ne jamais lancer slapd en tant que root (flo ne le répétera assez)
Pour les lectures courantes (de la part d'administrateurs), il est conseillé d'utiliser l'interface admin. Vous ne risquez pas de faire trop de betises avec.
Dans certains cas, il est nécessaire de faire des requêtes personnalisés. Dans ce cas il est conseillé d'utiliser phpLdapAdmin.
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 :
ldapvi
dessus :
ldapvi --discover
Si vous avez les droits nécessaire, vous pouvez faire les modifications que vous voulez. ~/.ldaprc
HOST ldap.adm.resel.fr
BINDDN uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr
TLS_CACERT chemin/vers/ca.pem
Puis on peut lancer :
ldapvi -d -D uid=mon_login,ou=admins,dc=resel,dc=enst-bretagne,dc=fr
On peut exporter des portions du LDAP au format LDIF avec ldapsearch :
ldapsearch -LLL -x -H ldap://lussac.adm.maisel.rennes.enst-bretagne.fr -b "dc=resel,dc=enst-bretagne,dc=fr"
-LLL Affichage au format LDIF (sans commentaires, sans version LDIF)
-x Authentification simple (sans utiliser SASL)
-D dn DN de connexion
-W Demande le mot de passe
-h uri URI du serveur LDAP
-b base Base de la recherche
-s scope Etendue de la recherche (base, one, sub)
-S "attr" trie selon l'attribut
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 :
Pour faire des recherches, on peut utiliser des filtres. La syntaxe pour faire ces filtres suit la notation polonaise inversée :
(OPERATEUR_BOOLÉEN(attribut OPERATEUR_BINAIRE valeur)(attribut OPERATEUR_BINAIRE valeur)...)
Les opérateurs booléens étant :
!
&
|
Les opérateurs binaires étant :
=
~=
>=
<=
Les opérateurs binaires restant s'obtiennent par combinaison des autres.
Tous les uid ou firstname ou lastname ou nickname ou orgaName contenant "a"
(|(uid=*a*)(firstname=*a*)(lastname=*a*)(nickname=*a*)(orgaName=*a*))
Toutes les personnes ayant leur numéro de téléphone renseigné dans la base :
(&(objectclass=person)(telephoneNumber=*))
Toutes les personnes dont le nom commence par 'A' et n'habitant pas Paris :
(&(objectclass=person)(cn=A*)(!(location=Paris)))
Toutes les personnes dont le nom ressemble à Febvre (Faivre, Fèvre, Lefebvre, ...):
(&(objectclass=person)(cn~=febvre))
Idem que le premier exemple en excluant la branche ou=club-old,dc=maisel,dc=enst-bretagne,dc=fr
:
(&(|(uid=*musique*)(firstname=*musique*)(lastname=*musique*)(nickname=*musique*)(orgaName=*musique*))
(!(entryDN:dnSubtreeMatch:=ou=club-old,dc=maisel,dc=enst-bretagne,dc=fr)))
Afin d'accéder rapidement à une ressource, nous pouvons utiliser une url ldap de la forme suivante :
ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>?<extensions>
avec les paramètres suivants:
hostname
: Adresse du serveur. L'adresse peut être absente, le client est supposé connaître un serveur LDAP à contacter, en fonction du contexte. port
: Port TCP de la connexion. Il ne peut y avoir de port s'il n'y a pas d'adresse. base_dn
: DN de l'entrée qui est le point de départ de la recherche. attributes
: Les attributs que l'on veut récupérer, séparés par des virgules. Si la valeur n'est pas remplie, ou si elle est rempli avec une *
, tous les attributs d'usage userApplication
doivent être retournés.
scope
: La profondeur de la recherche dans l'arbre : base, one ou sub. filter
: Le filtre de recherche, tel que nous venons de le définir. Le filtre par défaut est (objectClass=*). extensions
: Les extensions sont un moyen pour pouvoir ajouter des fonctionnalités aux URLs LDAP tout en gardant la même syntaxe. On peut mettre inclure plusieurs extensions dans une URL, en les séparant par des ,
.
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.
Les genericPerson dans la branche dc=maisel,dc=enst-bretagne,dc=fr
ldaps://ldap.resel.fr:636/dc=maisel,dc=enst-bretagne,dc=fr??sub?(objectclass=genericPerson)
ObjectClass?: reselMachine Importer dans le LDAP en remplacant host par le nom du switch :
dn: host=pessac,ou=machines,dc=resel,dc=enst-bretagne,dc=fr
host: pessac
objectClass: reselMachine
uidProprio: uid=reselMachine,ou=people,dc=maisel,dc=enst-bretagne,dc=fr
zone: Rennes
zone: SW-Adm
ipHostNumber: 0.7
lastDate: 20101017000000Z
macAddress: 00:1c:57:4b:42:41
ObjectClass?: reselSwitch
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:
dn: cn=pessac,ou=C1,ou=reseau,dc=resel,dc=enst-bretagne,dc=fr
objectClass: reselSwitch
cn: pessac
machine: host=pessac,ou=machines,dc=resel,dc=enst-bretagne,dc=fr
switchType: type=C3750,ou=snmp,dc=resel,dc=enst-bretagne,dc=fr
unite: 1
La configuration du LDAP fait l'objet d'un versionnage sur le dépôt Git confs/LDAP. N'oubliez pas de commitez vos modifications !
Le déploiement des modifications se fait par le CI.
La configuration du serveur se trouve sur Beaune et Lussac dans /etc/ldap
.
On trouve les fichiers suivants :
slapd.conf
: configuration principaleschema/
: dossier contenant les schémasssl/
et tls/
: dossiers contenant les configurations et certificats pour la sécurisation SSL/TLS.La configuration est faite pour organiser la relation maître-esclave entre Beaune et Loupiac.
Le daemon est géré par un simple service SysVinit.
On peut le contrôler avec :
service slapd (start|stop|restart|status)
Veuillez utiliser l'utilitaire slaptest
pour tester la configuration avant de relancer le serveur.
Le script /srv/ldap/desactivation_machines.pl
sur Beaune permet de désactiver les machines absentes du réseau depuis longtemps.
Il est lancé par un cron à une fréquence 37 13 * * 1
Son code source est versionné et est disponible dans ResEl/scripts.
Le script /srv/ldap/check_ldap.pl
situé sur Beaune permet de vérifier l'intégrité du LDAP.
Il est lancé par un cron à une fréquence 37 */4 * * *
.
Son code source est versionné est disponible dans ResEl/scripts.
(TODO: Le nouveau site ne le gérant pas encore, ça serait pas très utile de le documenter maintenant)
Sur l'ancien site admin RA2 :
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. 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.
Il existe un script permettant d'importer une promo code source.
On utilise pour la réplication SyncRepl, voir la configuration dans le git
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 :
sudo netstat -naptu | grep "ESTABLISHED.*slapd"
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 et replication-maisel.ldap.
Documentation sur la réplication LDAP:
Last edited by shugdelar, 2019-04-06 20:11:42