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éfautsync
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écifierno_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 utiliserexportfs -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-configPuis, redémarrez le serveur NFS.
# systemctl restart nfs-serverExé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
inclutone.example.com
mais n'inclut pasone.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
- Installez le package RDMA :
# yum install rdma
- Recréer
initramfs
:# dracut -f
- Démarrez à nouveau.