Taille: 2860
Commentaire: Fix paths
|
Taille: 8061
Commentaire: Doc new infra
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
= Description = LDAP est essentiellement une base de donnée, qui au Crans contient une copie de tous les utilisateurs. La base LDAP à l'avantage de pouvoir être utiliser par les serveurs debian pour les logins, ou encore pour servir à l'authentification de nombreux services. |
= LDAP = <<TableOfContents>> LDAP est un annuaire standardisé pour stocker des données d'utilisateurs, de machines, de services ... LDAP est souvent représenté par un arbre, constituée d'un ensemble d'attributs, définis dans des schémas. Je renvoie vers [[ https://linuxfr.org/users/peb--2/journaux/gestion-de-ldap-sous-debian-openldap | cette page ]] pour plus d'information. Depuis 2020, on a séparé l'annuaire en deux : D'une part les adhérents de l'association et leurs machines, géré par re2o, à partir d'une base de données. D'autre, un annuaire pour les membres actifs, afin de séparer le compte d'administration du compte Crans utilisé pour accéder aux services (en particulier la connexion Wifi). == Base des membres actifs == === Connexion === Le LDAP écoute uniquement sur son interface adm en LDAPS et en local sur [[ CransTechnique/LesServeurs/ServeurTealc | tealc ]]. Pour s'y connecter, on peut faire une redirection de ports comme par exemple: {{{ ssh -L 1636:172.16.10.1:636 tealc.adm.crans.org -J charybde.adm.crans.org }}} === Détail === Ce ldap contient deux groupes: * {{{user}}}: Qui contient tout le monde (apprentis+nounous). * {{{nounous}}}: Qui contient les nounous et qui permet aux gens de sudo sur les serveurs. On a configuré {{{nsswitch}}} sur tous les serveurs pour qu'ils privilégient les requêtes LDAP avant de faire une requete DNS. Les machines sont accessibles via un {{{ getent host }}} sur tealc. == Schéma == Voici la hiérarchie actuelle du LDAP (Décembre 2020): {{{ dc=crans,dc=org | +-ou=group | +-cn=nounou (posixGroup) | +-cn=user (posixGroup) | +-ou=hosts | +-cn=machine (device) | +-cn=machine.adm.crans.org+ipHostNumber=172.16.1.100 (device, ipHost, ieee802Device) | +-ou=networks | +-cn=adm (ipNetwork) | +-ou=passwd | +-uid=nom (inetOrgPerson, posixAccount) | +-ou=services +-cn=ssh (ipService) }}} Les machines sont ajoutées dans {{{ou=hosts}}} et leurs interfaces sont regroupées sous des objets de classe device, {{{ipHost}}} permet d'ajouter une ip et {{{ieee802Device}}} permet d'ajouter un attribut {{{macAddress}}} à l'interface. Les ouvertures de port sont configurées dans les descriptions des machines comme ceci : {{{ description: in:service1,in:service2,out:service3 }}} Les services sont définis dans {{{ou=services}}}, par exemple: {{{ dn: cn=ssh,ou=services,dc=crans,dc=org objectClass: ipService cn: ssh ipServicePort: 22 ipServiceProtocol: tcp }}} Pour spécifier une range de port on met le port de fin dans le champ description du service. === Quelques mots sur la configuration === Pour déplacer la conf dans un fichier texte (plutôt que dans la base LDAP elle-même), il suffit de supprimer {{{ /etc/ldap/slapd.d }}} et de restart sladp. Pour faire écouter uniquement en LDAPS sur adm, on a ajouté dans {{{ /etc/default/slapd }}} {{{ SLAPD_SERVICES="ldaps://172.16.1.1/ ldapi:///" }}} Pour que les nounous puissent modifier les mots de passe des utilisateurs et que chacun puisse modifier son mot de passe, on ajoute la configuration suivante : {{{ access to attrs=userPassword,shadowLastChange by anonymous auth by self write by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write by * none }}} Pour que tout le monde puisse modifier son shell, mail et numéro de téléphone et que les nounous puissent modifier ceux des autres {{{ access to attrs=loginShell,mail,telephoneNumber by self write by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write by * read }}} Pour que les nounous puissent modifier tout le reste {{{ access to * by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write by * read }}} Le LDAPS a été configuré avec un certificat autosigné valable 1000 ans: {{{ TLSCertificateFile /etc/ldap/ldap.pem TLSCertificateKeyFile /etc/ldap/ldap.key }}} * {{{%nounou ALL=(ALL:ALL) ALL}}} a été ajouté dans le fichier {{{/etc/sudoers.d/nounou}}} pour que les nounous puissent sudo sur le serveur. * Les machines sont stockées dans la base ldap avec leur ip et leur mac. == Base des adhérents == |
Ligne 7: | Ligne 133: |
== Réplicat ldap == Un réplicat ldap peut être mis en place de manière complètement automatique via bcfg2. On en trouve sur [[CransTechnique/LesServeurs/ServeurOdlyd|odlyd]], [[CransTechnique/LesServeurs/ServeurSoyouz|soyouz]], [[CransTechnique/LesServeurs/ServeurThot|thot]] et [[CransTechnique/LesServeurs/ServeurFy|fy]]. Le {{{/etc/nslcd.conf}}} est fait de telle que sorte que les réplicats soient interrogés en priorité, pour répartir la charge. == Shelldap == Pour naviguer dans la base, un utilitaire bien pratique est shelldap qui permet de se déplacer à coup de {{{ls}}}, {{{cd}}} et {{{cat}}}. Sur le serveur {{{re2o}}}, un shelldap a le bon gout d'être configuré pour root, il suffit donc de : |
== Outils == === Curl === C'est l'outil sans doute le plus basique pour faire des requêtes, et il supporte ldap(s). Avec la redirection de ports définie plus haut: {{{ curl -k "ldaps://localhost:1636/ou=hosts,dc=crans,dc=org?cn?one?description=pve" }}} me renvoie tous les virtus, ie [[ CransTechnique/LesServeurs/ServeurSam | pve1 ]], [[ CransTechnique/LesServeurs/ServeurDaniel | pve2 ]] et [[ CransTechnique/LesServeurs/ServeurJack | pve3 ]]. et {{{ curl -k "ldaps://localhost:1636/ou=hosts,dc=crans,dc=org?cn?one?description=radius" }}} me renvoie tous les serveurs radius. === Apache Directory Studio === Plus d'info [[ https://directory.apache.org/studio/ | ici ]]. C'est un outil graphique pour naviguer dans un annuaire LDAP. Bien pratique ! Pour le configurer il faut créer une nouvelle connexion (dans le menu en bas à gauche). Par exemple, pour utiliser le LDAP membres actifs du crans on peut utiliser : Dans le menu Network Parameter * {{{ Connection name: }}} ldap nounous * {{{ Hostname }}}: localhost * {{{ Port }}}: 1636 (ou n'importe quel autre port). * {{{ Encryption method }}}: Use SSL encryption (ldap://) et dans le menu Authentication * {{{ Authentication Method }}}: Simple Authentication * {{{ Bind DN or user }}}: votre DN, par exemple pour moi c'est {{{ uid=pollion,ou=passwd,dc=crans,dc=org }}} Et renseignez votre mot de passe sur le LDAP Membres actifs. Avec cette configuration, il suffit de faire une redirection du port 636 distant vers localhost 1636 et à vous la navigation sur le LDAP ! === Shelldap === Pour naviguer dans la base, on peut aussi utiliser un utilitaire en ligne de commande : shelldap qui permet de se déplacer à coup de {{{ls}}}, {{{cd}}} et {{{cat}}}. Sur le serveur {{{re2o}}}, un shelldap a le bon gout d'être configuré pour root, il suffit donc de : |
LDAP
Sommaire
LDAP est un annuaire standardisé pour stocker des données d'utilisateurs, de machines, de services ... LDAP est souvent représenté par un arbre, constituée d'un ensemble d'attributs, définis dans des schémas. Je renvoie vers cette page pour plus d'information.
Depuis 2020, on a séparé l'annuaire en deux : D'une part les adhérents de l'association et leurs machines, géré par re2o, à partir d'une base de données.
D'autre, un annuaire pour les membres actifs, afin de séparer le compte d'administration du compte Crans utilisé pour accéder aux services (en particulier la connexion Wifi).
Base des membres actifs
Connexion
Le LDAP écoute uniquement sur son interface adm en LDAPS et en local sur tealc. Pour s'y connecter, on peut faire une redirection de ports comme par exemple:
ssh -L 1636:172.16.10.1:636 tealc.adm.crans.org -J charybde.adm.crans.org
Détail
Ce ldap contient deux groupes:
user: Qui contient tout le monde (apprentis+nounous).
nounous: Qui contient les nounous et qui permet aux gens de sudo sur les serveurs.
On a configuré nsswitch sur tous les serveurs pour qu'ils privilégient les requêtes LDAP avant de faire une requete DNS.
Les machines sont accessibles via un getent host sur tealc.
Schéma
Voici la hiérarchie actuelle du LDAP (Décembre 2020):
dc=crans,dc=org | +-ou=group | +-cn=nounou (posixGroup) | +-cn=user (posixGroup) | +-ou=hosts | +-cn=machine (device) | +-cn=machine.adm.crans.org+ipHostNumber=172.16.1.100 (device, ipHost, ieee802Device) | +-ou=networks | +-cn=adm (ipNetwork) | +-ou=passwd | +-uid=nom (inetOrgPerson, posixAccount) | +-ou=services +-cn=ssh (ipService)
Les machines sont ajoutées dans ou=hosts et leurs interfaces sont regroupées sous des objets de classe device, ipHost permet d'ajouter une ip et ieee802Device permet d'ajouter un attribut macAddress à l'interface.
Les ouvertures de port sont configurées dans les descriptions des machines comme ceci :
description: in:service1,in:service2,out:service3
Les services sont définis dans ou=services, par exemple:
dn: cn=ssh,ou=services,dc=crans,dc=org objectClass: ipService cn: ssh ipServicePort: 22 ipServiceProtocol: tcp
Pour spécifier une range de port on met le port de fin dans le champ description du service.
Quelques mots sur la configuration
Pour déplacer la conf dans un fichier texte (plutôt que dans la base LDAP elle-même), il suffit de supprimer /etc/ldap/slapd.d et de restart sladp.
Pour faire écouter uniquement en LDAPS sur adm, on a ajouté dans /etc/default/slapd
SLAPD_SERVICES="ldaps://172.16.1.1/ ldapi:///"
Pour que les nounous puissent modifier les mots de passe des utilisateurs et que chacun puisse modifier son mot de passe, on ajoute la configuration suivante :
access to attrs=userPassword,shadowLastChange by anonymous auth by self write by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write by * none
Pour que tout le monde puisse modifier son shell, mail et numéro de téléphone et que les nounous puissent modifier ceux des autres
access to attrs=loginShell,mail,telephoneNumber by self write by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write by * read
Pour que les nounous puissent modifier tout le reste
access to * by set="[cn=nounou,ou=group,dc=crans,dc=org]/memberUid & user/uid" write by * read
Le LDAPS a été configuré avec un certificat autosigné valable 1000 ans:
TLSCertificateFile /etc/ldap/ldap.pem TLSCertificateKeyFile /etc/ldap/ldap.key
%nounou ALL=(ALL:ALL) ALL a été ajouté dans le fichier /etc/sudoers.d/nounou pour que les nounous puissent sudo sur le serveur.
- Les machines sont stockées dans la base ldap avec leur ip et leur mac.
Base des adhérents
Depuis l'été 2018, nous utilisons au Cr@ns un backend LDAP exporté par Re2o. Le serveur principal est Re2oLdap.
Outils
Curl
C'est l'outil sans doute le plus basique pour faire des requêtes, et il supporte ldap(s). Avec la redirection de ports définie plus haut:
curl -k "ldaps://localhost:1636/ou=hosts,dc=crans,dc=org?cn?one?description=pve"
me renvoie tous les virtus, ie pve1, pve2 et pve3.
et
curl -k "ldaps://localhost:1636/ou=hosts,dc=crans,dc=org?cn?one?description=radius"
me renvoie tous les serveurs radius.
Apache Directory Studio
Plus d'info ici.
C'est un outil graphique pour naviguer dans un annuaire LDAP. Bien pratique !
Pour le configurer il faut créer une nouvelle connexion (dans le menu en bas à gauche). Par exemple, pour utiliser le LDAP membres actifs du crans on peut utiliser :
Dans le menu Network Parameter
Connection name: ldap nounous
Hostname : localhost
Port : 1636 (ou n'importe quel autre port).
Encryption method : Use SSL encryption (ldap://)
et dans le menu Authentication
Authentication Method : Simple Authentication
Bind DN or user : votre DN, par exemple pour moi c'est
uid=pollion,ou=passwd,dc=crans,dc=org
Et renseignez votre mot de passe sur le LDAP Membres actifs.
Avec cette configuration, il suffit de faire une redirection du port 636 distant vers localhost 1636 et à vous la navigation sur le LDAP !
Shelldap
Pour naviguer dans la base, on peut aussi utiliser un utilitaire en ligne de commande : shelldap qui permet de se déplacer à coup de ls, cd et cat. Sur le serveur re2o, un shelldap a le bon gout d'être configuré pour root, il suffit donc de :
jacomme@re2o-srv $ sudo shelldap [sudo] password for jacomme on re2o-srv: IlFaitB0AujourdhuiDitDonc ~ > ls cn=Utilisateurs/ cn=admin ou=groups/ ou=service-users/ ~ >
Plus en détails
Lightweight Directory Access Protocol (LDAP) est un protocole d'accès et de modification d'un annuaire (souvent appelé annuaire LDAP). Aujourd'hui, on assimile LDAP aux bases de données, comme PostGreSQL, ou autre.
Une base de données LDAP a pour intérêt qu'elle est fortement hiérarchisée, car représentée sous forme d'arbre (graphe), dont les données sont contenues dans les nœuds, et dont les branches servent à représenter la hiérarchie.
Un nœud possède un nom, qui sert à signifier sa position. Le nœud le plus élevé est souvent appelé suffixe ou racine.
Un exemple (Ancien schéma LDAP du crans. Voir les sous pages de l'ancienne base LDAP pour plus d'informations :
dc=crans,dc=org (racine) / | \ ou=data ou=Group ou=services / \ | / \ aid=3775 mid=1 cn=adm cn=dns cn=autostatus
Les termes devant chaque symbole "=" est arbitrairement choisi, mais certains ont une signification (dc : domain component, ou : organizational unit, cn : common name), d'autres sont spécifique du Crans (aid : id adhérent, mid, id machine). Si on cherche à travailler sur l'adhérent 3775, on vise le nœud aid=3775,ou=data,dc=crans,dc=org (chemin complet).