Chapter 9. Le système de fichier réseau (NFS)

Le système de fichiers réseau, ou NFS (Network File System), permet aux hôtes de monter des partitions sur un système distant et de les utiliser exactement comme des systèmes de fichier locaux. Ceci permet à l'administrateur système de stocker des ressources dans un emplacement central du réseau, fournissant ainsi aux utilisateurs légitimes un accès permanent.

Deux versions de NFS sont actuellement en vigueur. La version 2 de NFS (NFSv2) d'une part, utilisée depuis plusieurs années, est largement supportée par divers systèmes d'exploitation. La version 3 de NFS (NFSv3) d'autre part, apporte d'autres fonctions, y compris un traitement de fichiers de taille variable et un meilleur rapportage d'erreurs. Red Hat Linux supporte les deux versions, NFSv2 et NFSv3, et utilise NFSv3 par défaut lors de la connexion à un serveur qui le supporte.

Ce chapitre se concentre sur la version 2 de NFS, mais la plupart des concepts discutés ici s'appliquent aussi à la version 3. De plus, ici ne seront abordés que les concepts fondamentaux de NFS et des références supplémentaires seront indiquées. Pour des instructions spécifiques concernant la configuration et l'exploitation de NFS sur des ordinateurs serveurs ou clients, voyez le chapitre intitulé Network File System (NFS) <--! NOTE FROM ARNAUD You must find the name that has been given in FR for the above file and replace it --> du Guide de personnalisation de Red Hat Linux.

9.1. Méthodologie

Linux utilise certes une combinaison de support de niveau noyau et des processus de démons constamment actifs pour fournir le partage de fichier NFS, mais NFS doit toutefois être activé dans le niveau Linux pour fonctionner. NFS utilise les Appels de procédure distante, ou RPC, (de l'anglais 'Remote Procedure Calls') pour router des requêtes entre clients et serveurs, ce qui signifie que le service portmap doit être activé et en opérationnel aux niveaux d'exécution adéquats pour que la communication NFS aie lieu. De concert avec portmap, les processus suivants garantissent qu'une connexion NFS est autorisée et peut continuer sans erreurs:

Tous ces programmes ne sont pas indispensables pour le service NFS. Les seuls services devant vraiment être activés sont rpc.mountd, rpc.nfsd et portmap. Les autres démons fournissent des fonctionnalités supplémentaires et ne devraient être utilisés que l'environnement de serveur l'exige.

La version 2 de NFS utilise le Protocole Datagram d'utilisateur, ou UDP (de l'anglais 'User Datagram Protocol'), pour fournir une connexion sans déclaration de réseau entre le client et le serveur. La version 3 de NFS peut utiliser UDP ou TCP sur une IP. La connexion sans déclaration UDP réduit le trafic de réseau, puisque le serveur NFS envoie au client un cookie qui l'autorise à accéder au volume partagé. Ce cookie est une valeur aléatoire stockée du côté serveur et transmis en même temps que les requêtes RPC du client. Non seulement le serveur NFS peut être redémarré sans affecter le client mais le cookie restera intact.

NFS n'effectue d'authentification que lorsqu'un système client tente de monter un système de fichier distant. Pour limiter l'accès, le serveur NFS commence par employer les enveloppeurs TCP. Ceux-ci lisent les fichiers /etc/hosts.allow et /etc/hosts.deny pour déterminer si un client particulier doit se voir refuser ou accorder l'accès au serveur NFS. Pour plus d'informations sur la configuration des contrôles d'accès avec les enveloppeurs TCP, consultez le Chapter 15 Les enveloppeurs TCP et xinetd.

Après autorisation d'accès du client permise par les enveloppeurs TCP, le serveur NFS se réfère à son fichier de configuration, /etc/exports, pour déterminer si le client peut monter l'un des systèmes de fichier exportés. Après avoir autorisé l'accès, toute opération de fichiers ou de répertoires est envoyée au serveur par le biais d'appels de procédure distante.

WarningAvertissement
 

Les privilèges de montage NFS sont accordés spécifiquement à un client, pas à un utilisateur. Tout utilisateur d'un ordinateur distant peut accéder aux systèmes de fichiers exportés.

Lorsque vous configurez le fichier /etc/exports, soyez très prudent lors de l'attribution des permissions de lecture et écriture (rw) à un système de fichiers exporté.

9.1.1. NFS et portmap

Pour son fonctionnement, NFS dépend des Appels de procédure distante (ou RPC). Le service portmap est nécessaire pour orienter les requêtes RPC vers les services appropriés. Les processus RPC s'annoncent à portmap lorsqu'ils démarrent, révélant le numéro de port qu'ils contrôlent et les numéros de programmes RPC qu'ils entendent servir. Le système client contacte alors portmap sur le serveur avec un numéro de programme RPC particulier. Le service portmap redirige ensuite le client vers le numéro de port correct afin de communiquer avec le service souhaité.

Parce que les services utilisant RPC se basent sur portmap pour assurer toutes les connexions avec les requêtes de client entrantes, portmap doit être disponible avant le démarrage de chacun de ces services. Si, pour une raison ou pour une autre, le service portmap quitte de façon inattendue, redémarrez portmap et tous les services actifs au moment de son démarrage.

Le service portmap peut s'employer avec les fichiers d'accès d'hôtes des enveloppeurs TCP (/etc/hosts.allowet /etc/hosts.deny) pour contrôler les systèmes distants qui sont autorisés à utiliser les services basés sur RPC sur le serveur. Reportez-vous au Chapter 15 Les enveloppeurs TCP et xinetd pour plus d'informations. Les règles de contrôle d'accès pour portmap affecteront tous les services basés sur RPC. Il est également possible de spécifier chacun des démons RPC NFS devant être affectés par une règle de contrôle d'accès particulière. Les pages de manuel relatives à rpc.mountd et rpc.statd contiennent des informations sur la syntaxe précise de ces règles.

9.1.1.1. Résolution de problèmes liés à NFS avec portmap

Puisque portmap fournit la coordination entre les services RPC et les numéros des ports utilisés pour communiquer avec eux, il est utile de pouvoir visualiser les services RPC en cours à l'aide de portmap lors de la résolution de problèmes. La commande rpcinfo montre chaque service basé sur RPC avec son numéro de port, numéro de programme RPC, version, et type de protocole IP (TCP ou UDP).

Pour s'assurer que les bons services NFS basés sur RPC sont activés pour portmap, utilisez la commande rpcinfo -p:

   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

L'option -p vérifie le mappeur de ports sur l'hôte spécifié, ou par défaut sur l'hôte local en l'absence de spécification. D'autres options sont décrites dans la page de manuel rpcinfo.

Les résultats ci-dessus montrent des services NFS en activité. Si l'un des services NFS services ne démarre pas correctement, portmap sera incapable d'orienter les requêtes RPC de clients pour ce service, vers le port adéquat. Souvent, le redémarrage de NFS en étant connecté en tant que super-utilisateur (ou root) (/sbin/service nfs restart) permettra à ces services de s'enregistrer correctement auprès de portmap et de commencer à fonctionner.