Partage NFS

De Le Wiki du Forum-Debian.fr
Révision datée du 30 juillet 2012 à 13:10 par Legaub (discussion | contributions) (ajout de portmap dans les paquets nécessaires)
Aller à la navigation Aller à la recherche

NFS (Network File System) est un protocole qui permet d'accéder à des fichiers via le réseau. Il est basé sur le protocole RPC (Remote Procedure Call). Les clients montent la partition de la machine distante comme si c'était un disque local.

Sur le serveur

Installation

Les paquets nécessaires sont :

  • portmap
  • nfs-common : fichiers communs au client et au serveur.
  • nfs-kernel-server : le démon NFS.

Installer les paquets avec son gestionnaire de paquets habituel, par exemple :

  1.  apt-get install nfs-common nfs-kernel-server portmap

Vérification de l'installation

Exécuter rpcinfo pour confirmer que le serveur est lancé, et accepte les requêtes sur le port 2049 (UDP et TCP).

  1. rpcinfo -p | grep nfs
   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

Vérifier que le système supporte effectivement NFS :

  1. cat /proc/filesystems | grep nfs

nodev nfs nodev nfs4 Si la commande n'effectue aucun retour, il se peut que le module NFS ne soit pas chargé, auquel cas, il faut le charger avec :

  1. modprobe nfs

Enfin, vérifions que portmap attend les instructions sur le port 111 :

  1.  rpcinfo -p | grep portmap
   100000    2   tcp    111  portmapper
   100000    2   udp    111  portmapper

Cette même vérification est à faire sur le client.

Configuration du partage

Il faut maintenant indiquer au serveur les répertoires qui seront partagés, les machines qui y auront accès et les conditions de ce partage. Tous ces réglages se font par l'intermédiaire du fichier /etc/exports. Sa structure est la suivante : /dossier_partagé <hôte1>(options de partage) <hôte2>(options de partage)

Désignation des hôtes destinataires

On indique ici l'adresse ip ou l'intervalle d'adresses ip des machines pouvant accéder au partage. Pour spécifier un intervalle, on joue sur le masque de sous réseau (voir les outils de calculs type gip : http://ip2cidr.com). Les jokers (classiquement * ou ?) sont à proscrire à l'intérieur d'une adresse ip. Ainsi, pour désigner un réseau domestique complet : 192.168.0.0/255.255.255.0 ou 192.168.0.0/24 Les autres solutions pour désigner les machines autorisées sont : nom d'hôte (connus via /etc/hosts ou un DNS), groupes réseau NIS, un domaine ou un sous domaine précédé d'un joker.

Les options de partage classiques

Les options pas défaut sont en majuscule.

  • rw/RO

Lecture & écriture / Lecture uniquement

  • SYNC/async (doit être spécifié, sinon warning de la part de exportfs)

async permet au serveur NFS de passer outre le protocole NFS et de répondre aux requêtes avant que les changements effectués par une requête antérieure aient été appliqués. Utilisable raisonnablement en combinaison avec ro.

  • NO_SUBTREE_CHECK/subtree_check (doit être spécifié, sinon warning)

Distinction subtile, retenir que :

Dans le cas du partage d'un répertoire de type /home, où beaucoup de fichiers peuvent être renommés, préférer no_subtree_check.
Pour un répertoire principalement ro, ou peu de fichiers sont renommés (par exemple /usr ou /var), préférer subtree_check.
  • fsid=0 ou fsid=root

nfs4 utilise un pseudo système de fichiers. Il faut donc indiquer le répertoire qui en sera la racine, grâce à l'option fsid=0. Désormais, le montage de cette "racine" en nfs4 monte le répertoire ainsi désigné. Si l'on souhaite conserver la compatibilité avec les versions antérieures, il suffit de désigner la racine du serveur comme racine du pseudo système de fichiers en indiquant par exemple : / *(ro,async,no_subtree_check,fsdid=0)

Options de mapping

Attention, il s'agit d'un point délicat : l'UID de l'utilisateur de la machine cliente est utilisé sur le serveur. Aussi, pour créer un partage respectueux, il faut qu'il y ait correspondance exacte des UIDs/GIDs des utilisateurs/groupes entre le serveur et les clients. Pour contourner cette limitation, des options de mapping sont donc disponibles.

Par défaut, les utilisateurs mappés reçoivent l'uid/gid 65534. On peut écraser ces valeurs grâce aux options anonuid et anongid.

  • ROOT_SQUASH/no_root_squash : root_squash mappe root en utilisateur anonyme.
  • all_squash/NO_ALL_SQUASH : mappe tous les utilisateurs en utilisateur anonyme.

On peut résoudre le problème plus proprement en mettant en place un service d'annuaire typiquement NIS, basé lui aussi sur RPC, ou LDAP.

Exemples

/data 192.168.0.25(rw,sync,no_subtree_check) 192.168.0.33(ro,async,no_subtree_check) /home 192.168.0.0/24(ro,async,no_subtree_check,fsid=0) /home/pour_root 192.168.0.55(rw,sync,no_subtree_check,no_root_squash)

Redémarrage

  1. service nfs-kernel-server restart

ou

  1. /etc/init.d/nfs-kernel-server restart

Sécurisation minimale

Le protocole RPC n'a pas la réputation d'être bien sécurisé, mais la version 4 de NFS entend corriger ce problème, elle est donc à privilégier. Il est déconseillé d'effectuer un partage NFS via internet, ou bien dans ce cas, opter pour un tunnel crypté.

  • Une mesure minimale à prendre est de renseigner les fichiers /etc/hosts.allow et /etc/hosts.deny qui contrôlent l'accès aux services RPC selon l'adresse IP.
  • Autre possibilité, paramétrer iptables si celui-ci est installé, sous réserve d'avoir figé les ports RPC au préalable.

Sur le client

Installation

Installer le paquet nfs-common avec son gestionnaire de paquets habituel, par exemple :

  1. apt-get install nfs-common

Vérification de l'installation

Portmap doit attendre les instructions sur le port 111 :

  1.  rpcinfo -p | grep portmap
   100000    2   tcp    111  portmapper
   100000    2   udp    111  portmapper

Montage du répertoire distant

Les options de montage communes à tous les systèmes de fichiers

Pour mémoire, le raccourci "defaults" désigne l'ensemble des options suivantes : rw, suid, dev, exec, auto, nouser, et async.

Parmi toutes les autres options disponibles, les suivantes sont intéressantes :

  • "_netdev" indique que le système de fichiers se trouve sur un périphérique qui nécessite un accès réseau. Cela permet d'éviter d'essayer de le monter si la connexion réseau n'est pas établie.
  • AUTO/noauto monte (ou pas) le système de fichier à l'appel de "mount -a", c'est à dire lors du boot.

Les options de montage spécifiques à NFS

Lorsq'un montage se fait pour un système de fichiers de type NFS, une série d'options spécifiques est alors disponible. Voici les plus utiles :

  • HARD/soft

L'option hard spécifie au client d'attendre le retour du serveur dans le cas où celui-ci crasherait. L'utilisateur ne peut terminer l'attente, à moins d'avoir sélectionné l'option INTR. Dans une situation identique, l'option soft renvoie une erreur au programme appelant, au bout d'une durée d'attente à fixer grâce à l'option timeo.

  • INTR/nointr

Intr permet d'interrompre les requêtes NFS si le serveur ne répond pas. Accompagne l'option HARD.

Syntaxe

On peut utiliser :

  • la commande mount :

  1. mount -t nfs4 -o <options> <ip_serveur>:<rep_serveur> <point_montage_local>

  • une entrée dans /etc/fstab

<ip du serveur>:/dossier_partagé /point_de_montage nfs4 <options> 0 0

Exemples

Avec mount, montage de la "racine" nfs4 désigné au deuxième exemple de 1.3.4.

  1. mount -t nfs4 -o ro 192.168.0.11:/ /tous_les_homes

/etc/fstab : 192.168.0.11:/data /home/serveur_nfs nfs _netdev,nodev,noexec 0 0

Sources