Serveur NFS (Partage de fichiers)

Introduction

NFS (Network File System) est un système de partage de fichiers qui utilise les protocoles TCP/IP, RPC et XDR. La plupart des systèmes d’exploitation de type UNIX fournissent une implémentation de NFS dérivée du produit NFS de Sun.

Remarque : Même si il a souffert de graves défauts (mauvaise gestion des locks, peu de sécurité, …) par le passé, il reste le standard pour les partages de fichiers en réseaux hétérogènes (réseaux mélangeant différents systèmes d’exploitation). En effet, les autres systèmes de fichiers réseaux sont soit trop liés à un type de système d’exploitation (SMB, CIFS), soit propriétaires (NCP), soit trop lourd à mettre en oeuvre pour la plupart des réseau locaux de petites tailles (Coda).

Le principal intérêt de NFS réside donc dans le fait qu’il fonctionne correctement et est performant sur la plupart des systèmes d’exploitation, sans avoir besoin de beaucoup de configuration.

Les termes utilisés dans NFS sont :

  • Serveur NFS. Désigne le système qui possède physiquement les ressources (fichiers, répertoires) et les partages sur le réseau avec d’autres systèmes.
  • Client NFS. Désigne un système qui monte les ressources partagées sur le réseau. Une fois montées, les ressources apparaissent comme si elles étaient locales.

Remarque : NFS ne s’occupe pas des droits d’accès aux fichiers et répertoires, il laisse le système d’exploitation s’occuper de la sécurité. Celle-ci est donc gérée de la même façon que pour les fichiers locaux, avec les droits UNIX standards.

Installation

  • Côté serveur :
$ sudo apt-get install nfs-kernel-server
  • Côté client :
$ sudo apt-get install nfs-common

Configuration

La configuration du service NFS, côté serveur, se limite à lister les ressources partagées et les droits de montage.

Le fichier /etc/exports contient la liste des ressources partagées, une ligne par ressource. Le format des lignes et le suivant :

répertoire client1(options) client2(options) ...

Où :

  • répertoire est le nom de la ressource à partager. C’est forcément un répertoire local. Le chemin doit être absolu (il doit commencer par /).
  • client est un nom d’un ou plusieurs hôtes du réseau sous une des formes suivantes :

    • Nom de machine ou adresse IP, par exemple machine.intra.net
    • Sous réseau, par exemple 192.168.52.0/24
  • options (optionnel) est une liste d’options séparées par des virgules. Les options les plus utiles sont :

    • ro ou rw : Read Only (par défaut) ou Read Write
    • root_squash : L’utilisateur root local des clients (UID 0, GID 0) est considéré comme un utilisateur anonyme par le serveur (par défaut)
    • no_root_squash : L’utilisateur root des clients a les mêmes droits que l’utilisateur root du serveur (dangereux !)
    • squash_uids : liste des UID qui seront considérés comme utilisateurs anonymes par le serveur.

Exemple de fichier /etc/exports :

/export/home 192.168.0.0/16(rw,root_squash) admin.intra.net(rw,no_root_squash)
/usr/local machin.intra.net(ro) 192.168.0.10(rw)

A chaque modification du fichier /etc/exports, il faut recharger la configuration du service :

# /etc/init.d/nfs-kernel-server reload

La liste des ressources partagées peut être obtenue à l’aide de la commande showmount :

$ showmount -e
/export/home 192.168.0.0/16,admin.intra.net
/usr/local machin.intra.net,192.168.0.10

Utilisation

Aucune configuration particulière n’est nécessaire pour les clients. Les ressources partagées peuvent être listées et montées/démontées manuellement ou automatiquement.

Montage et démontage manuels d’une ressource :

$ showmount -e monserveur
$ mkdir -p /partage
$ mount monserveur:/export/home /partage
$ ls /partage/
$ umount /partage

Pour que cette ressource soit montée automatique au démarrage du client, il suffit de rajouter dans le fichier /etc/fstab du client la ligne suivante :

monserveur:/export/home /partage nfs rw 0 0