Synthèse: OpenLDAP + NFS + automount
Date: 02/03/2005 Auteur: Laurent Oliva

Objectif du document:

Ce document décrit comment mettre en place un serveur d'authentification basé sur OpenLDAP, ainsi qu'un serveur de fichier NFS qui servira à exporter les répertoires personnels des utilisateurs. Le répertoire personnel de l'utilisateur sera monté automatiquement via l'outil automount, et ce service sera déclaré dans l'annuaire exactement comme un utilisateur.

Cette documentation se veut très simple et concise, beaucoup d'aspects n'ont pas été traités, des améliorations seront effectuées au gré du temps. Je suis bien entendu ouvert ouvert à toute critique quelle qu'elle soit, donc n'hésitez pas ;-)

1/ Serveur

1.1/ OpenLDAP

Installation du serveur OpenLDAP:

apt-get install slapd

Après l'installation, plusieurs questions sont posées pour la configuration de base:

Entrer le nom de domaine DNS	toto.com
Entrer le nom de l'organisation	toto
Password de l'admin LDAP	admin
Autoriser le protocole v2	Non

Il faut ensuite reconfigurer le paquet pour choisir le format de la base:

dpkg-reconfigure slapd

Passer la configuration de slapd	Non
Entrer le nom de domaine DNS	toto.com
Entrer le nom de l'organisation	toto
Password de l'admin LDAP	admin
Format de la base	LDBM
Autoriser le protocole v2	Non

Une fois la configuration de base effectuée, nous allons pouvoir créer notre arbre:

toto.com

tartenpion	services

utilisateurs	nfs	groupes

Déclaration de la structure de l'annuaire dans un fichier LDIF:

init_directory.ldif:

dn: ou=tartenpion,dc=toto,dc=com

objectClass: top

objectClass: organizationalUnit

ou: bioinfo

description: Branche best

dn: ou=utilisateurs,ou=tartenpion,dc=toto,dc=com

objectClass: top

objectClass: organizationalUnit

ou: etudiants

description: Branche utilisateurs

dn: ou=services,dc=toto,dc=com

objectClass: top

objectClass: organizationalUnit

ou: services

description: Branche des services

dn: ou=groupes,ou=services,dc=toto,dc=com

objectClass: top

objectClass: organizationalUnit

ou: groupes

description: Branche des groupes

dn: ou=nfs,ou=services,dc=toto,dc=com

objectClass: top

objectClass: organizationalUnit

ou: nfs

description: Branche du service nfs

Ajout de l'arbre dans OpenLDAP:

ldapadd -x -f init_directory.ldif -W -D cn=admin,dc=toto,dc=com

Ajout d'un groupe d'utilisateur:

groupe.ldif:

dn: cn=groupe_exemple,ou=groupes,ou=services,dc=toto,dc=com

objectClass: top

objectClass: posixGroup

cn: groupe_exemple

gidNumber: 1111

description: Exemple de groupe

Ajout du groupe dans l'annuaire:

ldapadd -x -f groupe.ldif -W -D cn=admin,dc=toto,dc=com

Ajout d'un utilisateur:

Exemple d'ajout d'utilisateur portant le nom Jean Dupont

user.ldif:

dn: uid=dupont,ou=utilisateurs,ou=tartenpion,dc=toto,dc=com

objectClass: top

objectClass: posixAccount

objectClass: person

objectClass: organizationalPerson

objectClass: inetOrgPerson

uid: dupont

cn: Dupont Jean

sn: Dupont

givenName: Jean

uidNumber: 1100

gidNumber: 1111

homeDirectory: /home/dupont

loginShell: /bin/bash

userPassword: dupont

mail: jean.dupont@toto.com

l: France

ou: groupe_exemple

Ajout de l'utilisateur dans l'annuaire:

ldapadd -x -f user.ldif -W -D cn=admin,dc=toto,dc=com

Note: Il faudra spécifier un UID différent pour chaque utilisateur, en revanche le GID doit rester le même puisqu'il rassemble les utilisateurs au sein de ce même groupe, ce qui permettra par ailleurs aux utilisateurs de pouvoir échanger des fichiers entre eux.

Définir dans l'annuaire les classes d'objet pour automount:

Pour que le répertoire de l'utilisateur soit monté automatiquement, il faut mettre en oeuvre le programme automount, il est nécessaire de déclarer de nouveaux objet dans le schema LDAP:

attributetype ( 1.3.6.1.1.1.1.25 NAME 'automountInformation'

DESC 'Information used by the autofs automounter'

EQUALITY caseExactIA5Match

SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

objectclass ( 1.3.6.1.1.1.1.13 NAME 'automount' SUP top STRUCTURAL

DESC 'An entry in an automounter map'

MUST ( cn $ automountInformation )

MAY ( description ) )

objectclass ( 1.3.6.1.4.1.2312.4.2.2 NAME 'automountMap' SUP top STRUCTURAL

DESC 'An group of related automount objects'

MUST ( ou ) )

Ajouter ces lignes dans le fichier /etc/ldap/schema/nis.schema puis redémarrer l'annuaire pour que les changements soient pris en compte:

/etc/init.d/slapd restart

Nous pouvons maintenant ajouter dans l'annuaire les entrées relatives à automount.

automount.ldif:

dn: ou=auto.home,ou=nfs,ou=services,dc=toto,dc=com

objectClass: top

objectClass: automountMap

ou: auto.home

dn: cn=/,ou=auto.home,ou=nfs,ou=services,dc=toto,dc=com

objectClass: top

objectClass: automount

cn: /

automountInformation: -rw, Adresse_IP_serveur_NFS:/home/&

ldapadd -x -f automount.ldif -W -D cn=admin,dc=toto,dc=com

Voilà, maintenant notre annuaire dispose des entrées nécessaire, pour chaque utilisateur nouvellement créé, il faudra donc créer son répertoire personnel sur le serveur et lui attribuer les bons droits, il faut donc que le serveur ait connaissance des utilisateurs faisant partie de l'annuaire, nous allons donc installer libnss-ldap.

Ce mécanisme permet soit d'utiliser l'annuaire comme référence d'authentification soit de continuer à utiliser les fichiers /etc/passwd, /etc/group etc comme auparavant, si un utilisateur n'existe pas dans l'annuaire alors on switch sur les fichiers locaux.

3.2) Installation du dupléxage de service de noms

apt-get install libnss-ldap

Plusieurs questions sont posées pour la configuration:

-- L'adresse du serveur LDAP, il faudra mettre ici localhost

-- Le DN de base de l'annuaire, il faut mettre ici dc=toto,dc=com

-- La version du protocole à utiliser, ici version 3

-- Pas de login requis, répondre “non”

-- Puis enfin répondre “non” à la derni-re question

Modifier le fichier /etc/nsswitch.conf:

passwd:	ldap compat

group:	ldap compat

shadow:	ldap compat

Ce mécanisme permettra au serveur d'avoir connaissance des utilisateurs déclarés dans l'annuaire, en effet si nous voulons affecter des droits sur les fichiers et les répertoires il faut que le serveur connaisse les utilisateurs en question, il en va de même pour les groupes.

3.3) Mise en oeuvre du serveur de fichier NFS

Le serveur de fichier NFS permet à des machines Unix/Linux clientes de pouvoir “monter” un répertoire exporté par le serveur, ce mécanisme s'articule autour des services RPC (Remote procedure Call).

Pour installer le serveur NFS il faut lancer la commande:

apt-get install nfs-kernel-server

Ce paquet installe les éléments nécessaires, à savoir les services RPC, et le portmapper.

Le portmapper est un convertisseur de port DARPA vers numéro de programme RPC, il est possible de vérifier les services rpc tournant sur le serveur par la commande:

rpcinfo -p localhost

program no_version protocole no_port

100000 2 tcp 111 portmapper

100000 2 udp 111 portmapper

100024 1 udp 4000 status

100024 1 tcp 4000 status

100003 2 udp 2049 nfs

100003 3 udp 2049 nfs

100003 4 udp 2049 nfs

100003 2 tcp 2049 nfs

100003 3 tcp 2049 nfs

100003 4 tcp 2049 nfs

100021 1 udp 34696 nlockmgr

100021 3 udp 34696 nlockmgr

100021 4 udp 34696 nlockmgr

100021 1 tcp 36006 nlockmgr

100021 3 tcp 36006 nlockmgr

100021 4 tcp 36006 nlockmgr

100005 1 udp 8000 mountd

100005 1 tcp 8000 mountd

100005 2 udp 8000 mountd

100005 2 tcp 8000 mountd

100005 3 udp 8000 mountd

100005 3 tcp 8000 mountd

Note: Certains services NFS utilisent des ports dynamiques ce qui rend difficile le filtrage réseau si le serveur NFS ne se trouve pas dans le même sous-réseau que les clients (ce qui est notre cas ici), il faut spécifier le port à utiliser de manière fixe dans le fichier /etc/default/nfs-common et

/etc/default/nfs-kernel-server

/etc/default/nfs-common (Ce fichier permet de fixer le port qui sera utilisé par rpc.statd):

STATDOPTS="--port 4000"

/etc/default/nfs-kernel-server (Ce fichier permet de fixer le port qui sera utilisé par rpc.mountd):

RPCMOUNTDOPTS="--port 8000"

Pour spécifier un port fixe avec lockd, il faut modifier /etc/modules.conf

options lockd nlm_udpport=12000 nlm_tcpport=12000

Ou alors, spécifier dans lilo.conf l'option suivante:

lockd.udpport=12000 lockd.tcpport=12000

Pour exporter un système de fichier, il faut éditer le fichier /etc/exports de la manière suivante:

/home	réseau_local.*(rw,root_squash)

Ici, il suffit de spécifier le sous-réseau qui accèdera au serveur via NFS, il faut par ailleurs ajouter ce même sous-réseau au sein du fichier /etc/hosts.allow

portmap: 10.115.128.0/255.255.255.0

ALL: 10.115.128.0/255.255.255.0

Pour chaque utilisateur ajouté au sein de l'annuaire, il faudra créer son répertoire au sein de /home (Système de fichier exportés par NFS) et positionner les bons droits sur ce dernier pour qu'il soit en phase avec l'annuaire.

Partie Client

4.1) libnss-ldap

Maintenant que le serveur est prêt, il nous reste à installer et configurer les élements permettant d'utiliser l'annuaire comme référence d'authentification puis d'utiliser automount pour monter le répertoire personnel de l'utilisateur dès sa connexion (locale ou distante).

apt-get install libnss-ldap

Adresse du serveur LDAP	adresse_serveur
Annuaire	dc=toto,dc=com
Version du protocole LDAP	3
Authentification nécessaire à la base	Non
Lisible et modifiable uniquement par le propriétaire	Non

Il faut ensuite préciser d'utiliser le serveur LDAP avant les fichiers locaux pour les comptes utilisateurs, il faut pour cela modifier le fichier /etc/nsswitch.conf :

passwd:	ldap compat

group:	ldap compat

shadow:	ldap compat

libpam-ldap

apt-get install libpam-ldap

Création d'une BD locale pour l'admin	Oui
Authentification nécessaire à la base	Non
Compte privilégié de l'annuaire	cn=admin, dc=toto, dc=com
Password	E/b*=I
Chiffrement des password	crypt

Modifier les méthodes d'authentification

Le module pam-ldap recherche un élément de l'annuaire avec des attributs
de classe posixAccount dont l'attribut uid correspond au login. Modifier le fichier

/etc/pam.d/common-auth pour modifier la pile de l'authentification:

auth sufficient pam_ldap.so
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required pam_deny.so

Enfin, modifier le fichier /etc/pam.d/common-account.

account sufficient pam_ldap.so
account sufficient pam_unix.so use_first_pass

Automount

apt-get install autofs autofs-ldap

Ce programme permettra de monter automatiquement le répertoire personnel de l'utilisateur, si on utilise plus ce répertoire il est démonté automatiquement au bout de quelques secondes.

Pour indiquer à automount d'utiliser le serveur LDAP il faut renseigner /etc/auto.master:

/home	ldap://adresse_IP/ou=auto.home,ou=nfs,ou=services,dc=toto,dc=com –timeout=2

Redémarrer autofs pour que les changements soient pris en compte:

/etc/init.d/autofs reload

2005-02-22T10:22:36