Network File System ou NFS est un protocole de système de fichiers distribué qui permet aux hôtes distants de monter des systèmes de fichiers sur un réseau et d'effectuer des opérations sur les fichiers comme s'ils étaient montés localement. Ceci est particulièrement utile lorsque vous souhaitez partager les ressources d'un serveur sur plusieurs clients ou permettre à plusieurs clients d'écrire sur un seul espace de stockage.
Dans ce didacticiel, vous apprendrez à installer et à configurer le serveur NFS et les clients NFS basés sur Rocky Linux 8. Pour cela, nous allons configurer un hôte ou un serveur pour partager des fichiers et un client pour accéder aux fichiers hôtes à l'aide d'un montage NFS. .
Prérequis
- Deux serveurs Rocky Linux 8. Chacun d'entre eux doit avoir un utilisateur non root avec des privilèges sudo.
- L'hôte et le client doivent avoir une adresse IP statique. Vous pouvez même configurer les deux sur un réseau privé. Pour notre tutoriel, nous utiliserons host_ip pour indiquer l'adresse IP de l'hôte et client_ip pour faire référence à l'adresse IP du Client.
Étape 1 - Installer NFS sur l'hôte et le client
Hébergeur
Pour installer les packages NFS, vous devez installer le nfs-utils
emballer. Il fournit un démon pour le serveur NFS et les outils associés.
Installez le paquet.
$ sudo dnf install nfs-utils
Activer et démarrer le nfs-server
un service. Services restants nécessaires pour le montage et le partage NFS tels que nfsd
, nfs-idmapd
, rpcbind
, rpc.mountd
, lockd
, rpc.statd
, rpc.quotad
et rpc.idmapd
démarrer automatiquement avec lui.
$ sudo systemctl enable nfs-server --now
Vérifiez la version de l'installation NFS.
$ sudo cat /proc/fs/nfsd/versions -2 +3 +4 +4.1 +4.2
Les versions 3 et 4 de NFS sont activées par défaut et la version 2 est désactivée. NFSv2 est assez ancien et obsolète, et vous pouvez donc voir le -ve signe devant.
NFS stocke ses configurations dans /etc/nfsmount.conf
et /etc/nfs.conf
des dossiers. Le /etc/nfsmount.conf
est de configurer les montages NFS tandis que /etc/nfs.conf
consiste à configurer le démon NFS et les outils associés. Les paramètres par défaut sont suffisants pour notre tutoriel, et aucune modification n'est nécessaire.
Client
Sur le client, installez le nfs-utils
et nfs4-acl-tools
colis.
$ sudo dnf install nfs-utils nfs4-acl-tools
Étape 2 - Créer les répertoires de partage sur l'hôte
Nous utiliserons deux exemples avec des paramètres de configuration différents - un avec un montage à usage général et un en partageant le répertoire personnel de l'hôte.
Les répertoires montés NFS ne font pas partie du client. Par conséquent, NFS ne peut pas effectuer de tâches nécessitant des privilèges de superutilisateur. Cela signifie que le client ne peut pas changer de propriétaire, écrire dessus en tant qu'utilisateur root ou effectuer des tâches de haut niveau. Cependant, il existe des cas où un utilisateur de confiance sur le client doit effectuer de telles tâches sans avoir besoin d'un accès superutilisateur sur l'hôte. Le serveur NFS peut être configuré pour permettre cela, mais cela présente un risque lorsqu'un client peut accéder à l'hôte.
Travailler avec un support à usage général
Pour notre premier cas, nous allons créer un montage simple qui utilise le comportement NFS par défaut, ce qui signifie que le client ne peut effectuer aucune tâche nécessitant des privilèges de superutilisateur.
Créez un répertoire de partage.
host:$ sudo mkdir /var/nfs/share -p
L'utilisateur root de l'hôte sera propriétaire de ce répertoire puisque nous avons utilisé sudo
pour le créer.
host:$ ls -l /var/nfs total 0 drwxr-xr-x. 2 root root 6 Dec 13 07:30 share
NFS traduira toutes les opérations root côté client en nobody:nobody
identifiants pour des raisons de sécurité. Par conséquent, nous devons les faire correspondre du côté hôte.
host:$ sudo chown nobody:nobody /var/nfs/general
Travailler avec le répertoire personnel
Pour notre deuxième cas, nous rendrons le répertoire personnel de l'hôte disponible pour le client. Nous n'avons pas besoin de le créer puisqu'il existe déjà. Nous n'avons pas besoin de modifier les autorisations car cela affecterait les utilisateurs sur la machine hôte.
Étape 3 - Configuration des exportations NFS sur l'hôte
Ouvrez le fichier /etc/exports
sur la machine hôte pour modification.
host:$ sudo nano /etc/exports
Collez le code suivant dans le fichier.
/var/nfs/share client_ip(rw,sync,no_subtree_check) /home client_ip(rw,sync,no_root_squash,no_subtree_check)
Chaque répertoire et sa configuration doivent figurer sur une ligne distincte. Remplacez le client_ip
value avec l'adresse IP réelle de la machine cliente.
Passons en revue toutes les options d'exportation NFS.
- rw - donne à la machine cliente un accès en lecture et en écriture sur le volume NFS.
- synchroniser - cette option oblige NFS à écrire les modifications sur le disque avant de répondre. Cette option est considérée comme plus fiable. Cependant, cela réduit également la vitesse des opérations sur les fichiers.
- no_subtree_check - cette option empêche la vérification de la sous-arborescence, un processus dans lequel l'hôte doit vérifier si le fichier est disponible ainsi que les autorisations pour chaque demande. Cela peut également entraîner des problèmes lorsqu'un fichier est renommé sur l'hôte alors qu'il est encore ouvert sur le client. Sa désactivation améliore la fiabilité de NFS.
- no_root_squash - Par défaut, NFS traduit les requêtes d'un utilisateur root sur le client en un utilisateur non privilégié sur l'hôte. Cette option désactive ce comportement et doit être utilisée avec précaution pour permettre au client d'accéder à l'hôte.
Une fois terminé, enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Pour exporter les partages, exécutez la commande suivante.
host:$ sudo exportfs -arv exporting client_ip:/home exporting client_ip:/var/nfs/share
- -a - cette option entraîne l'exportation de tous les répertoires.
- -r - cette option provoque l'exportation de tous les répertoires en construisant une nouvelle liste dans le
/var/lib/nfs/etab
annuaire. Cette option est utilisée pour actualiser la liste d'exportation avec toutes les modifications apportées au/etc/exports
. - -v - active la sortie détaillée.
Pour répertorier tous les répertoires exportés, exécutez la commande suivante. Il affichera toutes les options, y compris celles par défaut qui n'ont pas été spécifiées dans le /etc/exports
fichier.
host:$ sudo exportfs -s /var/nfs/share client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /home client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
Étape 4 - Configuration du pare-feu sur l'hôte
Rocky Linux utilise Firewalld Firewall. Vérifiez l'état du pare-feu.
host:$ sudo firewall-cmd --state running
Cela indique qu'il est opérationnel avec succès.
Le pare-feu fonctionne avec différentes zones, et la zone publique est celle par défaut que nous utiliserons. Répertorier tous les services et ports actifs sur le pare-feu.
host:$ sudo firewall-cmd --permanent --list-services
Il devrait afficher la sortie suivante.
cockpit dhcpv6-client ssh
Ensuite, nous devons autoriser le trafic vers les services NFS nécessaires - mountd
, nfs
et rpc-bind
. Nous devons également autoriser l'accès à partir de l'adresse IP du client. Si vos clients et vos serveurs hôtes se trouvent dans le même sous-réseau, vous n'avez pas besoin d'ajouter l'adresse IP du client.
host:$ sudo firewall-cmd --permanent --add-service=nfs host:$ sudo firewall-cmd --permanent --add-service=rpc-bind host:$ sudo firewall-cmd --permanent --add-service=mountd host:$ sudo firewall-cmd --permanent --add-source=client_IP
Rechargez le pare-feu pour appliquer les modifications.
host:$ sudo firewall-cmd --reload
Étape 5 - Création de points de montage et de répertoires sur le client
Maintenant que le serveur/hôte NFS est configuré, l'étape suivante consiste à configurer les points de montage et les répertoires sur le client. Vous pouvez exécuter le showmount
sur le client pour vérifier la liste des systèmes de fichiers exportés sur l'hôte.
client:$ showmount -e host_ip Export list for host_ip: /home host_ip /var/nfs/share host_ip
Créez toujours un nouveau répertoire en tant que points de montage sur le client ou utilisez un répertoire vide existant. S'il y a un fichier dans un répertoire que vous montez, il sera masqué.
Créez les répertoires de montage.
client:$ sudo mkdir -p /nfs/share client:$ sudo mkdir -p /nfs/home
Montez les partages en utilisant l'adresse IP de l'hôte.
client:$ sudo mount host_ip:/var/nfs/share /nfs/share client:$ sudo mount host_ip:/home /nfs/home
Vérifiez que le montage a réussi.
client:$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 16M 389M 4% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 2.4G 23G 10% / tmpfs 81M 0 81M 0% /run/user/1000 host_ip:/var/nfs/share 25G 2.4G 23G 10% /nfs/share host_ip:/home 25G 2.4G 23G 10% /nfs/home
Les deux partages sont montés à partir du même système de fichiers. Par conséquent, ils affichent la même utilisation du disque.
Vous pouvez également utiliser le mount
commande à vérifier.
client:$ mount | grep nfs rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip) host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
Étape 6 - Tester l'accès NFS
Tester le partage à usage général
Écrire un fichier de test dans /var/nfs/share
partager.
client:$ sudo touch /nfs/share/test.txt
Vérifiez sa propriété.
client:$ ls -l /nfs/share/test.txt -rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt
Puisque nous avons monté ce volume en utilisant les paramètres NFS par défaut et créé le fichier sur le client en utilisant sudo
, la propriété du fichier par défaut est nobody:nobody
. Les superutilisateurs du client ne peuvent effectuer aucune tâche administrative sur le partage.
Tester le partage du répertoire personnel
Écrire un fichier de test dans /nfs/home
partager.
client:$ sudo touch /nfs/home/home.txt
Vérifiez sa propriété.
client:$ ls -l /nfs/home/home.txt -rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt
Depuis que nous avons utilisé le no_root_squash
, elle permettait à l'utilisateur root du client d'agir en tant que root sur le partage lui-même.
Étape 7 - Rendez les points de montage permanents
Les partages NFS par défaut sont temporaires et doivent être montés au démarrage. Nous pouvons les rendre permanents en éditant le /etc/fstab
fichier sur le client.
Ouvrez le fichier /etc/fstab
pour l'édition.
client:$ sudo nano /etc/fstab
Collez les lignes suivantes au bas du fichier.
. . . host_ip:/var/nfs/share /nfs/share nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Vous pouvez en savoir plus sur les options répertoriées ci-dessus en exécutant les commandes suivantes.
client:$ man nfs client:$ man mount
Si vous voulez les lire en ligne, vous pouvez rechercher sur Google la phrase man nfs
et man mount
pour en savoir plus sur ces options.
Étape 8 - Démonter le partage NFS
Si vous ne voulez plus les montages à distance sur votre système, vous pouvez les démonter en utilisant le umount
commande. Notez que la commande s'appelle umount et non démonter ce qui est une erreur courante.
Sortez des montures partagées et démontez-les.
client:$ cd ~ client:$ sudo umount /nfs/share client:$ sudo umount /nfs/home
Si vous n'avez plus besoin des partages montés à nouveau au redémarrage, assurez-vous de commenter les entrées correspondantes dans le /etc/fstab
fichier en mettant un #
signer devant eux.
Conclusion
Dans ce didacticiel, nous avons appris à créer un serveur hôte NFS et à monter des répertoires à l'aide de celui-ci, que nous avons partagé avec un client NFS. Si vous l'implémentez dans un réseau privé, il ne devrait y avoir aucun problème, mais si vous l'utilisez en production, vous devez vous rappeler que le protocole n'est pas crypté et vous devez implémenter une authentification pour protéger vos données.
Si vous avez des questions, postez-les dans les commentaires ci-dessous.