Network File System ou court NFS est un protocole de système de fichiers distribué qui vous permet de monter des répertoires distants sur votre serveur. NFS vous permet d'accéder aux fichiers et dossiers à partir d'un serveur ou d'un client différent. Vous pouvez écrire sur ce serveur à partir de plusieurs clients ou systèmes distants sur un réseau. Cette technologie vous offre la possibilité de partager une ressource sur plusieurs systèmes.
Dans ce didacticiel, nous apprendrons comment configurer un serveur NFS et comment monter des partages NFS sur un client utilisant Ubuntu 20.04.
Prérequis
- Deux systèmes Ubuntu 20.04. Chaque serveur doit avoir un utilisateur non root avec des privilèges sudo et un pare-feu UFW défini.
- Vous pouvez configurer à la fois le serveur et le client sur un réseau privé. Pour notre tutoriel, j'utiliserai host_ip pour désigner le host_ip adresse et client_ip pour faire référence à l'adresse IP du Client.
Étape 1 - Installer NFS sur le serveur et le client
Hébergeur
Nous devons installer le nfs-kernel-server
package sur l'hébergeur pour partager vos répertoires.
$ sudo apt update
$ sudo apt install nfs-kernel-server
Client
Pour le client, nous installerons le nfs-common
package qui permet au client de monter le répertoire hôte mais ne peut pas héberger le répertoire lui-même.
$ sudo apt update
$ sudo apt install nfs-common
Étape 2 - Créer des répertoires de partage sur l'hôte
Il existe deux façons d'accorder l'accès aux répertoires sur l'hôte au client. Par défaut, le serveur NFS n'autorise pas les opérations nécessitant des privilèges sudo. Cela signifie que les super-utilisateurs du client ne peuvent pas écrire de fichiers en tant que root, réaffecter la propriété ou effectuer des tâches nécessitant des privilèges élevés.
Mais parfois, un client doit effectuer certaines opérations sur l'hôte qui nécessitent des privilèges élevés mais n'ont pas besoin d'un accès superutilisateur pour cela.
Première méthode
C'est la manière par défaut de partager des répertoires. Cela rend difficile pour un utilisateur root sur le client d'interagir avec l'hôte en utilisant des privilèges élevés.
Commencez par créer le répertoire de partage.
$ sudo mkdir /var/nfs/general -p
Si vous effectuez des opérations root sur le client, NFS les traduira en nobody:nogroup
informations d'identification sur la machine hôte. Par conséquent, nous devons donner la propriété appropriée au répertoire partagé.
$ sudo chown nobody:nogroup /var/nfs/general
Deuxième méthode
Ici, nous partagerons le répertoire personnel de l'hôte avec le client. Cela permettra aux utilisateurs root du client d'accéder correctement à l'hôte.
Comme le répertoire personnel existe déjà sur le serveur hôte, nous n'avons pas besoin de le créer. Il n'est pas non plus nécessaire de modifier les autorisations car cela créera plusieurs problèmes pour les utilisateurs sur la machine hôte.
Étape 3 - Configurer NFS sur l'hôte
Il est temps de configurer NFS pour configurer le partage.
Ouvrez le fichier /etc/exports
sur le serveur hôte.
$ sudo nano /etc/exports
Ajoutez les lignes suivantes en bas, une chacune, pour chaque répertoire que vous partagez.
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
Passons en revue toutes ces options et ce qu'elles signifient.
- rw :Cela donne au client un accès en lecture et en écriture sur les répertoires de l'hôte.
- synchroniser :Cette option force NFS à écrire les modifications avant de répondre. Cela signifie que NFS finira d'abord d'écrire dans le répertoire hôte, puis répondra au client. Cela garantit que l'état réel du serveur hôte est reflété, mais peut ralentir la vitesse des opérations sur les fichiers.
- no_subtree_check :Cette option désactive la vérification de la sous-arborescence. La vérification de la sous-arborescence est une opération où à chaque requête NFS, le serveur doit vérifier que le fichier accédé est présent et qu'il se trouve dans l'arborescence exportée. Cette opération provoque des problèmes lorsque les fichiers auxquels accède un client sont renommés. Il est donc préférable de le laisser désactivé dans la plupart des cas. Cela a des implications mineures sur la sécurité, mais peut améliorer la fiabilité.
- no_root_squash :Par défaut, NFS traduit toutes les opérations effectuées en tant que root par le client vers un utilisateur non privilégié sur le serveur. Ceci est fait dans le but d'améliorer la sécurité. Cette option désactive ce comportement pour certains partages.
Lorsque vous avez terminé, fermez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Redémarrez le serveur NFS pour appliquer les modifications.
$ sudo systemctl restart nfs-kernel-server
Étape 4 - Configurer le pare-feu de l'hôte
La meilleure pratique avec NFS consiste à l'activer spécifiquement pour l'adresse IP de chaque client séparément au lieu d'autoriser l'accès depuis n'importe où.
NFS utilise le port 2049. Activez l'accès pour NFS avec la commande suivante.
$ sudo ufw allow from client_ip to any port nfs
Vérifiez le statut pour vérifier.
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 167.100.34.78
OpenSSH (v6) ALLOW Anywhere (v6)
Étape 5 - Créer des points de montage sur le client
Maintenant que notre hôte est configuré, il est temps de configurer le client.
Créez deux répertoires pour les montages sur le client.
$ sudo mkdir -p /nfs/general
$ sudo mkdir -p /nfs/home
Maintenant que nous avons tout défini du côté de l'hôte, nous pouvons monter les partages en utilisant l'adresse IP de l'hôte.
$ sudo mount host_ip:/var/nfs/general /nfs/general
$ sudo mount host_ip:/home /nfs/home
Vous pouvez vérifier s'ils ont été montés avec succès avec la commande suivante.
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 448M 0 448M 0% /dev
tmpfs 99M 664K 98M 1% /run
/dev/vda1 25G 3.2G 21G 14% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
tmpfs 99M 0 99M 0% /run/user/1000
123.175.112.87:/var/nfs/general 25G 18G 6.3G 74% /nfs/general
123.175.112.87:/home 25G 18G 6.3G 74% /nfs/home
Vous pouvez voir les deux partages montés en bas de la liste. Étant donné que les deux ont été montés à partir du même système de fichiers, ils affichent l'utilisation complète du disque et non l'utilisation réelle des répertoires montés.
Pour voir combien d'espace réel est utilisé sous chaque support, utilisez la commande suivante.
$ du -sh /nfs/general
36K /nfs/general
Étape 6 - Tester le partage NFS
Créez un fichier de test dans /var/nfs/general
partager.
$ sudo touch /nfs/general/general.test
Vérifiez sa propriété.
$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
Cela a été monté à l'aide des options NFS par défaut et puisque nous avons créé le fichier en utilisant root à partir de la machine cliente, la propriété de l'hôte a été transférée à nobody:nogroup
. Ici, l'utilisateur client ne peut pas effectuer de tâches administratives sur la machine de l'hôte.
Créez un fichier de test sur le partage /nfs/home`.
$ sudo touch /nfs/home/home.test
Vérifiez sa propriété.
$ ls -l /nfs/home/home.test
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test
Ici, puisque nous avons créé le fichier de test en utilisant la racine de la machine cliente, la propriété a été conservée sur la machine hôte. C'est parce que nous avons utilisé le no_root_squash
drapeau qui autorise l'utilisateur root sur la machine cliente en tant qu'utilisateur root sur la machine hôte également.
Étape 7 - Monter les partages NFS pendant le démarrage
Ces montages ne seront pas conservés une fois que vous aurez démarré la machine cliente. Pour les rendre permanents, nous devons modifier le /etc/fstab
fichier.
Ouvrez le /etc/fstab
fichier à éditer.
$ sudo nano /etc/fstab
Collez les lignes suivantes au bas du fichier. Chaque ligne correspond à chaque répertoire que nous voulons monter au démarrage.
. . .
host_ip:/var/nfs/general /nfs/general 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
Pour en savoir plus sur ces options, consultez la page de manuel de nfs
.
$ man nfs
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Redémarrez le serveur pour vérifier les montages.
$ sudo reboot
Connectez-vous au client-serveur et vérifiez que les montages sont présents.
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 448M 0 448M 0% /dev
tmpfs 99M 664K 98M 1% /run
/dev/vda1 25G 3.2G 21G 14% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
tmpfs 99M 0 99M 0% /run/user/1000
123.175.112.87:/var/nfs/general 25G 18G 6.3G 74% /nfs/general
123.175.112.87:/home 25G 18G 6.3G 74% /nfs/home
Étape 8 - Démonter les partages NFS
Une fois que vous n'avez plus besoin de montages NFS, vous pouvez les démonter à l'aide de la commande suivante.
$ sudo umount /nfs/home
$ sudo umount /nfs/general
Une erreur courante consiste à utiliser unmount
au lieu de umount
qui est la commande réelle.
Vérifiez qu'ils ont été correctement démontés.
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 448M 0 448M 0% /dev
tmpfs 99M 664K 98M 1% /run
/dev/vda1 25G 3.2G 21G 14% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
tmpfs 99M 0 99M 0% /run/user/1000
Vous devrez également supprimer leurs entrées du /etc/fstab
fichier afin qu'ils ne soient pas remontés au démarrage. Vous pouvez aussi simplement décommenter leurs entrées en plaçant un #
caractère devant au cas où vous auriez besoin de réutiliser à nouveau les montures.
Conclusion
Ceci conclut notre didacticiel où nous avons appris à créer des montages NFS sur une machine hôte et à y accéder à partir de différentes machines clientes. Si vous avez des questions, posez-les dans les commentaires ci-dessous.