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.
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:
rpc.mountd — Le processus actif qui reçoit la requête de montage d'un client NFS et vérifie qu'elle correspond bien avec un système de fichiers actuellement exporté.
rpc.nfsd — Le processus qui implémente les composants de l'espace-utilisateur (user-space) du service NFS. Il fonctionne avec le noyau Linux pour satisfaire les requêtes dynamiques des clients NFS, comme par exemple en fournissant des fils de serveur supplémentaires à utiliser par les clients NFS.
rpc.lockd — Le démon qui ne se trouve pas nécessairement dans les noyaux modernes. Le verrouillage de fichier NFS est à présent assuré par le noyau. Il est inclus dans le paquetage nfs-utils pour les utilisateurs d'anciens noyaux, qui n'incluent pas cette fonctionnalité par défaut.
rpc.statd — Il implémente le Moniteur de statut de réseau, ou NSM (de l'anglais 'Network Status Monitor') de protocole RPC. Ceci fournit une notification de redémarrage lorsqu'un serveur NFS est redémarré sans avoir été éteint correctement.
rpc.rquotad — Le serveur RPC qui fournit des informations de quotas d'utilisateurs pour les utilisateurs distants.
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.
![]() | Avertissement |
---|---|
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é. |
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.
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.