Introduction à NFS
Un système de fichiers en réseau (NFS) permet à un serveur de partager des hiérarchies de répertoires (systèmes de fichiers) avec des systèmes distants sur un réseau. Les serveurs NFS exportent le répertoire et les clients NFS montent le répertoire exporté. Le répertoire du serveur apparaît alors aux systèmes clients comme s'il s'agissait de répertoires locaux. NFS réduit les besoins de stockage et améliore la cohérence et la fiabilité des données, car les utilisateurs accèdent à des fichiers stockés sur un serveur centralisé.
RedHat Linux 7 ne prend pas en charge NFS version 2 (NFSv2). Les deux versions suivantes sont prises en charge :
NFS version 3 (NFSv3).
NFS version 4 (NFSv4).
NFS s'appuie sur des appels de procédure à distance (RPC) entre les clients et les serveurs. Les services RPC sont contrôlés par le service rpcbind. Le service rpcbind remplace portmap, qui était utilisé dans les versions précédentes de Linux pour mapper les numéros de programme RPC aux combinaisons de numéros de port d'adresse IP. rpcbind répond aux demandes de services RPC et établit des connexions au service RPC demandé. rpcbind n'est pas utilisé avec NFSv4, car le serveur écoute sur le port TCP 2049 bien connu. Les protocoles de montage et de verrouillage ont également été intégrés au protocole NFSv4, ainsi NFSv4 n'interagit pas non plus avec les démons lockd et rpc.statd.
Serveur NFS et processus RPC
Le démarrage du service nfs-server démarre le serveur NFS et les autres processus RPC nécessaires pour traiter les demandes de systèmes de fichiers NFS partagés. Vous pouvez utiliser le nom abrégé "nfs " plutôt que "nfs-server ” lors du démarrage du service. Exemple :
# systemctl start nfs
Il s'agit du processus serveur NFS qui implémente la partie utilisateur du service NFS. La fonctionnalité principale est gérée par le module noyau nfsd. Le programme de l'espace utilisateur spécifie simplement le type de sockets sur lequel le serveur du noyau écoute, les versions NFS qu'il prend en charge et le nombre de threads du noyau nfsd qu'il utilise. Utilisez la commande ps –e pour afficher le nombre de threads en cours d'exécution.
# ps -ef | grep nfs root 9093 2 0 11:21 ? 00:00:00 [nfsd4_callbacks] root 9099 2 0 11:21 ? 00:00:00 [nfsd] root 9100 2 0 11:21 ? 00:00:00 [nfsd] root 9101 2 0 11:21 ? 00:00:00 [nfsd] root 9102 2 0 11:21 ? 00:00:00 [nfsd] root 9103 2 0 11:21 ? 00:00:00 [nfsd] root 9104 2 0 11:21 ? 00:00:00 [nfsd] root 9105 2 0 11:21 ? 00:00:00 [nfsd] root 9106 2 0 11:21 ? 00:00:00 [nfsd]
Le nombre de threads nfsd à exécuter est défini dans le /proc/fs/nfsd/threads dossier. Dans cet exemple, 8 threads nfsd sont spécifiés :
# cat /proc/fs/nfsd/threads 8
Le démarrage du service nfs-server démarre également les processus RPC. Vous pouvez utiliser la commande ps –e pour afficher les noms des processus RPC.
# ps -e | grep -i rpc 177 ? 00:00:00 rpciod 9080 ? 00:00:00 rpc.statd 9081 ? 00:00:00 rpc.idmapd 9082 ? 00:00:00 rpcbind 9083 ? 00:00:00 rpc.mountd 9084 ? 00:00:00 rpc.rquotad
rpc.statd
Ce processus implémente le protocole RPC Network Status Monitor (NSM), qui avertit les clients NFS lorsqu'un serveur NFS est redémarré sans être gracieusement arrêté. Ceci n'est pas utilisé avec NFSv4.
rpc.mountd
Il s'agit du démon de montage NFS qui implémente le côté serveur des demandes de montage des clients NFSv3. Il vérifie que le partage NFS demandé est actuellement exporté par le serveur NFS et que le client est autorisé à y accéder. Pour NFSv4, le démon rpc.mountd est requis uniquement sur le serveur NFS pour configurer les exportations.
rpc.idmapd
Cela fournit des appels ascendants de client et de serveur NFSv4, qui mappent entre les noms NFSv4 sur le fil (qui sont des chaînes sous la forme d'utilisateur @ domaine) et les UID et GID locaux. Pour que idmapd fonctionne avec NFSv4, /etc/idmapd.conf doit être configuré. Ce service est requis pour une utilisation avec NFSv4, mais pas lorsque tous les hôtes partagent le même nom de domaine DNS.
rpc.rquotad
Ce processus fournit des informations sur les quotas d'utilisateurs pour les utilisateurs distants. Il est lancé automatiquement par le service nfs et ne nécessite aucune configuration utilisateur. Les résultats sont utilisés par la commande quota pour afficher les quotas d'utilisateurs pour les systèmes de fichiers distants et par la commande edquota pour définir des quotas sur les systèmes de fichiers distants.
verrouillé
Il s'agit d'un thread du noyau qui s'exécute à la fois sur les clients et sur les serveurs. Il implémente le protocole Network Lock Manager (NLM), qui permet aux clients NFSv3 de verrouiller des fichiers sur le serveur. Il est démarré automatiquement chaque fois que le serveur NFS est exécuté et chaque fois qu'un système de fichiers NFS est monté.
nfslock
Le démarrage de ce service démarre les processus RPC qui permettent aux clients NFS de verrouiller les fichiers sur le serveur.
Configuration du serveur NFS
Pour commencer à configurer un système en tant que serveur NFS, installez le package nfs-utils :
# yum install nfs-utils
Le fichier de configuration principal du serveur NFS est /etc/exports . Ce fichier stocke une liste des hiérarchies de répertoires exportées que les systèmes distants peuvent monter. Le format des entrées est :
export-point client1(options) [client2(options) ... ]
Le point d'exportation est le nom de chemin absolu de la hiérarchie de répertoires à exporter. Un ou plusieurs systèmes clients, chacun avec des options spécifiques, peuvent monter un point d'exportation. Il n'y a pas d'espace entre l'attribut client et la parenthèse ouvrante. Lorsqu'aucune option client n'est spécifiée, les paramètres par défaut suivants s'appliquent :
- ro :lecture seule . Les hôtes clients ne peuvent pas modifier les données partagées sur le système de fichiers. Pour autoriser les hôtes clients à apporter des modifications au système de fichiers, spécifiez l'option rw (lecture/écriture).
- synchroniser :Le serveur NFS répond aux requêtes uniquement après que les modifications apportées par les requêtes précédentes ont été écrites sur le disque. async spécifie que le serveur n'a pas à attendre.
- wdélai :Le serveur NFS retarde la validation des demandes d'écriture lorsqu'il soupçonne qu'une autre demande d'écriture est imminente. Pour désactiver le délai, utilisez l'option no_wdelay. no_wdelay n'est disponible que si l'option de synchronisation par défaut est également spécifiée.
- root_squash :Empêche les utilisateurs root connectés à distance d'avoir des privilèges root, « écrasant » efficacement le pouvoir de l'utilisateur root distant. Les requêtes semblent provenir de l'utilisateur nfsnobody, un utilisateur non privilégié sur le système local, ou comme spécifié par anonuid. Pour désactiver l'écrasement racine, spécifiez l'option no_root_squash.
- no_all_squash :ne modifie pas le mappage des utilisateurs distants. Pour écraser tous les utilisateurs distants (y compris root), utilisez l'option all_squash.
Pour spécifier l'ID utilisateur (UID) et l'ID de groupe (GID) que le serveur NFS attribue aux utilisateurs distants, utilisez les options anonuid et anongid comme suit :
export-point client(anonuid=uid,anongid=gid)
Les options anonuid et anongid vous permettent de créer un compte d'utilisateur et de groupe spécial que les utilisateurs NFS distants peuvent partager. Par défaut, les listes de contrôle d'accès (ACL) sont prises en charge par NFS. Pour désactiver cette fonctionnalité, spécifiez l'option no_acl lors de l'exportation du système de fichiers.
Vous pouvez utiliser des caractères génériques, tels que (*) et (?) dans les noms de client. Vous pouvez également exporter des répertoires vers tous les hôtes d'un réseau IP. Pour ce faire, spécifiez une adresse IP et une paire de masque de réseau en tant qu'adresse/masque de réseau. L'une ou l'autre des formes suivantes est valide :
192.168.1.0/24 192.168.1.0/255.255.255.0
/etc/exports Exemples
Dans l'exemple suivant, un système client avec l'adresse IP 192.0.2.102 peut monter le répertoire /export/avec des autorisations de lecture/écriture. Toutes les écritures sur le disque sont asynchrones :
/export/directory 192.0.2.102(rw,async)
L'exemple suivant exporte le répertoire /exports/apps vers tous les clients, convertit tous les utilisateurs qui se connectent en utilisateur local anonyme nfsnobody et rend le répertoire en lecture seule :
/exports/apps *(all_squash, ro)
L'exemple suivant exporte le répertoire /spreadsheets/proj1 avec des autorisations en lecture seule vers tous les clients du sous-réseau 192.168.1.0 et des autorisations en lecture/écriture vers le système client nommé mgmtpc :
/spreadsheets/proj1 192.168.1.0/24(ro) mgmtpc(rw)
Démarrage du service NFS
Le service rpcbind doit être démarré avant de démarrer nfs. La commande suivante vérifie si le service rpcbind est activé et en cours d'exécution.
# systemctl status rpcbind
Si le service rpcbind est en cours d'exécution, le service nfs peut être démarré. Redémarrez nfs après avoir apporté des modifications à la configuration dans /etc/exports ou exécutez la commande exportfs -a.
# systemctl start nfs
Vérifiez si le service nfslock est activé et en cours d'exécution. Le démarrage de ce service démarre les processus RPC qui permettent aux clients NFS de verrouiller les fichiers sur le serveur.
# systemctl status nfslock
Utilisez la commande systemctl enable pour démarrer automatiquement les services au démarrage. Utilisez le nom complet de nfs-server lors de l'activation du service NFS.
# systemctl enable nfs-server
Spécifiez les options de configuration et les arguments en les plaçant dans /etc/sysconfig/nfs . Ce fichier contient plusieurs commentaires pour vous aider à spécifier les options sont des arguments. Utilisez la commande showmount –e pour afficher les systèmes de fichiers exportés :
# showmount –e
Utilitaire exportfs
Vous pouvez également configurer un serveur NFS à partir de la ligne de commande en utilisant exportfs. Cette commande permet à l'utilisateur root d'exporter ou de désexporter de manière sélective des répertoires sans modifier /etc/exports et sans redémarrer le service NFS. La syntaxe de la commande est :
# exportfs [options] [client:dir ...]
L'argument client est le nom du système client vers lequel dir est exporté. L'argument dir est le nom de chemin absolu du répertoire exporté. Voici une liste de certaines des options :
- -r :Réexportez les entrées dans /etc/exports et synchronisez /var/lib/nfs/etab avec /etc/exports. Le fichier /var/lib/nfs/etab est la table d'exportation principale. rpc.mountd lit ce fichier lorsqu'un client envoie une commande de montage NFS.
- -a :Exportez les entrées dans /etc/exports mais ne synchronisez pas /var/lib/nfs/etab. Exécutez exportfs –a après avoir apporté des modifications à la configuration.
- -i :Ignorez les entrées dans /etc/exports et n'utilisez que des arguments de ligne de commande.
- -u :Désexporter un ou plusieurs répertoires.
- -o :Spécifiez les options client comme spécifié dans /etc/exports.
Configuration du client NFS
Pour commencer à configurer un système en tant que client NFS, installez le package nfs-utils :
# yum install nfs-utils
Utilisez la commande mount pour monter les systèmes de fichiers exportés (partages NFS) côté client. La syntaxe de la commande est :
# mount -t nfs -o options host:/remote/export /local/directory
Voici les descriptions des arguments :
- -t nfs :indique que le type de système de fichiers est nfs. Avec cette option, mount utilise NFSv4 si le serveur le prend en charge; sinon, il utilise NFSv3.
- options -o :Une liste d'options de montage séparées par des virgules
- hôte :/remote/export :nom d'hôte exportant le système de fichiers, suivi de deux-points, suivi du nom de chemin absolu du partage NFS
- /local/répertoire :Le point de montage sur le système client
Par exemple, pour monter le répertoire /home exporté depuis l'hôte abc avec des autorisations en lecture seule (option ro) sur le point de montage local /abc_home, et empêcher les utilisateurs distants d'obtenir des privilèges plus élevés en exécutant un programme setuid (option nosuid) :
# mount -t nfs -o ro,nosuid abc:/home /abc_home
Pour monter des partages NFS au démarrage, ajoutez des entrées à la table de montage du système de fichiers, /etc/fstab. Les entrées sont au format suivant :
# vi /etc/fstab server:/exported-filesystem local_mount_point nfs options 0 0
Par exemple, l'entrée /etc/fstab qui réplique la commande mount de la page précédente est :
# vi /etc/fstab abc:/home /abc_home nfs ro,nosuid 0 0
La commande df affiche les systèmes de fichiers montés, y compris les systèmes de fichiers montés NFS. Pour les montages NFS, la colonne "Système de fichiers" affiche les informations server:/exported-filesystem. Utilisez le -T possibilité d'inclure une colonne "Type" :
# df -hT Filesystem Type Size Used Avail Use% Mounted on host03:/Dev nfs4 976M 2.5M 907M 1% /remote_devCentOS / RHEL 7 :Configurer un serveur NFS et un client NFS