Le coin des pros  
Installer et Utiliser NFS

 
INTRODUCTION

Le protocole NFS permet de partager facilement des fichiers entre des machines Unix, et donc Linux.
C'est un modèle client-serveur : une machine exporte, ie met à disposition, des répertoires de son système de fichier local sur le réseau. Suivant les droits d'accès, les autres stations du réseau peuvent monter ces répertoires, qui seront alors vus comme des répertoires locaux.
Bien évidemment, un ordinateur peut être à la fois client et serveur NFS.

Nous illustrerons la mise en oeuvre avec une Redhat 6.2.


COTE SERVEUR
Installez le paquetage nfs-utils :

rpm -Uvh nfs-utils-version-plateforme.rpm

Soit, si vous installer le paquetage d'origine de la Redhat 6.2:
rpm -Uvh nfs-utils-0.1.6-2.i386.rpm

Assurez-vous que les services nfs et nfslock soient correctement renseignés dans les scripts de démarrage :
si ce n'est pas le cas, faites :

    ln -s /etc/rc.d/init.d/nfs /etc/rc.d/rc3.d//S70nfs
    ln -s /etc/rc.d/init.d/nfslock /etc/rc.d/rc3.d//S71nfslock

Adaptez "rc3.d"  en fonction de votre niveau d'exécution (runlevel) et "S70" suivant l'ordre de démarrage des services.
Vous pouvez également utiliser un outil graphique du type tksysv.
 

Si vous préférez les lancer manuellement, faites un :

    /etc/rc.d/init.d/nfs restart
    /etc/rc.d/init.d/nfslock restart

(Faire un restart vous assure un redémarrage propre des daemons si ceux-ci étaient déjà lancés)

Vous pouvez toujours vous assurer du bon fonctionnement du service par :

/etc/rc.d/init.d/nfs status

Attention : la version Redhat de NFS utilise le diffuseur de ports dynamiques (portmapper) : assurez-vous que ce service soit bien lancé au préalable :
/etc/rc.d/init.d/portmap status

Sinon, démarrez-le :
/etc/rc.d/init.d/portmap start
 

Il vous faut renseigner le fichier /etc/exports pour indiquer la liste des répertoires à exporter :
une entrée dans ce répertoire se décompose de la manière suivante :

    "répertoire local"    "liste des machines autorisées à se connecter avec les options collées entre parenthèses"

par exemple :

/home    ollinux(rw)    station1(ro)
/projet    station1(rw) (ro)
/brouillon

L'ordinateur exporte son répertoire /home : la machine ollinux pourra le monter en lecture/écriture (rw), station1 en lecture seule(ro), les autres machine ne pourront pas se connecter.
De même, station1 pourra accéder en lecture/écriture au répertoire projet et toutes les autres stations en lecture seule.
Enfin, tout le monde pourra accéder en lecture/écriture au répertoire brouillon ( l'option rw est celle par défaut).

Notez bien que les droits en écriture via le réseau seront toujours inhibés par les droits sur le système de fichier. Prenons par exemple un fichier test appartenant à root, situé dans le répertoire projet et avec les droits 600 (lecture/écriture pour root uniquement , aucun droit pour les autres). Si l'utilisateur toto accède via la station station1 au répertoire /projet, il ne pourra pas accéder au fichier test, bien qu'il ait les "droits réseaux read-write".

Un fois le fichier /etc/exports correctement configuré, il suffit de relancer le service NFS par la commande  pour que les modifications soient prises en compte :

  /etc/rc.d/init.d/nfs reload
 


COTE CLIENT

 

C'est relativement simple puisque le "système de fichier réseau" NFS est directement intégré au noyau.
Il vous suffit de vérifier que ce dernier a été compilé avec la prise en charge de NFS. C'est le cas de toutes les distributions récentes.

Pour monter un système de fichier distant, utiliser la commande mount avec l'otion nfs :

    mount -t nfs machine_distante:répertoire répertoire_local -o options

Par exemple :

    mount -t nfs breizh:/armor/plages /mnt/cotes -o ro

montera le répertoire /armor/plages, exporté par la station breizh, dans le répertoire local /mnt/cotes, en lecture seule.
Il faut bien entendu que le nom breizh soit résolu par un gethostbyname(). Pour un petit réseau, une simple entrée dans le répertoire /etc/hosts suffit:

   192.168.0.11    breizh

192.168.0.11 est l'adresse IP de breizh.

Le plus simple est de renseigner le fichier /etc/fstab , afin de faciliter le montage : la syntaxe est la suivante :

    "ordinateur distant:répertoire distant"    "répertoire local"     nfs    options    0    0

Pour reprendre l'exemple précédent , cela donnerait :

breizh:/armor/plages    /mnt/cotes nfs auto,rw,user,soft 0 0

Les options sont les mêmes que pour le système de fichier local (ext2fs) avec en plus, spécifiques à NFS :

soft : utilisée conjointement avec auto, elle permet de monter un répertoire distant au démarrage mais sans insister si le serveur est inaccessible.
timeo=t : indique la durée en seconde (remplacer t par un chiffre) pendant laquelle le répertoire essaye d'être monté.



 
CONCLUSION

 En appliquant ces directives, vous pouvez déjà installer un réseau NFS .
Je complèterai prochainement cette documentation en détaillant la sous-couche technique ( démons mis en jeux, portmapper, sécurité). Je parlerai également de la compatibilité avec les autres Unix ( quasi totale) et de l'auto-monteur, procédé qui permet de monter "à la demande" les répertoires.