NFS : Partage réseau de dossiers sur Linux

Dernière Mise à jour le

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.

NFS : Partage réseau de dossiers sur Linux

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)
Déclarer les partages dans exports pour NFS

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
Pensez à bien régler les permissions selon les groupes sur le répertoire du serveur. Sinon vous risquez de ne pas pouvoir écrire dans le dossier (problème de permissions).

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 :

Lister lister 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.

Rappelons que la commande mount accueille des options avec le paramètre -o. Par exemple -o rw.

La commande mount permet de lister les points de montage.
On y trouve alors les montages NFS.
Exemple en jaune ci-dessous.

Liste les montages sur Linux

Mais on peut aussi utiliser la commande suivante pour lister les montages :

nfsstat -m

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"
Fixer les ports RPC : portmapper, mountd, nfs et nlockmgr
Fixer les ports RPC : portmapper, mountd, nfs et nlockmgr

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

(Visité 215 fois, 2 visites ce jour)