
NFS (Network File System) est un service de partage de fichiers à distance. C'est un protocole Unix qui permet de monter (d'accéder), via le réseau, un système de fichiers distant. Comme tel il est utilisable sur tous les systèmes Unix et par conséquent sous Linux.
NFS est un service RPC (Remote Procedure Call: Appel de procédures distantes). Pour le partage NFS sous Windows il existe un applicatif winnfsd qui permet de monter des répertoires d'un système Windows depuis un poste Unix ( http://sourceforge.net/projects/winnfsd).
Les RPC sont la base de NFS sur lesquels il s'appuie. NFS est un service RPC. Les RPC sont une API développée par SUN et mis depuis dans le domaine public. Elles permettent l'écriture d'applications du type client/serveur qui consiste à demander l'exécution d'une procédure distante avec retour du résultat. Les services RPC sont gérés via un annuaire nommé le portmapper . Un programme client qui envoie une requête NFS s'adresse au portmapper qui est un démon accessible sur le port 111 en TCP ou UDP (voir le fichier /etc/services pour une description des ports standards). Lorsque ce client s'adresse au portmapper, il lui demande où se trouve le serveur NFS et portmapper lui indique alors le port correspondant à ce service (port 2049 par défaut pour NFS).
Une commande RPC utile, rpcinfo, permet de connaître les services RPC qui sont actifs sur une machine. Exemple:
yann@yuluth:~$ rpcinfo -p
program no_version protocole no_port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 772 status
100024 1 tcp 775 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 32790 nlockmgr
100021 3 udp 32790 nlockmgr
100021 4 udp 32790 nlockmgr
100021 1 tcp 32770 nlockmgr
100021 3 tcp 32770 nlockmgr
100021 4 tcp 32770 nlockmgr
100005 1 udp 834 mountd
100005 1 tcp 837 mountd
100005 2 udp 834 mountd
100005 2 tcp 837 mountd
100005 3 udp 834 mountd
100005 3 tcp 837 mountd
NFS (Network File System) est un service de partage de fichiers à distance. Cette partie concerne une mise en oeuvre minimale et fonctionnelle du partage NFS sur un réseau TCP/IP.
La partie serveur de NFS est intégré au noyau sous forme de module ou compilé en dur. Sur Debian il est sous la forme de module et pour l'activer directement au démarrage il faut installer le paquetage NFS-kernel-server.
La première chose à faire est de déterminer les répertoires que l'on veut partager sur le réseau, avec qui ou quoi les partager, comment les partager (i.e. quelles propriétés associer à chaque répertoire partagé) et ensuite de les configurer dans le serveur NFS.
Un serveur NFS est actif si les démons suivants sont actifs sur le serveur.
A titre d'exemple, nous allons voir la mise en place d'un répertoire de données /data dans différentes circonstances sur le serveur gavrinis.
La configuration du partage des répertoires via NFS se fait dans le fichier /etc/exports.
Synopsis d'une ligne de configuration d'un partage dans /etc/exports:
/chemin/repertoire machine1(option1,option2,...) autre_machine(...)
Remarque: Sur la debian, le service de partage NFS ne se lancera pas si le fichier /etc/exports n'est pas renseigné.
Configuration de /etc/exports pour le partage de /data de gavrinis pour la machine berder uniquement:
gavrinis:~# cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). /data berder(rw)
La ligne indique que nous exportons le répertoire /data (exporter = partager) pour le client berder uniquement et en lecture/écriture (rw).
Ensuite il faut lancer le service de partage NFS (maintenant /etc/exports est renseigné):
gavrinis:~# /etc/init.d/NFS-kernel-server start
Les options sont disponibles via la commande: man exports
On pourrait, en plus, vouloir partager ce répertoire pour les autres machines du réseau en lecture seule:
gavrinis:~# cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). /data berder(rw,sync) 192.168.1.* gavrinis:~# /etc/init.d/NFS-kernel-server restart
Pour la partie des machines du réseau nous aurions pu ajouter l'option ro pour lecture seule, mais c'est le mode actif par défaut!
Pour la partie cliente, la prise en compte d'un partage NFS revient à faire un simple montage de système de fichiers qui sera vu avec le type NFS.
Pour les manipulations suivantes vérifions ce qu'il y a dans le répertoire /data du serveur gavrinis:
gavrinis:~# ls /data debian libcurses-perl_1.12-1ubuntu1_i386.deb libcurses-ui-perl_0.95-1_all.deb libterm-readkey-perl_2.21-1.3_i386.deb fstab sysv-rc-conf_0.99-1_all.deb kernel welcome.msg
Par exemple en ligne de commande sur la machine berder:
berder:~# mkdir /mnt/data berder:~# mount -t NFS gavrinis:/data /mnt/data berder:~# ls /mnt/data debian libcurses-perl_1.12-1ubuntu1_i386.deb libcurses-ui-perl_0.95-1_all.deb libterm-readkey-perl_2.21-1.3_i386.deb fstab sysv-rc-conf_0.99-1_all.deb kernel welcome.msg
Pour prendre en compte ce montage au démarrage du système, la ligne suivante peut être renseignée dans le fichier /etc/fstab de berder:
gavrinis:/data /mnt/data NFS rsize=1024,wsize=1024,rw,nosuid 0 0
rsize et wsize sont des options de montage associées au type NFS qui indiquent la taille des blocs en lecture ("taille de blocs réseaux") et la taille des blocs en écriture. Cela concerne les capacités de la carte réseau et les tailles par défauts, respectivement 4096 et 8192 peuvent ne pas convenir).
L'accès est ici en lecture/écriture (rw).
nosuid est une option qui supprime les bits suid dans la zone de partage (vu par le client). C'est une mesure de protection.