NFS : Network File System - partage de fichiers UNIX (Sun)

15 septembre 2006

Télécharger en PDF



NFS (abréviation de Network File System) est un produit développé par SUN (les premières versions datent de 1985) et est disponible en standard sur de nombreux systèmes UNIX. Il existe des versions NFS sur d'autres systèmes et même sous Windows XP. C'est un service TCP/IP basé sur le concept de RPC (Remote Procedure Call).

Table des matières

I.Principe 1

II.Fonctionnement 2

III.Mise en oeuvre sous Linux 4

a)Installation et démarrage 4

b)Le fichier de configuration 4

c)Rechargement de la liste des « export » NFS 5

d)Affichage des « export » NFS 5

e)Montage des « export » NFS 5

f)Précautions d'usage 6

g)Préliminaires aux Règles iptables 6

1.Généralités 7

2.Sous Debian 7

i.rpc.statd 7

ii.rpc.lockd 7

iii.rpc.mountd 7

iv.rpc.rquotad 7

3.Sous Fedora 7

h)Règles iptables 8

IV.Mise en oeuvre en client sous Windows 8

a)Prérequis 8

b)Procédure 8

V.Bibliographie 9





I.Principe


Le service NFS est un service serveur. On dit que le serveur "exporte" des disques ou une arborescence pour les clients NFS. Un client NFS, a besoin d'un produit client pour accéder aux serveurs. On dit qu'un client "monte" des disques exportés par une serveur. Pour le client, le fait de "monter" une arborescence exportée par une machine B, donne l'illusion aux utilisateurs de A que l'arborescence est un disque local. Un client peut également être serveur si le système d'exploitation le permet.


Il est à noter que NFS n'est pas sécurisé. En effet, NFS a une sécurité par hôte, c'est-à-dire que n'importe qui arrivant à se faire passer pour la machine autorisé (en changeant son IP) peut monter les « export » NFS sans mot de passe. Aucun mot de passe n'est requis, juste une IP et un UID/GID. De plus, une fois, monté, un « export » NFS, l'utilisateur se retrouve propriétaire des fichiers et dossiers ayant l'UID/GID de montage.

II.Fonctionnement

Le protocole NFS se compose en réalité de 5 protocoles qui tous, reposent sur les Remote Procedure Calls (RPC) et donc le démon portmap (aussi appelé rpc.portmap).


Le démon portmap a pour rôle de convertir les numéros de programmes RPC en numéros de ports :





Les 5 services permettant à NFS de fonctionner sont :







Il existe actuellement 2 versions de NFS : NFSv2 et NFSv3.

NFS repose sur le concept file handle qui est une sorte de contexte de fichier. Il permet de répérer de façon unique un objet d'un système de fichier, c'est à dire les fichiers et dossiers de toutes sortes (régulier, fifo...). Il contient par exemple, l'inode du fichier, mais également un fichier représentant le device où se trouve ce fichier. On peut donc voir NFS comme un système de fichiers qui en encapsule un autre.


NFS se sert donc des fichiers suivants :

Le processus de montage est donc le suivant :

III.Mise en oeuvre sous Linux

a)Installation et démarrage


Les packages NFS sont nfs-utils-lib, nfs-utils et portmap sou Fedora et nfs-common (partie cliente), nfs-kernel-server (partie serveur) et quota (si vous en avez), pour Debian.


Pour démarrer NFS, il faut que les deux démons rpc.mountd et rpc.nfsd soient bien démarrés ou plus simplement :

[root]# service nfs start

ou sous Debian :

[root]# /etc/init.d/portmap start

[root]# /etc/init.d/nfs-kernel-server start

[root]# /etc/init.d/nfs-common start


Si quelque chose ne va pas, c'est sûrement que portmap n'est pas démarré :

[root]# /etc/init.d/portmap start

Ensuite, on peut vérifier avec rpcinfo :

[root]# rpcinfo -p



La commande rpcinfo permet de connaître les services RPC qui fonctionnent (l'option -p) sur la machine spécifiée en argument.

b)Le fichier de configuration


La syntaxe de chaque ligne du fichier /etc/exports :

/chemin/dossier/à/exporter nom_machine(options)


Attention : sur une ligne qui n'est pas un commentaire, il faut utiliser l'espace uniquement dans les cas suivants :


nom_machine peut, entre autre, contenir :

Chaque nom de machine peut contenir :


Les options options peuvent être entre autre :


c)Rechargement de la liste des « export » NFS

Pour recharger l'ensemble des exports NFS, il suffit d'exécuter :

[root]# exportfs -ra


Pour décharger tous les exports, taper :

[root]# exportfs -ua


d)Affichage des « export » NFS

Pour obtenir la liste des « exports » montés par les clients sur le serveur local, exécutez :

[root]# showmount -a


Pour obtenir la liste des « export » sur une serveur distant

[root]# showmount -a <IP_ou_nom_DNS_serveur_distant>

ou

[root]# showmount -e <IP_ou_nom_DNS_serveur_distant>

e)Montage des « export » NFS

Pour monter un « export » NFS, il suffit de taper :

[root]# mount -t nfs -o user,nosuid,hard,intr IP_ou_nom_DNS_serveur:/chemin/export /point/montage


Si l'on veut utiliser le montage de façon permanente, dans le fichier /etc/fstab :

IP_ou_nom_DNS_serveur:/chemin/export /point/montage nfs user,nosuid,hard,intr 0 0


Attention: si vous avez le même UID que le propriétaire des fichiers, vous êtes propriétaire des fichiers sur les montages NFS.


f)Précautions d'usage

Le principal problème est que pour faire un montage NFS, le client doit avoir confiance en le serveur et réciproquement.

Un client ne peut croire aveuglément en un serveur, il faut donc préciser des options contraignantes lors de l'utilisation de la commande mount.

La première est : nosuid. Elle annule l'effet des bits SUID et SGID. Ainsi, une personne root sur le serveur doit se connecter d'abord en tant qu'utilisateur quelconque sur le client pour ensuite seulement redevenir root.

Une autre option, plus contraignante, est noexec. Elle interdit l'exécution des programmes contenus sur le système exporté. Cette option n'est utilisable que pour les systèmes contenant uniquement des données.

Du côté du serveur NFS, on peut également spécifier qu'on ne fait pas confiance au compte root des clients. On doit alors préciser dans le /etc/exports l'option root_squash. Ainsi, si un utilisateur avec l'UID 0 (celui de root) sur le client accède au système exporté par le serveur,  il se voit attribuer l'UID de nobody pour effectuer les requêtes sur les fichiers. Cette option est active par défaut sous Linux mais s'annule par l'option no_root_squash. On peut aussi préciser une plage d'UID pour lesquels l'option s'applique. Enfin les options anonuid et anongid permettent de changer l'UID/GID de l'utilisateur nobody en celui souhaité.

g)Préliminaires aux Règles iptables

Mettre iptables en place pour NFS n'est pas possible en l'état du fait que certains programmes écoutent sur des ports variables. Voici une liste des ports d'écoute de NFS :

Nom du démon

RPM

Port par défaut

Port suggéré

portmap

portmap

111

111

rpc.statd

nfs-utils

Variable

4000

rpc.nfsd

nfs-utils

2049

2049

rpc.lockd

nfs-utils & kernel

Variable

4001

rpc.mountd

nfs-utils

Variable

4002

rpc.rquotad

quota

Variable

4003

1.Généralités

Si on veut avoir un bon affichage dans netstat, tcpdump et autres, on ajoutera dans /etc/services :

rpc.nfsd        2049/tcp                       # RPC nfsd
rpc.nfsd        2049/udp                       # RPC nfsd
rpc.statd       4000/tcp                       # RPC statd listen
rpc.statd       4000/udp                       # RPC statd listen
rpc.mountd      4002/tcp                       # RPC mountd
rpc.mountd      4002/udp                       # RPC mountd
rcp.lockd       4001/tcp                       # RPC lockd/nlockmgr
rcp.lockd       4001/udp                       # RPC lockd/nlockmgr
rpc.quotad      4003/tcp                       # RPC quotad
rpc.quotad      4003/udp                       # RPC quotad

2.Sous Debian

i.rpc.statd

Editer le fichier /etc/default/nfs-common :

STATDOPTS='-p 4000'

ii.rpc.lockd

Editer /etc/modprobe.conf:

     options lockd nlm_udpport=4001 nlm_tcpport=4001

Si votre système à le code de lockd compilé dans le noyau et pas dans un module, ce qui précède ne fonctionne pas. Dans ce cas, vous devez ajouter les paramètres

"lockd.udpport=4001 lockd.tcpport=4001" à la ligne de démarrage de lilo et grub à la place.

Il peut être intéressant de lancer en root update-modules.

iii.rpc.mountd

Créer ou éditer le fichier /etc/default/nfs-kernel-server :

     RPCMOUNTDOPTS='-p 4002'

iv.rpc.rquotad

Créer ou éditer le fichier /etc/default/quota :

     RPCRQUOTADOPTS='-p 4003'

3.Sous Fedora

Créer ou éditer le fichier /etc/sysconfig/nfs :

LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002
STATD_PORT=4000
RQUOTAD=NO
RQUOTAD_PORT=4003

h)Règles iptables

#portmap

[root]# iptables -A INPUT -p tcp --dport 111 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 111 -j ACCEPT

#rpc.nfsd

[root]# iptables -A INPUT -p tcp --dport 2049 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 2049 -j ACCEPT



#rpc.statd

[root]# iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 4000 -j ACCEPT

#rpc.lockd

[root]# iptables -A INPUT -p tcp --dport 4001 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 4001 -j ACCEPT

#rpc.mountd

[root]# iptables -A INPUT -p tcp --dport 4002 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 4002 -j ACCEPT

#rpc.quotad

[root]# iptables -A INPUT -p tcp --dport 4003 -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 4003 -j ACCEPT



IV.Mise en oeuvre en client sous Windows

a)Prérequis

b)Procédure



Si vous changez d'utilisateur pour la connection du lecteur réseau et qu'un mot de passe vous est demandé, c'est biensûr celui du compte Windows et pas UNIX. En effet, Windows ne connaît pas le /etc/shadow.



V.Bibliographie

Network File System - Wikipédia

Introduction au service NFS

Linux NFS-HOWTO

Introduction à NFS

NFS : le partage de fichiers sous Unix



sharevb