« LDAP » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 125 : Ligne 125 :
Ils sont définis dans des schémas par défaut (dans /etc/ldap/schema). On peut créer nos propres schémas.
Ils sont définis dans des schémas par défaut (dans /etc/ldap/schema). On peut créer nos propres schémas.


Après ça, j'ai donc une structure telle que:
[[Fichier:Strucldap.jpg|cadre|Structure de notre LDAP après insertion de notre fichier LDIF.]]
 
[[Fichier:Strucldap.jpg|cadre|Structure de notre LDAP.]]


Une fois ce fichier écrit, on va devoir effacer l'installation par défaut et entrer nos données à la place:
Une fois ce fichier écrit, on va devoir effacer l'installation par défaut et entrer nos données à la place:

Version du 14 septembre 2023 à 15:46

LDAP

Sources:

Lightweight Directory Access Protocol. LDAP est un protocole standardisé pour les annuaires; c'est souvent la base de l'IAM (Identity and Authentification Management) au sein d'une organisation. Un annuaire sert à recenser les personnes et les matériels dans un annuaire commun, à un but d'autorisation (à quoi ai-je accès) et d'authentification (suis-je bien qui je prétends être ?).

Il utilise en clair le port 389 et en chiffré le port 636.

Une fois un annuaire LDAP en place, il peut être utilisé à des fins d'authentification sur 99% des applications self-hosted (qu'on parle de LDAP en lui-même ou bien d'Active Directory, qui est sa version Windows). C'est un des piliers centraux d'un système d'informations. Il y aurait beaucoup à dire sur son importance et sur l'importance d'une bonne gestion de l'IAM au sein d'une organisation.

Fonctionnement interne de LDAP

LDAP est une structure en arbre, avec à la base un domaine contenant des OU (Organizational Units) contenant elles-mêmes des objets. Les objets sont appellés "entrées", et sont une collection d'attribut clef-valeur. Chaque entrée est distinguée par son DN pour Distinguished Number, sur le même principe qu'un système de fichiers avec ses chemins.

LDAP dérive de X.500 qui est un système d'annuaires; à l'origine, LDAP était une gateway pour accéder à X.500. Il est désormais intégré directement.


SlapD

Sources:

Slapd est le daemon LDAP par excellence sur Linux. Celui-ci est simple à installer et disponible sur la plupart des distributions; nous sommes ici en Debian (testing, entre la 12 et la 13).

Il se compose d'un daemon (slapd) que l'on va pouvoir configurer et alimenter à l'aide de fichiers LDIF - LDAP Data Interchange Format. Il écoute son port TCP et peux faire du LDAPS avec SSL. Il peut fonctionner en cluster avec slurpd.

Installation et configuration basiques

L'installation se fait normalement:

apt install slapd

Lors de l'installation, celui-ci va nous demander un mot de passe administrateur. Il peut également demander le nom de domaine si celui-ci n'est pas renseigné dans le hostname de la machine. On peut refaire sa configuration de base avec:

dpkg-reconfigure slapd

Voici les réponses que l'on peut donner:

#On veut configurer slapd...
1.Passer la configuration d'OpenLDAP ? non
#Donner notre nom de domaine si il ne le déduit pas
2.Nom de domaine ? example.com
#Pas compris
3.Nom de votre société ? masociété 
#LDAP peut avoir plusieurs backends, hdb est décrit comme 'le backend pour une utilisation normale de slapd'
4.Quelle base de donnée ? hdb 
#Doit-on effacer la base quand la présente config est finie ?
5.Voulez-vous que la base de donnée soit effacée lorsque slapd est purgé ? oui 
#Pareil
6.Supprimer les anciennes bases de données ? oui
7.Mot de passe administrateur ? VotreMotDePasse
8.Confirmer ce mot de passe ? VotreMotDePasse
#LDAPv2 est un vieux vieux protocole
9.Authoriser le protocol LDAPv2 ? non

On peut regénérer un mot de passe admin avec la commande suivante:

sudo slappasswd

Insérer des données

Créer un fichier init.ldif :

#Base de notre arbre : c'est le premier objet.
Les attributs (objectClass, dc etc) sont par défaut, mais on peut créer les notres.
dn: dc=sq,dc=lan
objectClass: dcObject
objectClass: organizationalUnit
dc: sq
ou: Sq Dot Lan

#Une OU pour les personnes
dn: ou=people,dc=sq,dc=lan
objectClass: organizationalUnit
ou: people

#Une OU pour les groupes
dn: ou=groups,dc=sq,dc=lan
objectClass: organizationalUnit
ou: groups

#Je créée un compte utilisateur
dn: uid=justine,ou=people,dc=sq,dc=lan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
#L'UID est une valeur de base pour identifier une personne et doit être unique
uid: justine
sn: Pelletreau
givenName: Justine
cn: Justine Pelletreau
displayName: Justine Pelletreau
uidNumber: 1000
gidNumber: 10000
gecos: Justine Pelletreay
loginShell: /bin/zsh
homeDirectory: /home/justine
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: justine.pelletreau@squi.fr
postalCode: 77210
l: Avon
o: SqLan
title: System Administrator
initials: JP

#Je créée un groupe
dn: cn=admins,ou=groups,dc=sq,dc=lan
objectClass: posixGroup
cn: admins
gidNumber: 10000
displayName: Example group

Les attributs peuvent être trouvés sur la doc : https://www.openldap.org/doc/admin22/schema.html ou dans diverses listes sur le net : https://www.zytrax.com/books/ldap/ape/#attributes Ils sont définis dans des schémas par défaut (dans /etc/ldap/schema). On peut créer nos propres schémas.

Structure de notre LDAP après insertion de notre fichier LDIF.

Une fois ce fichier écrit, on va devoir effacer l'installation par défaut et entrer nos données à la place:

systemctl stop slapd
sudo rm -rf /var/lib/ldap/*
sudo slapadd -l ~/init.ldif
#On redonne les droits de lecture sur la base
sudo chown -R openldap:openldap /var/lib/ldap
systemctl start slapd

On va ensuite pouvoir faire une recherche afin de vérifier que nos informations sont bien prises en compte à l'aide de ldapsearch (du paquet ldap-utils).

31 root > ldapsearch -xLLL -b "dc=sq,dc=lan" uid=justine sn givenName cn
#Renvoie
dn: uid=justine,ou=people,dc=sq,dc=lan
sn: Pelletreau
givenName: Justine
cn: Justine Pelletreau

Explication de la commande:

  • -x désactive l'authentification
  • -LLL empêche l'affichage des informations LDIF (c'est juste pour raccourcir la réponse)
  • -b "dc=sq,dc=lan" sert à donner le *base DN*, c'est à dire la base à partir de laquelle on va chercher (ici, la racine)
  • uid=justine : je cherche une valeur dont le champ uid est égal à "justine"
  • sn givenName cn : ce sont les valeurs que je veux récupérer


Faire une recherche LDAP sur un AD

https://tylersguides.com/guides/search-active-directory-ldapsearch/ <source lang="bash">

  1. Avec TLS

ldapsearch -H ldaps://dc.example.com -x -W -D "user@example.com" -b "dc=example,dc=com" "(sAMAccountName=user)"

  1. Sans TLS

ldapsearch -H ldap://dc.example.com -x -W -D "user@example.com" -b "dc=example,dc=com" "(sAMAccountName=user)" </source>