Administration Unix - CM séance 20
19. Annexe 2
19.1. Annuaires LDAP
19.1.1. Présentation
Un annuaire est une système de stockage de données, permettant de partager diverses informations d'une organisation, par exemple des coordonnées d'utilisateurs, des groupes, des imprimantes, des données système, etc.
Plus généralement, un annuaire est une base de donnée spécialisée, conçue pour stocker des données pérennes (qui changent peu). Elle permet de retrouver des attributs d'un objet grâce à des fonctions de recherche multi-critères. Le but est d'être très rapide en consultation (quitte a être beaucoup plus lent qu'un SGBDR en écriture).
Comme annuaires on peut citer :
- NIS, un ancien système d'annuaires sous Unix ;
- LDAP, le standard actuel ;
- Active Directory (pour Windows) est une implémentation de LDAP ;
- voir encore cette liste.
Le système d'annuaires LDAP (Lightweight Directory Access Protocol) est un protocole TCP/IP développé à partir de 1993 (par l'IETF), ouvert, multi-plateforme et extensible. À l'origine il servait à interroger des annuaires X.500 (protocole DAP), puis à partir de 1995 des serveurs LDAP autonomes. Il a ensuite évolué, en permettant aussi les ajouts, les modifications, etc.
Globalement, LDAP comprend :
- le protocole, permettant d'accéder à l'information contenue dans l'annuaire ;
- un modèle d'information, définissant le type de données contenues dans l'annuaire ;
- un modèle de nommage, définissant comment l'information est organisée et référencée ;
- un modèle fonctionnel, qui définit comment on accède à l'information ;
- un modèle de sécurité, qui définit comment données et accès sont protégés (droits, ACL) ;
- un modèle de duplication, qui définit comment la base est répartie entre serveurs ;
- des APIs, pour développer des applications clientes ;
- un format d'échange de données textuel : LDIF.
L'implémentation de référence est OpenLDAP (projet commencé en 1998).
19.1.2. Structure d'un annuaire LDAP
Dans une session LDAP,
- un client se connecte au serveur en TCP/IP via le port 389 (
ldapen clair) ou 636 (ldapsvia TLS/SSL) ; - le client envoie ensuite des requêtes au serveur, sans attendre la réponse ;
- le serveur répond aux requêtes dans n'importe quel ordre.
Les requêtes sont des opérations telles que :
Search, Compare, Add, Delete, Modify, etc.
Les échanges se font dans un format binaire
(BER).
Les annuaires LDAP suivent l'architecture X.500, sous la forme d'un arbre, le DIT :
- un annuaire est un arbre d'entrées ;
- une entrée (un nœud) est une liste d'attributs ;
- un attribut possède un nom, un type, et une ou plusieurs valeurs ;
- les attributs sont définis dans des schémas.
Par exemple pour une organisation lacompagnie.fr :
graph TD
A[dc=lacompagnie,dc=fr] --> B[ou=people]
A --> C[ou=groups]
B --> D[cn=Alain Térieur]
B --> E[cn=Anna Lyse]
C --> F[cn=Usagers]
Les attributs classiques sont :
dcpour domain component,oupour organisational unit,cnpour common name (le nom complet),snpour surname (le nom),gnpour given name (le prénom),- ...
L'attribut dn (pour distinguished name) est particulier, il désigne
le chemin d'une entrée dans l'arbre. Par exemple le dn de Anna Lyse est
cn=Anna Lyse,ou=people,dc=lacompagnie,dc=fr.
19.1.3. Installation et configuration d'un serveur
Les étapes de la configuration d'un serveur LDAP diffèrent sur certains points selon la distribution.
** Sous Debian :**
Les étapes sont décrites ici.
Le serveur OpenLDAP est fourni par le paquet slapd.
Lors de l'installation du paquet, il vous sera demandé de donner
un nom de domaine (par exemple lacompagnie.fr), un nom d'organisation
(La Compagnie), et un mot de passe administrateur pour la base de données.
Si on a besoin de recommencer la configuration, il suffit de taper
sudo dpkg-reconfigure slapd .
Il est ensuite possible de peupler la base à partir de scripts du paquet
migrationtools, voir les instructions.
Il y a une étape supplémentaire si on veut protéger les échanges LDAP
(qui circulent en clair) ; il faudra alors utiliser côté client des URIs
en ldaps://, et donner des certificats de chiffrement SSL.
Sous Rocky Linux 9 :
Suivre le tutoriel https://www.howtoforge.com/how-to-install-openldap-on-rocky-linux-9/
Tests
Lorsque le serveur est configuré, on peut le tester dans un terminal en local :
$ slapcat
ldap, taper :
$ ldapsearch -LLL -Y EXTERNAL -H ldapi:///
Si la commande ne retourne rien, on peut spécifier la racine :
$ ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=lacompagnie,dc=fr'
ou encore, mémoriser la racine par défaut dans /etc/ldap.conf.
Pour filtrer la recherche et choisir les attributs à afficher, la syntaxe est par exemple
$ ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'dc=lacompagnie,dc=fr' '(cn=Anna*)' gidNumber
Il est possible de faire des filtres assez élaborés, voir ici.
19.1.4. Configuration d'un client
On peut paramétrer un client Linux afin que le système utilise un annuaire LDAP de façon transparente.
Sous Debian, les paquets à installer sont ldap-utils et libnss-ldap.
Il faut également installer le paquet libpam-ldap pour permettre les
authentifications avec PAM ; voir
la documentation.
Sous CentOS, les paquets nécessaires sont openldap-clients, sssd et sssd-ldap,
voir par exemple
ce descriptif.
La configuration se fait en particulier dans le fichier /etc/nsswitch.conf,
dont on avait déjà parlé au cours n°18 : l'idée est de
placer le module ldap en premier lorsque c'est LDAP qui doit faire autorité.
Pour aller plus loin sur les concepts de LDAP :
19.2. Installation d'un serveur DHCP
19.2.1. Installation du serveur
Le seul paquet nécessaire est isc-dhcp-server.
Le serveur doit avoir des interfaces directement sur les réseaux pour lesquels il distribue des adresses IP.
Il y a 2 fichiers de configuration :
-
/etc/default/isc-dhcp-serverpour les options de configuration du service (fichiers à lire, PID, interfaces auxquelles se connecter) :#DHCPDCONF=/etc/dhcp/dhcpd.conf #DHCPDPID=/var/run/dhcpd.pid INTERFACES="enp0s8 ensp0s9" -
/etc/dhcp/dhcpd.confpour la configuration du programme :- les options DHCP
- la définition des zones du DNS
Le fichier par défaut contient des directives générales, et des définitions de zones et d'adresses fixes :
# nom du serveur DHCP
server-name "dhcp.mondomaine.lan";
# suffixe domaine
option domain-name "mondomaine.lan";
# serveurs de noms
option domain-name-servers 192.168.1.1, 192.168.1.2;
# type de mise à jour du DNS (aucune)
ddns-update-style none;
# mode autoritaire
authoritative;
# adresse réseau donnée pour une durée en secondes
default-lease-time 600;
# durée maximale en secondes pour une adresse réseau lorsque le client
# demande une durée spécifique
max-lease-time 7200;
# masque de sous-réseau, broadcast, passerelle, serveur de date
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option ntp-servers 192.168.1.254;
# autoriser/interdire (allow/deny) les clients inconnus, c-à-d non dans
# la liste d'adresses MAC ci-dessous
allow unknown-clients;
subnet 192.168.1.0 netmask 255.255.255.0 {
# plages d'adresses IP assignée au client
range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
# IP fixes à partir des adresses MAC
host client1 {
hardware ethernet 12:34:56:78:90:AB;
fixed-address 192.168.1.101;
}
host client2 {
hardware ethernet 23:45:67:89:0A:BC;
fixed-address 192.168.1.102;
}
}
# messages syslog
log-facility local7;
Pour les diagnostics : /var/log/syslog
Pour gérer le service :
$ systemctl status|start|stop isc-dhcp-server
Voir : https://doc.ubuntu-fr.org/isc-dhcp-server
19.2.2. Configuration du client
Pour configurer une interface en dhcp, on peut utiliser la commande :
$ dhclient eth0
Elle enverra une requête pour configurer l'interface eth0, et gérera ensuite
le bail.
Pour libérer le bail, il suffira d'utiliser l'option -r de cette commande :
$ dhclient -r eth0
Pour que la configuration soit inscrite dans un fichier, il faudra modifier le
fichier /etc/network/interfaces, et utiliser la directive dhcp :
allow-hotplug eth0
iface eth0 inet dhcp
Après quoi les commandes ifup et ifdown permettront de lancer et désactiver
l'interface (voir aussi section 17.2.1).
Voir :
man dhclient.conf.
- Remarque :
- Les clients basés sur
networkmanageront un clientdhcpintégré. Il est possible de configurernetworkmanagerpour utiliserdhclient, voir ce lien.