Documentation / – OpenLDAP, PAM-LDAP et NFS

Procédure validée sur Debian 7 et Ubuntu 12.04

1 Présentation du projet

Nous souhaitons créer un serveur central d’authentification et de fichiers sous Debian permettant à des clients de s’y connecter.

2 Installation et configuration du serveur OpenLDAP

OpenLDAP est un annuaire informatique qui fonctionne sur le modèle client/serveur. Il contient des informations de n’importe quelle nature qui sont rangées de manière hiérarchique.

Pour bien comprendre le concept, il est souvent comparé aux Pages Jaunes (Yellowpages), où le lecteur recherche un numéro de téléphone particulier: il va d’abord sélectionner la profession, puis la ville, puis le nom de l’entrée pour trouver au final le numéro de téléphone. En pratique, il est utilisé pour enregistrer une grande quantité d’utilisateurs ou de services (parfois des centaines de milliers) dans un réseau informatique. Il permet d’organiser hiérarchiquement les utilisateurs par département, par lieu géographique ou par n’importe quel autre critère.

Source : Wikipedia

2.1 Installation des paquets Sur le serveur, installer les paquets slapd et ldap-utils : apt−get install slapd ldap−u t i l s

Nous pouvons y ajouter une interface de gestion de l’annuaire, phpldapadmin : apt−get install phpldapadmin

2.2 Configuration de l’annuaire Afin de configurer l’annuaire, tapez : dpkg−reconfigure slapd

Répondez aux questions comme suit :

Voulez-vous omettre la configuration d’OpenLDAP Non Nom de domaine Votre nom de domaine (exemple : mondomaine.local) Nom d’entité ("organization") Votre nom de domaine (exemple : mondomaine.local) 1 Mot de passe de l’administrateur Un mot de passe assez fort. Module de base de données à utiliser HDB Faut-il supprimer la base de données à la purge du paquet Comme vous voulez. Faut-il déplacer l’ancienne base de données Oui

Faut-il autoriser le protocole LDAPv2 Déconseillé

1Voir les recommandations de l’ANSSI à propos des mots de passe.

1 2.3 Configuration de PHP LDAP Admin

Éditez le fichier /etc/phpldapadmin/config. de la manière suivante :

• Remplacez $ s e r v e r s −>setValue( ’server ’ , ’name’ , ’My␣LDAP␣Server ’);

par $ s e r v e r s −>setValue( ’server ’ , ’name’ , ’Mon␣nom␣de␣serveur␣LDAP’);

• Remplacez $ s e r v e r s −>setValue(’server ’,’base’, array ( ’dc=example ,dc=com’ ));

par $ s e r v e r s −>setValue(’server ’,’base’, array ( ’dc=mondomaine,dc=local ’ ));

• Remplacez $ s e r v e r s −>setValue( ’login ’ , ’bind_id ’ , ’cn=admin,dc=example ,dc=com’);

par $ s e r v e r s −>setValue( ’login ’ , ’bind_id ’ , ’cn=admin,dc=mondomaine,dc=local ’);

• Remplacez // $ c o n f i g −>custom−>appearance[’hide_template_warning ’] = false ;

par $ c o n f i g −>custom−>appearance[ ’hide_template_warning ’] = true ;

• Sauvegardez et quittez

2.4 Peuplement de l’annuaire Trois choix s’offrent à nous : • Peupler manuellement l’annuaire avec PHP LDAP Admin

• Peupler à l’aide d’un script Bash • Peupler à l’aide d’un script Python

Nous allons étudier le peuplement par script Python. Nous allons ajouter une librairie au serveur : apt−get install python−ld ap Voici le code permettant de se connecter à l’annuaire (remplacer par vos valeurs) : import ldap ,os,hashlib from base64 import encodestring as encode from base64 import decodestring as decode import ldap.modlist as modlist

l = l da p . open ("127.0.0.1") l .simple_bind_s("cn=admin ,dc=mondomaine,dc=local ,"test") Le code permettant d’ajouter un OU (organizational unit) :

2 dn="ou=MonOU, dc=mondomaine , dc=local " a t t r s = {} attrs[’objectclass ’] = [’organizationalUnit’] attrs[’ou’] = name ldif = modlist.addModlist(attrs) l.add_s(dn, ldif) Voici le code pour hacher le mot de passe : def makeSecret(password ): salt = os.urandom(4) h = hashlib.sha1(password) h.update(salt) return "{SSHA}" + encode(h.digest() + salt)[: − 1 ] Le code permettant d’ajouter un utilisateur : dn="cn=toto ,ou=MonOU, dc=mondomaine , dc=local " a t t r s = {} attrs[’objectclass ’] = [’top’,’inetOrgPerson’,’posixAccount’] attrs [ ’cn’] = "Thomas␣Dupont" attrs [ ’userPassword ’] = makeSecret("MonMotDePasseSuperSecurise") attrs[’sn’] = ’toto’ attrs[’gidNumber’] = ’500’ attrs[ ’homeDirectory’] = ’/home/toto ’ attrs[’uid’] = ’toto’ attrs[ ’uidNumber’] = ’1001’ ldif = modlist.addModlist(attrs) l.add_s(dn, ldif)

2.5 Rendre le serveur client de l’annuaire Si vous voulez que le serveur soit client de l’annuaire, installez ces paquets : apt−get install libnss −ldapd libpam−ld ap nscd ca−certificates libpam−f o r e g r o u n d

Répondez aux questions comme suit : L’URI du serveur LDAP ldap://127.0.0.1 Base de recherche du serveur LDAP dc=mondomaine,dc=local

Service de nom à configurer group,shadow et passwd. L’URI du serveur LDAP ldap://127.0.0.1 (de nouveau) Le DN de la base de recherche dc=mondomaine,dc=local (de nouveau) Version de LDAP à utiliser 3 Faut-il que le root local soit l’administrateur de la base de données ? Oui Est-ce que le LDAP nécessite une connexion Non Compte LDAP du root cn=admin,dc=mondomaine,dc=local

Mot de passe du compte LDAP du root Le mot de passe renseigné lors de l’installation du LDAP.

3 Mise en place du client LDAP

Sur votre/vos client(s), installez les paquets suivants : apt−get install ldap−auth−client nscd libnss −ldapd libpam−ld ap

3 Durant l’installation, il vous sera demandé de renseigner les informations suivantes : L’URI du serveur LDAP ldap://192.168.1.100 Le DN de la base de recherche dc=mondomaine,dc=local

Service de nom à configurer group,shadow et passwd. L’URI du serveur LDAP ldap://192.168.1.100 (de nouveau)

Le DN de la base de recherche dc=mondomaine,dc=local (de nouveau) Version de LDAP à utiliser 3 Faut-il que le root local soit l’administrateur de la base de données ? Oui

Est-ce que le LDAP nécessite une connexion Non Compte LDAP du root cn=admin,dc=mondomaine,dc=local

Mot de passe du compte LDAP du root Le mot de passe renseigné lors de l’installation du LDAP.

Configurez nsswitch afin qu’il interroge l’annuaire LDAP en entrant : auth−c l i e n t −c o n f i g −t nss −p l a c _ l d a p

Testez la configuration de nsswitch.conf avec getent : getent passwd getent group

Vous remarquerez l’apparition des utilisateurs LDAP dans cette liste.

Finalisez la configuration en entrant : pam−auth−update /etc/init.d/nscd restart On vous demandera quels modules activer, cochez toutes les cases et validez.

Configurez lightdm en ajoutant ce qui suit au fichier de configuration /etc/lightdm/lighhtdm.conf : g r e e t e r −hide −u s e r s=true allow −g u e s t=f a l s e

4 Installation et configuration du serveur NFS

Network File System (ou ’NFS’, système de fichiers en réseau) est à l’origine un protocole développé par Sun Microsystems en 1984 qui permet à un ordinateur d’accéder à des fichiers via un réseau. Il fait partie de la couche application du modèle OSI et utilise le protocole RPC.

Ce système de fichiers en réseau permet de partager des données principalement entre systèmes UNIX. Des versions existent pour Macintosh ou Microsoft Windows.

NFS est compatible avec IPv6 sur la plupart des systèmes.

Source : Wikipedia

4 4.1 Installation des paquets Sur le serveur, installer le paquet nfs-kernel-server : apt−get install nfs −k e r n e l −s e r v e r

4.2 Configurer le serveur NFS

Éditez le fichier /etc/exports : /home/ 192.168.1.0/24(rw,sync)

La version 4 de NFS pose certains problèmes. Nous allons rétrograder à la version 3. Éditez le fichier /etc/default/nfs-kernel-server et replacez : RPCNFSDCOUNT=’ 8 ’ par RPCNFSDCOUNT=’ 8␣−−no−nfs −v e r s i o n ␣4 ’

Redémarrez le service NFS pour prendre en compte de vos modifications : s e r v i c e nfs −k e r n e l −server reload

4.3 Configurer le client NFS Nous allons installer le module NFS sur le client : apt−get install nfs −common

Puis effectuons le point de montage. Pour cela, éditez le fichier /etc/fstab et ajoutez-y la ligne suivante : 192.168.1.100:/home/ /home nfs defaults,_netdev,nfsvers=3 0 0

Auteur : Antoine Pernot

5