Product SiteDocumentation Site

11.4. Serveur de fichiers NFS

NFS (Network File System) est un protocole qui permet d'accéder à un système de fichiers à distance par le réseau, pris en charge par tous les systèmes Unix. Pour Windows, il faudra employer Samba.
NFS est un outil très utile. S'il avait de nombreuses limitations auparavant, elles ont pour la plupart disparu avec la version 4 du protocole. L'inconvénient est que la dernière version de NFS est désormais plus difficile à configurer dès que l'on veut utiliser des fonctions de sécurité de base telles que l'authentification et le chiffrement, puisqu'il repose sur Kerberos pour ces fonctionnalités. Et sans ces deux dernières, l'utilisation du protocole NFS doit se limiter à un réseau local de confiance car les données qui circulent sur le réseau ne sont pas chiffrées (un sniffer peut les intercepter) et les droits d'accès sont accordés en fonction de l'adresse IP du client (qui peut être usurpée).

11.4.1. Sécuriser NFS (au mieux)

Si les fonctionnalités de sécurité de Kerberos ne sont pas utilisées, il faut s'assurer que seules les machines autorisées à l'employer peuvent se connecter aux différents serveurs RPC qui lui permettent de fonctionner, car le protocole de base considère les données reçues du réseau comme des données sûres. Le pare-feu doit donc interdire l'usurpation d'adresse IP (IP spoofing) pour qu'une machine extérieure ne puisse pas se faire passer pour une machine intérieure, et les différents ports employés doivent être restreints aux machines devant accéder aux partages NFS.
Les anciennes versions du protocole nécessitaient d'autres services RPC qui utilisaient des ports assignés dynamiquement. Heureusement, avec la version 4 de NFS, seul le port 2049 (pour NFS) et 111 (pour l'annuaire, le portmapper) sont nécessaires et ils sont donc faciles à filtrer avec le pare-feu.

11.4.2. Serveur NFS

Le serveur NFS est intégré au noyau Linux ; Debian le compile dans ses noyaux sous forme de module. Pour l'activer automatiquement à chaque démarrage, il faut installer le paquet nfs-kernel-server, qui contient les scripts d'initialisation adéquats.
Le fichier de configuration du serveur NFS, /etc/exports, donne les répertoires exportés à l'extérieur. À chaque partage NFS sont associées des machines qui ont le droit d'y accéder. Un certain nombre d'options permettent de dicter quelques règles d'accès. Le format de ce fichier est très simple :
/repertoire/a/partager machine1(option1,option2,...) machine2(...) ...
Il est important de remarquer qu'avec NFSv4, tous les répertoires exportés doivent faire partie d'une seule et même arborescence, et que le répertoire racine de cette arborescence doit être exporté et identifié avec l'option fsid=0 ou fsid=root.
Chaque machine est identifiée par son nom DNS ou son adresse IP. Il est aussi possible de spécifier un ensemble de machines en employant la syntaxe *.falcot.com ou en décrivant une plage complète d'adresses IP (exemples : 192.168.0.0/255.255.255.0, 192.168.0.0/24).
Par défaut, un partage n'est accessible qu'en lecture seule (option ro comme read only). L'option rw (comme read-write) donne un accès en lecture/écriture. Les clients NFS doivent se connecter depuis un port réservé à root (c'est-à-dire inférieur à 1 024) à moins que l'option insecure (« pas sûr ») n'ait été employée (l'option secure — « sûr » — est implicite en l'absence de insecure, mais on peut quand même la mentionner).
Le serveur ne répond à une requête NFS que lorsque l'opération sur disque a été complétée (option sync). L'option async (asynchrone) désactive cette fonctionnalité et améliore quelque peu les performances, au détriment de la fiabilité puisqu'il subsiste alors un risque de perte de données en cas de crash du serveur (des données acquittées par le serveur NFS n'auront pas été sauvegardées sur le disque avant le crash). La valeur par défaut de cette option ayant changé récemment (par rapport à l'historique de NFS), il est recommandé de toujours mentionner explicitement l'option souhaitée.
Pour ne pas donner un accès root au système de fichiers à n'importe quel client NFS, toutes les requêtes provenant d'un utilisateur root sont transformées en requêtes provenant de l'utilisateur nobody. Cette option (root_squash) est activée par défaut ; l'option inverse no_root_squash ne doit être employée qu'avec parcimonie étant donné les risques qu'elle comporte. Les options anonuid=uid et anongid=gid permettent d'employer un autre utilisateur écran à la place des UID/GID 65534 (qui correspondent à l'utilisateur nobody et au groupe nogroup).
Avec NFSv4, il est possible d'ajouter une option sec pour préciser le niveau de sécurité souhaité : sec=sys est la valeur par défaut sans aucune sécurité particulière, sec=krb5 active uniquement l'authentification, sec=krb5i y ajoute une protection d'intégrité, et sec=krb5p est le plus haut niveau qui inclut la protection de la confidentialité (avec le chiffrement des données). Pour que cela puisse marcher, une installation fonctionnelle de Kerberos est nécessaire (ce service n'est pas traité par ce livre).
D'autres options existent encore, que vous découvrirez dans la page de manuel exports(5).

11.4.3. Client NFS

Comme tous les systèmes de fichiers, il est nécessaire de le monter pour l'intégrer dans l'arborescence du système. Étant donné qu'il s'agit d'un système de fichiers un peu particulier, il a fallu adapter la syntaxe habituelle de la commande mount et le format du fichier /etc/fstab.

Exemple 11.22. Montage manuel avec la commande mount

          # mount -t nfs4 -o rw,nosuid arrakis.interne.falcot.com:/partage /srv/partage

Exemple 11.23. Entrée NFS dans le fichier /etc/fstab

arrakis.interne.falcot.com:/partage /srv/partage nfs4 rw,nosuid 0 0
L'entrée ci-dessus monte automatiquement à chaque démarrage le répertoire NFS /partage/ présent sur le serveur arrakis dans le répertoire local /srv/partage/. L'accès demandé est en lecture/écriture (paramètre rw). L'option nosuid est une mesure de protection qui supprime tout bit setuid ou setgid présent sur les programmes contenus dans le partage NFS. Si le répertoire NFS est dédié au stockage de documents, il est recommandé d'employer de plus l'option noexec qui empêche l'exécution de programmes par NFS. Il est important de noter que sur le serveur, le répertoire partage est situé sous l'export de la racine NFSv4 (par exemple /export/partage), ce n'est pas un répertoire de premier niveau de l'arborescence.
La page de manuel nfs(5) détaille toutes les options possibles.