8.7. Configuration du serveur NFS

Il existe deux manières de configurer les exportations sur un serveur NFS :
  • La configuration manuelle du fichier de configuration NFS /etc/exports, et
  • à l'aide de la ligne de commande, en utilisant la commande exportfs

8.7.1. Fichier de configuration /etc/exports

Le fichier /etc/exports contrôle quels systèmes de fichiers sont exportés vers des hôtes distants et spécifie les options. Les règles de syntaxes suivantes sont observées :
  • Les lignes vides sont ignorées.
  • Pour ajouter un commentaire, commencez la ligne par le caractère dièse (#).
  • Pour les longues lignes, il est possible d'effectuer des retours à la ligne avec une barre oblique inversée (\).
  • Chaque système de fichiers exporté devrait se trouver sur une ligne individuelle.
  • Toute liste d'hôtes non autorisés placée après un système de fichiers exporté doit être séparée par des caractères d'espace.
  • Les options de chaque hôte doivent être placées directement après l'identifiant de l'hôte, sans espace séparant l'hôte et la première parenthèse.
Chaque entrée de système de fichiers exporté possède la structure suivante :
export host(options)
La structure mentionnée ci-dessus utilise les variables suivantes :
export
Répertoire en cours d'exportation
host
Hôte ou réseau sur lequel l'exportation est partagée
options
Options à utiliser pour l'hôte
Il est également possible de spécifier plusieurs hôtes avec des options spécifiques pour chacun d'entre eux. Pour ceci, veuillez les répertorier sur la même ligne en tant que liste séparée par des espaces, en veillant à ce que chaque nom d'hôte soit bien suivi par ses options respectives (entre parenthèses), comme suit :
export host1(options1) host2(options2) host3(options3)
Pour obtenir des informations sur les différentes méthodes de spécification de noms d'hôtes, veuillez consulter la Section 8.7.4, « Formats des noms d'hôtes ».
Sous sa forme la plus simple, le fichier /etc/exports spécifie uniquement le répertoire exporté et les hôtes autorisés à y accéder, comme dans l'exemple suivant :

Exemple 8.6. Fichier /etc/exports

/exported/directory bob.example.com
Ici, bob.example.com peut monter /exported/directory/ à partir du serveur NFS. Comme aucune autre fonction n'est spécifiée dans cet exemple, NFS utilisera les paramètres par défaut.
Les paramètres par défaut sont les suivants :
ro
Le système de fichiers exporté est accessible en lecture seule. Les hôtes distants ne peuvent pas modifier les données partagées sur le système de fichiers. Pour autoriser des hôtes à effectuer des modifications sur le système de fichiers (par exemple, lecture/écriture), veuillez spécifier l'option rw.
sync
Le serveur NFS ne répondra pas aux requêtes effectuées avant que les changements demandés par les requêtes précédentes soient écrits sur disque. Sinon, pour activer les écritures asynchrones, veuillez spécifier l'option async.
wdelay
Le serveur NFS retardera l'écriture sur disque s'il suspecte qu'une autre requête d'écriture est imminente. Ceci peut améliorer les performances car il y a une réduction du nombre d'accès au disque par le biais de commandes d'écriture séparées, réduisant ainsi également l'alourdissement des écritures. Pour désactiver ce comportement, veuillez spécifier no_wdelay. no_wdelay est uniquement disponible si l'option par défaut sync est également spécifiée.
root_squash
Ceci empêche les utilisateurs root connectés à distance (et non locaux) d'avoir des privilèges root. Au lieu de cela, le serveur NFS leurs assignera l'ID d'utilisateur nfsnobody. Ceci « écrasera » (ou réduira) les capacités de l'utilisateur root à celles d'un utilisateur local du plus bas niveau possible, empêchant ainsi toute écriture non autorisée sur le serveur distant. Pour désactiver l'écrasement root, veuillez spécifier no_root_squash.
Pour écraser tous les utilisateurs distants (y compris les utilisateurs root), utilisez all_squash. Pour spécifier les ID des groupes et des utilisateurs que le serveur NFS devrait assigner à des utilisateurs distants à partir d'un hôte en particulier, veuillez utiliser les options anonuid et anongid respectives, comme suit :
export host(anonuid=uid,anongid=gid)
uid et gid sont les numéros d'ID d'utilisateur et les numéros d'ID de groupe respectifs. Les options anonuid et anongid vous permettent de créer un compte utilisateur et groupe spécifique que les utilisateurs NFS distants peuvent partager.
Par défaut, les listes de contrôle d'accès ou ACL (access control lists) sont prises en charge par NFS dans Red Hat Enterprise Linux. Pour désactiver cette fonctionnalité , veuillez spécifier l'option no_acl lorsque vous exportez le système de fichiers.
Chaque valeur par défaut de chaque système de fichiers exporté doit être explicitement remplacée. Par exemple, si l'option rw n'est pas spécifiée, alors le système de fichiers exporté est partagé en lecture seule. Ci-dessous figure un exemple de ligne de /etc/exports qui remplace deux options par défaut :
/another/exported/directory 192.168.0.3(rw,async)
Dans cet exemple, 192.168.0.3 peut monter /another/exported/directory/ en lecture/écriture et toutes les écritures sur disque seront asynchrones. Pour obtenir davantage d'informations sur les options d'export, veuillez consulter man exportfs.
D'autres options sont disponibles lorsqu'aucune valeur par défaut n'est spécifiée. Celles-ci incluent la possibilité de désactiver la vérification de sous-arborescence, autorise l'accès à partir de ports non-sécurisés et autorise les verrouillages non-sécurisés (nécessaires pour certaines implémentations de clients NFS plus anciennes). Veuillez consulter man exports pour obtenir davantage de détails sur ces options moins souvent utilisées.

Important

Le format du fichier /etc/exports est très précis, particulièrement au regard de l'utilisation du caractère espace. Rappelez-vous de toujours séparer les systèmes de fichiers exportés des hôtes et les hôtes les uns des autres avec un caractère espace. Toutefois, il ne devrait pas y avoir d'autres caractères espace dans le fichier, sauf sur les lignes de commentaire.
Par exemple, les deux lignes suivantes n'ont pas la même signification :
/home bob.example.com(rw) 
/home bob.example.com (rw)
La première ligne autorise aux utilisateurs de bob.example.com d'accéder en lecture/écriture au répertoire /home. La seconde ligne autorise les utilisateurs de bob.example.com de monter le répertoire en tant que lecture seule (par défaut), tandis que tout monde peut le monter en lecture/écriture.

8.7.2. Commande exportfs

Chaque système de fichiers exporté vers des utilisateurs distants avec NFS, ainsi que le niveau d'accès de ces systèmes de fichiers, sont répertoriés dans le fichier /etc/exports. Lorsque le service nfs démarre, la commande /usr/sbin/exportfs lance et lit ce fichier, passe le contrôle à rpc.mountd (si NFSv2 ou NFSv3 est utilisé) pour le processus de montage, puis à rpc.nfsd où les systèmes de fichiers seront ensuite disponibles aux utilisateurs distants.
Lorsqu'exécutée normalement, la commande /usr/sbin/exportfs permet à l'utilisateur root d'exporter ou d'annuler l'exportation des répertoires de manière sélective, sans redémarrer le service NFS. Lorsque les bonnes options sont passées, la commande /usr/sbin/exportfs écrit les systèmes de fichiers exportés sur /var/lib/nfs/xtab. Comme rpc.mountd fait référence au fichier xtab lors de la décision d'octroi des privilèges d'accès à un système de fichiers, tout changement apporté à la liste des systèmes de fichiers exportés prendra effet immédiatement.
Ci-dessous figure une liste des options couramment utilisées disponibles pour /usr/sbin/exportfs :
-r
Cause à tous les répertoires répertoriés dans /etc/exports d'être exportés en construisant une nouvelle liste d'exports dans /etc/lib/nfs/xtab. Cette option réactualise la liste des exports avec les changements apportés à /etc/exports.
-a
Cause à tous les répertoires d'être exportés ou annule leur export, en fonction des autres options passées à /usr/sbin/exportfs. Si aucune autre option n'est spécifée, /usr/sbin/exportfs exportera tous les systèmes de fichiers spécifiés dans /etc/exports.
-o file-systems
Spécifie les répertoires à exporter qui ne sont pas répertoriés dans /etc/exports. Remplacez file-systems par les systèmes de fichiers supplémentaires à exporter. Ces systèmes de fichiers doivent être formatés de la même manière qu'ils sont spécifiés dans /etc/exports. Cette option est souvent utilisée pour tester un système de fichiers exporté avant de l'ajouter de manière permanente à la liste des systèmes de fichiers devant être exportés. Veuillez consulter Section 8.7.1, « Fichier de configuration /etc/exports » pour obtenir des informations supplémentaires sur la syntaxe /etc/exports.
-i
Ignore /etc/exports ; seules les options passées avec la ligne de commande sont utilisées pour définir les systèmes de fichiers exportés.
-u
Annule l'export de tous les répertoires partagés. La commande /usr/sbin/exportfs -ua suspend le partage NFS tout en laissant les démons NFS fonctionner. Pour réactiver le partage NFS, veuillez utiliser exportfs -r.
-v
Opération détaillée, les systèmes de fichiers dont l'export ou l'annulation de l'export est en cours sont affichés avec plus de détails lorsque la commande exportfs est exécutée.
Si aucune option n'est passée avec la commande exportfs, celle-ci affichera une liste des systèmes de fichiers actuellement exportés. Pour obtenir des informations supplémentaires sur la commande exportfs, veuillez consulter man exportfs.

8.7.2.1. Utiliser exportfs avec NFSv4

Avec Red Hat Enterprise Linux 7, aucune étape supplémentaire n'est requise pour configurer les exports NFSv4 car tous les systèmes de fichiers mentionnés sont automatiquement disponibles aux clients NFSv3 et NFSv4 qui utilisent le même chemin. Ce n'était pas le cas dans les versions précédentes.
Pour empêcher aux clients d'utiliser NFSv4, veuillez l'éteindre en définissant RPCNFSDARGS= -N 4 à /etc/sysconfig/nfs.

8.7.3. Exécuter NFS derrière un pare-feu

NFS requiert rpcbind, qui assigne dynamiquement des ports pour les services RPC et peut provoquer des problèmes avec la configuration des règles de pare-feu. Pour autoriser les clients à accéder aux partages NFS derrière un pare-feu, veuillez modifier le fichier /etc/sysconfig/nfs pour contrôler les ports sur lesquels les services RPC seront exécutés.
Le fichier /etc/sysconfig/nfs n'existe pas par défaut sur tous les systèmes. Si /etc/sysconfig/nfs n'existe pas, créez le et ajoutez les variables suivantes. Remplacez port par un numéro de port non utilisé. Si /etc/sysconfig/nfs existe déjà, modifiez les entrées selon les besoins :
RPCMOUNTDOPTS="-p port"
Cela ajoute "-p port" à la ligne de commande rpc.mount : rpc.mount -p port.
LOCKD_TCPPORT=port
Cela définit le port TCP pour nlockmgr.
LOCKD_UDPPORT=port
Cela définit le port UDP pour nlockmgr.
Si NFS ne démarre pas, vérifier /var/log/messages. Normalement, NFS échoue au démarrage si vous indiquez un numéro de port déjà utilisé. Une fois que vous aurez édité /etc/sysconfig/nfs, il vous faudra redémarrer le service nfs-config pour que les nouvelles valeurs puissent prendre effet dans Red Hat Enterprise Linux 7.2 et version antérieures, en exécutant :
# systemctl restart nfs-config
Puis, redémarrez le serveur NFS.
# systemctl restart nfs-server
Exécutez rpcinfo -p pour confirmer que les changements ont pris place.

Note

Pour autoriser les rappels NFSv4.0 à passer à travers les pare-feux, paramétrez /proc/sys/fs/nfs/nfs_callback_tcpport et autorisez le serveur à se connecter à ce port sur le client.
Ce processus n'est pas nécessaire pour NFSv4.1 ou ses versions supérieures, et les autres ports de mountd, statd, et lockd ne sont pas requis dans un environnement NFSv4 pure.

8.7.3.1. Découverte des exports NFS

Il existe deux manières de découvrir quels systèmes de fichiers sont exportés par un serveur NFS.
Premièrement, sur n'importe quel serveur qui prend en charge NFSv2 ou NFSv3, veuillez utiliser la commande showmount :
$ showmount -e myserver
Export list for mysever
/exports/foo
/exports/bar
Deuxièmement, sur n'importe quel serveur qui prend en charge NFSv4, montez le répertoire / et observez son contenu.
# mount myserver:/ /mnt/
#cd /mnt/
exports
# ls exports
foo
bar
Sur les serveurs prenant en charge NFSv4 et soit NFSv2, soit NFSv3, les deux méthodes fonctionneront et offriront les mêmes résultats.

Note

Sur les anciens serveurs NFS, avant Red Hat Enterprise Linux 6 et en fonction de leur configuration, il était possible d'exporter des systèmes de fichiers sur des clients NFSv4 sur différents chemins. Comme ces serveurs n'activent pas NFSv4 par défaut, ceci ne devrait pas poser de problème.

8.7.4. Formats des noms d'hôtes

L'hôte peut se trouver sous les formats suivants :
Machine unique
Un nom de domaine complet (pouvant être résolu par le serveur), un nom d'hôte (pouvant être résolu par le serveur), ou une adresse IP.
Série d'ordinateurs spécifiés avec des caractères génériques
Utilisez le caractère * ou ? pour spécifier une chaîne correspondante. Les caractères génériques ne doivent pas être utilisés avec les adresses IP. Cependant, cela peut fonctionner accidentellement si des recherches DNS inversées échouent. Lors de la spécification de caractères génériques dans des noms de domaine complets, les points (.) ne sont pas inclus dans la recherche. Par exemple, *.example.com inclut one.example.com mais n'inclut pas one.two.example.com.
Réseaux IP
Utilisez a.b.c.d/z, où a.b.c.d est le réseau et z est le nombre d'octets dans le masque réseau (par exemple, 192.168.0.0/24). Un autre format acceptable est a.b.c.d/netmask, où a.b.c.d est le réseau et netmask est le masque réseau (par exemple, 192.168.100.8/255.255.255.0).
Netgroups
Veuillez utiliser le format @group-name, où group-name est le nom du netgroup NIS.

8.7.5. NFS sur RDMA

Dans Red Hat Enterprise Linux 7, le service RDMA est automatique tant qu'il y a du matériel compatible avec RDMA présent dans la machine. Ainsi, la procédure ne devra être suivie que si le package RDMA suivant n'a pas été installé lors de l'intallation de la machine.

Procédure 8.1. Activez RDMA à partir du client

  1. Installez le package RDMA :
    # yum install rdma
  2. Recréer initramfs :
    # dracut -f
  3. Démarrez à nouveau.