Installation d'OpenLDAP, PAM-LDAP et NFS

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

Présentation du projet

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

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

Installation des paquets

Sur le serveur, installer les paquets slapd et ldap-utils :

apt-get install slapd ldap-utils

Nous pouvons y ajouter une interface de gestion de l'annuaire, phpldapadmin

apt-get install phpldapadmin

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)
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é

Configuration de PHP LDAP Admin

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

Remplacez

$servers->setValue('server','name','My LDAP Server');

par

$servers->setValue('server','name','Mon nom de serveur LDAP');

Remplacez

$servers->setValue('server','base',array('dc=example,dc=com'));

par

$servers->setValue('server','base',array('dc=mondomaine,dc=local'));

Remplacez

$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

par

$servers->setValue('login','bind_id','cn=admin,dc=mondomaine,dc=local');

Remplacez

//$config->custom->appearance['hide_template_warning'] = false;

par

$config->custom->appearance['hide_template_warning'] = true;

Sauvegardez et quittez

Peuplement de l'annuaire

Trois choix s'offrent à nous :

Nous allons étudier le peuplement par script Python. Nous allons ajouter une librairie au serveur :

apt-get install python-ldap

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 = ldap.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) :

dn="ou=MonOU,dc=mondomaine,dc=local"
attrs = {}
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"
attrs = {}
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)

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-ldap nscd ca-certificates libpam-foreground

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.

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-ldap

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-client-config -t nss -p lac_ldap

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 :

greeter-hide-users=true
allow-guest=false

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

Installation des paquets

Sur le serveur, installer le paquet nfs-kernel-server :

apt-get install nfs-kernel-server

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-version 4'

Redémarrez le service NFS pour prendre en compte de vos modifications :

service nfs-kernel-server reload

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