Aller au contenu

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 (ldap en clair) ou 636 (ldaps via 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 :

  • dc pour domain component,
  • ou pour organisational unit,
  • cn pour common name (le nom complet),
  • sn pour surname (le nom),
  • gn pour 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
ceci affiche la base locale. Pour interroger via le service 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-server pour 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.conf pour 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 networkmanager ont un client dhcp intégré. Il est possible de configurer networkmanager pour utiliser dhclient, voir ce lien.