Chapitre 17. NFS (Network File System)

NFS (Network File System) est conçu pour permettre à des hôtes distants de monter des partitions sur un système spécifique et les utiliser comme si elles étaient des systèmes de fichiers locaux. Cela permet d'organiser les fichiers dans un emplacement central, tout en offrant la possibilité de laisser des utilisateurs autorisés y accéder.

Deux versions de NFS sont actuellement utilisées. NFS version 2, qui est en circulation depuis plusieurs années, est pris en charge par de nombreux systèmes d'exploitation. NFS version 3 a beaucoup plus de fonctionnalités, telles qu'une taille variable d'indicateurs de fichier et des rapports d'erreur plus avancés. Red Hat Linux prend en charge ces deux versions et utilise la version 3 par défaut lors d'une connexion avec un serveur qui la prend en charge.

Ce chapitre se concentre sur NFS version 2, bien que de nombreux concepts s'appliquent également à la version 3. En outre, seuls les concepts fondamentaux et les informations supplémentaires sont fournis. Pour avoir des instructions spécifiques concernant la configuration et l'utilisation de NFS sur des ordinateurs client et serveur, reportez-vous au Guide de personnalisation Red Hat Linux officiel.

Méthodologie

Linux utilise une combinaison de supports au niveau du noyau et de processus démon exécutés de façon continue pour offrir le partage de fichier NFS ; la prise en charge NFS doit être activée dans le noyau Linux pour fonctionner. NFS utilise des appels de procédure à distance (RPC) pour router les demandes entre les clients et les serveurs, ce qui signifie que le service portmap doit être activé et actif aux niveaux d'exécution adéquats pour que des communications NFS aient lieu. Conjugués à portmap, de nombreux autres processus assurent qu'une connexion NFS est autorisée et peut s'effectuer sans erreur :

Ces programmes ne sont pas tous nécessaires pour le service NFS. Les seuls services qui doivent être activés sont rpc.mountd, rpc.nfsd et portmap. Les autres démons offrent des fonctionnalités additionnelles, en fonction des exigences particulières de votre environnement serveur.

NFS version 2 utilise le protocole UDP (User Datagram Protocol ) pour offrir une connexion réseau "sans statut" entre le client et le serveur (NFS version 3 peut utiliser UDP ou TCP en exécution sur un IP). La connexion UDP sans statut minimise le trafic réseau car le serveur NFS envoie un cookie après que le client a reçu l'autorisation d'accéder au volume partagé. Ce cookie, ou valeur aléatoire stockée du côté serveur, est passé avec toute demande RPC du client au serveur. Le serveur NFS peut être redémarré sans affecter les clients et le cookie demeure intact.

En utilisant NFS, l'authentification ne se fait que lorsque le client essaie d'effectuer le montage sur un système de fichier distant. Le serveur NFS utilise les fichiers /etc/hosts.allow et /etc/hosts.deny pour déterminer si un hôte donné doit être autorisé ou refusé pour l'accès via NFS. Puis, le serveur NFS utilise le fichier /etc/exports pour connaître les privilèges de cet hôte pour les différents montages disponibles. Après avoir accordé l'accès, toutes les opérations effectuées sur les fichiers et répertoires sont envoyées au serveur à l'aide d'appels de procédure à distance.

AvertissementAttention
 

Les privilèges de montage NFS sont accordés de façon spécifique à un hôte et non à un utilisateur. Si vous accordez à un hôte l'accès à une partie donnée de votre disque dur avec NFS, tous les utilisateurs de cet ordinateur auront accès aux données partagées.

Soyez extrêmement prudent lorsque vous configurez le fichier /etc/exports et soyez très prudent lorsque vous partagez des répertoires ayant des autorisations de lecture et écriture (rw) à un hôte distant. Les utilisateurs des systèmes distants en mesure de monter vos systèmes de fichiers exportés pourront modifier les données qui s'y trouvent.

NFS et portmap

NFS dépend des appels de procédure à distance (RPC) pour fonctionner. portmap est requis pour mapper les demandes RPC aux bons services. Les processus RPC avertissent portmap lorsqu'ils commencent, révélant le numéro du port qu'ils contrôlent et les numéros des programmes qu'ils prévoient servir. Le système client contacte alors portmap sur le serveur avec un numéro de programme spécifique. portmap redirige ensuite le client vers le bon numéro de port pour communiquer avec le service désiré.

Comme les services basés sur RPC dépendent de portmap pour réaliser des connexions avec les demandes client entrantes, portmap doit être disponible avant que l'un de ces services ne commence. Si, pour une raison quelconque, le service portmap quitte à l'improviste, relancez-le, ainsi que tous les services qui étaient en cours d'exécution lorsqu'il a été lancé.

Le service portmap peut être utilisé avec les fichiers d'accès hôte (/etc/hosts.allow et /etc/hosts.deny) pour contrôler les systèmes distants autorisés à utiliser les services basés sur RPC sur votre ordinateur. Reportez-vous au Chapitre 9 pour plus d'informations. Les règles de contrôle d'accès pour portmap affectent tous les services basés sur RPC ; ou bien, vous pouvez spécifier chaque démon RPC NFS devant être affecté par une règle particulière de contrôle d'accès. Les pages de manuel de rpc.mountd et rpc.statd contiennent des informations sur la syntaxe précise de ces règles.

Etat de portmap

Comme portmap fournit la coordination entre les services RPC et les numéros de port utilisés pour communiquer avec eux, il peut être pratique d'être en mesure d'avoir un aperçu des services RPC courants qui utilisent portmap en cas de dépannage. La commande rpcinfo affiche chaque service basé sur RPC, ainsi que son numéro de port, son numéro de programme RPC, sa version et son type de protocole (TCP ou UDP).

Pour vous assurer que les bons services RPC NFS sont activés pour portmap, rpcinfo peut être utile :

[root@bleach /]# rpcinfo -p some.machine.com
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp   1024  status
    100024    1   tcp   1024  status
    100011    1   udp    819  rquotad
    100011    2   udp    819  rquotad
    100005    1   udp   1027  mountd
    100005    1   tcp   1106  mountd
    100005    2   udp   1027  mountd
    100005    2   tcp   1106  mountd
    100005    3   udp   1027  mountd
    100005    3   tcp   1106  mountd
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100021    1   udp   1028  nlockmgr
    100021    3   udp   1028  nlockmgr
    100021    4   udp   1028  nlockmgr
[root@bleach /]#

L'option -p détecte le mappeur de port sur les hôtes spécifiés ou se met par défaut sur l'hôte local si aucun hôte spécifique n'est énuméré. D'autres options sont disponibles dans la page de manuel de rpcinfo.

A partir de la sortie ci-dessus, il est possible de voir que divers services NFS sont en cours d'exécution. Si l'un des services NFS ne démarre pas correctement, portmap est incapable de mapper les demandes des clients pour ce service vers le port adéquat. Dans de nombreux cas, le redémarrage de NFS en tant que super-utilisateur (service nfs restart) permet d'enregistrer correctement les services en question avec portmap et de les faire fonctionner.