NFS (Network File System) sur Linux permet d’accéder à des partages par le réseau.
En clair donc, vous partagez un dossier afin de le rendre accessible par le réseau.
Un ou plusieurs clients peuvent alors monter ce dernier.
Cet article vous guide pour installer NFS sur Linux.
Comment monter un répertoire en NFS.

Table des matières
Introduction à NFS
NFS se présente sous la forme d’un client et serveur.
- Le serveur déclare les exports NFS.
- Le client lui monte ces dossiers NFS proposés par le serveur.
Il existe plusieurs versions NFSv2, NFSv3 ou NFSv4.
La dernière version est la 4.
Enfin NFS s’appuie sur portmap pour fonctionner.
Le portmapper mappe les services RPC aux ports sur lesquels ils écoutent.
Le service portmap utilise des wrappers TCP pour le contrôle d’accès et les règles de contrôle d’accès pour portmap affectent tous les services basés sur RPC. Il est également possible de spécifier des règles de contrôle d’accès pour chacun des démons NFS RPC.
Il faut donc installer les packages qui vont bien sur les deux machines.
- On configure la partie serveur et déclare les partages NFS.
- Ensuite on monte le dossier sur le client.
- Enfin on modifie le fichier /etc/fstab afin de le monter au démarrage.
Installer et configurer NFS
Sur les distributions à base de Debian, comme Mint ou Ubuntu, on peut utiliser apt-get.
Voici la commande sur Debian pour installer NFS :
apt-get install nfs-server
Configurer les exports
Ensuite on déclare les partages réseaux.
Vous pouvez utiliser la commande exportfs ou éditer le fichier /etc/exports à la main.
Dans ce tutoriel, nous allons éditer ce dernier.
Le fichier /etc/exports contient une table des systèmes de fichiers physiques locaux sur un serveur NFS qui sont accessibles aux clients NFS.
Le contenu du fichier est conservé par l’administrateur système du serveur.
La syntaxe
La syntaxe :
/dossier machine-autorisée(options)
Ainsi on déclare le dossier puis le ou les machines qui ont access.
On peut les déclarer de la manière suivante :
- nom d’hôte : nom d’hôte qui peut être résolu en une adresse IP.
- Groupe réseau : Un netgroup NIS utilisant la désignation de @groupname.
- domaine : nom de domaine utilisant des caractères génériques. Par exemple, * .malekal.com inclurait n’importe quelle machine du domaine malekal.com.
- Réseau : réseau défini par des adresses IP utilisant soit VLSM (masque de sous-réseau de longueur variable) ou CIDR (routage inter-domaine sans classe). Exemples: 192.168.1.0/255.255.255.0 et 192.168.1.0/24.
- * : permet d’autoriser n’importe quelle machine.
Pour des raisons de sécurité, il faut réduire aux maximum les accès.
Puis entre parenthèse on indique si le dossier est lecture seule. :
- ro : le dossier est en lecture seule (read only)
- rw : ce dernier est accessible en écriture
Notez que l’on eut mixer les accès par machine de cette manière :
/srv/nfs/share client01(rw) client02(ro)
Les options
Enfin on termine par les options.
Il en existe beaucoup, reportez-vous au man pour la liste complète.
Voici les plus courantes.
- sync : Les modifications des données de fichier sont effectuées sur le disque immédiatement, ce qui a un impact sur les performances, mais est moins susceptible d’entraîner une perte de données. Sur certaines distributions, c’est la valeur par défaut.
- async : Les modifications des données des fichiers sont initialement effectuées en mémoire. Cela accélère les performances mais est plus susceptible d’entraîner une perte de données. Sur certaines distributions, c’est la valeur par défaut.
- no_subtree_check : Cette option désactive la vérification des sous-arbres, ce qui a de légères implications en termes de sécurité, mais peut améliorer la fiabilité dans certaines circonstances.
- root_squash : Mappez l’utilisateur root et le compte de groupe du client NFS aux comptes anonymes, souvent avec le compte nfsnobody. Ainsi ceci empêche les utilisateurs root connectés à distance (et non locaux) d’avoir des privilèges root.
- wdelay : permet de réduire les délais d’écriture. Ceci peut améliorer les performances car il y a une réduction du nombre d’accès au disque par le biais de commandes d’écriture séparées, réduisant ainsi également l’alourdissement des écritures. Pour désactiver ce comportement, veuillez spécifier
no_wdelay
.
Lister les partages
Pour lister les partages NFS :
Enfin pour redémarrer le daemon :
systemctl restart nfs-server
Monter un répertoire NFS
Du côté du client, on installe les packages :
apt-get install nfs-common
Puis on monte un partage NFS de cette manière.
mount nomserveur:/srv/nfs/share /access
Ici on monte le partage /srv/nfs/share dans le dossier /access.
La commande mount permet de lister les points de montage.
On y trouve alors les montages NFS.
Exemple en jaune ci-dessous.
Mais on peut aussi utiliser la commande suivante pour lister les montages :
nfsstat -m
D’autres explications sur la commande mount dans le tutoriel suivant :
Autoriser NFS sur Iptables
NTFS fonctionne en serveur, ainsi le client doit pouvoir se connecter au port en écoute du serveur.
Si vous utilisez iptables comme pare-feu, vous devez donc autoriser les connexions.
Pour rappel, il existe un tutoriel complet iptables sur le site : Tutoriel Iptables.
Fixer les ports en écoute
Pour lister les ports ouverts par les services RPC, utilisez la commande suivante :
rpcinfo -p
Il faut autoriser les ports des services RPC : portmapper, mountd, nfs et enfin nlockmgr.
Mais ces derniers chargent à chaque lancement.
Ainsi il faut les fixer.
Sur Debian, il faut éditer les fichiers suivants :
# /etc/default/nfs-common
STATDOPTS="--port 32765 --outgoing-port 32766"
# /etc/default/nfs-kernel-server
RPCMOUNTDOPTS="-p 32767"
# /etc/default/quota
RPCRQUOTADOPTS="-p 32769"
Sur les distributions à base de Redhat, il faut se rendre dans le fichier /etc/sysconfig/nfs
.
Enfin on relance le serveur pour prendre en compte les changements.
Enfin la commande rpcinfo permet de vérifier que les ports sont bien fixés.
Exemple règles iptables
Il ne reste plus qu’à autoriser sur iptables.
Par exemple de cette manière :
for ports in "111 892 875 662 2049 32767 42375"
do
iptables -A INPUT -i interface -s ip_machine -m state --state NEW,ESTABLISHED,RELATED -p udp --sport $ports -j ACCEPT
iptables -A OUTPUT -o interface -d ip_machine -m state --state NEW,ESTABLISHED,RELATED -p udp --dport $ports -j ACCEPT
iptables -A INPUT -i interface -s ip_machine -m state --state NEW,ESTABLISHED,RELATED -p tcp --sport $ports -j ACCEPT
iptables -A OUTPUT -o interface -d ip_machine -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport $ports -j ACCEPT
done
On peut aussi utiliser l’option multiports de cette manière :
iptables -A INPUT -i interface -s ip_machine-p udp -m multiport --dports 42375,111,2049,32769,875,892 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i interface -s ip_machine -p tcp -m multiport --dports 42375,111,2049,32803,875,892 -m state --state NEW,ESTABLISHED -j CCEPT
iptables -A OUTPUT -ointerface -sd ip_machine -p udp -m multiport --sports 42375,111,2049,32769,875,892 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -ointerface -sd ip_machine -p tcp -m multiport --sports 42375,111,2049,32803,875,892 -m state --state ESTABLISHED -j ACCEPT
Liens
- Les partitions de disque sur Linux
- NTFS, EXT4 : Comprendre les systèmes de fichiers
- fstab Linux : fonctionnement, structure et exemples
- mount et fstab : monter des partitions de disques ou NFS, CIFS sur Linux
- Comment vérifier l’espace disque avec la commande DF et DU sur Linux
- mkfs : formater et créer un système de fichiers (ext4, NTFS, FAT) sur Linux
- La commande lsblk : utilisations et exemples
- fdisk/gfdisk : Créer, supprimer, redimensionner des partitions de disque en ligne de commandes sur Linux
- cfdisk : Créer, supprimer, redimensionner des partitions de disque en ligne de commandes sur Linux
- GParted : redimensionner (agrandir/réduire) une partition de disque
- Comment créer un disque RAM tmpfs ou ramfs sur Linux
- Monter un partage Windows sous Linux avec Samba