Comment installer le client et le serveur NFS sur Ubuntu 20.04

Network File System ou en abrégé NFS est un protocole de système de fichiers distribué qui te permet de monter des répertoires distants sur ton serveur. NFS te permet d’accéder aux fichiers et aux dossiers à partir d’un autre serveur ou client. Tu peux écrire sur ce serveur à partir de plusieurs clients ou systèmes distants sur un réseau. Cette technologie te donne la possibilité de partager une ressource sur plusieurs systèmes.

Dans ce tutoriel, nous allons apprendre à configurer un serveur NFS et à monter des partages NFS sur un client en utilisant Ubuntu 20.04.

Conditions préalables

  • Deux systèmes Ubuntu 20.04. Chaque serveur doit avoir un utilisateur non-root avec des privilèges sudo et un pare-feu UFW configuré.
  • Tu peux configurer le serveur et le client sur un réseau privé. Pour notre tutoriel, j’utiliserai host_ip pour désigner 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 le serveur et le client

Héberger

Nous devons installer le paquet nfs-kernel-server sur l’hôte pour partager tes répertoires.

$ sudo apt update
$ sudo apt install nfs-kernel-server

Client

Pour le client, nous allons installer le paquet nfs-common qui permet au client de monter le répertoire de l'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 y a deux façons d'accorder au client l'accès aux répertoires sur l'hôte. Par défaut, le serveur NFS n'autorise pas les opérations qui nécessitent des privilèges sudo. Cela signifie que les super-utilisateurs sur le client ne peuvent pas écrire de fichiers en tant que root, réaffecter la propriété ou effectuer toute tâche nécessitant des privilèges élevés.

Mais parfois, un client a besoin d'effectuer certaines opérations sur l'hôte qui nécessitent des privilèges élevés mais n'a pas besoin d'un accès superutilisateur pour cela.

Première méthode

Il s'agit de la méthode par défaut de partage des répertoires. Elle rend difficile pour un utilisateur root sur le client d'interagir avec l'hôte en utilisant des privilèges élevés.

Tout d'abord, crée le répertoire de partage.

$ sudo mkdir /var/nfs/general -p

Si tu effectues des opérations racine sur le client, NFS les traduira en informations d'identification nobody:nogroup 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 allons partager le répertoire d'accueil 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 sur ce répertoire car cela créerait de nombreux problèmes pour les utilisateurs de la machine hôte.

Étape 3 - Configurer NFS sur l'hôte

Il est temps de configurer NFS pour mettre en place le partage.

Ouvre le fichier /etc/exports sur le serveur hôte.

$ sudo nano /etc/exports

Ajoute les lignes suivantes en bas, une pour chaque répertoire que tu partages.

/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.
  • sync: Cette option oblige NFS à écrire les modifications avant de répondre. Cela signifie que NFS finira d'abord d'écrire dans le répertoire hôte avant de répondre 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 des sous-arbres. La vérification de sous-arbre est une opération où, à chaque demande NFS, le serveur doit vérifier que le fichier accédé est présent et qu'il se trouve dans l'arbre exporté. Cette opération pose des problèmes lorsque les fichiers auxquels accède un client sont renommés. Il est donc préférable de la laisser désactivée dans la plupart des cas. Elle a quelques légères répercussions 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 à un utilisateur non privilégié sur le serveur. Cela est fait dans l'intention d'améliorer la sécurité. Cette option désactive ce comportement pour certains partages.

Lorsque tu as terminé, ferme le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Redémarre 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 est de l'activer spécifiquement pour l'adresse IP de chaque client séparément au lieu d'en autoriser l'accès de partout.

NFS utilise le port 2049. Active l'accès à NFS à l'aide de la commande suivante.

$ sudo ufw allow from client_ip to any port nfs

Vérifie l'état 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ée deux répertoires pour les montages sur le client.

$ sudo mkdir -p /nfs/general
$ sudo mkdir -p /nfs/home

Maintenant que nous avons tout configuré 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

Tu peux 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

Tu peux voir les deux partages montés en bas de la liste. Comme ils ont tous deux é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 montage, utilise la commande suivante.

$ du -sh /nfs/general
36K     /nfs/general

Étape 6 - Teste le partage NFS

Crée un fichier de test sur le partage /var/nfs/general.

$ sudo touch /nfs/general/general.test

Vérifie sa propriété.

$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test

Il a été monté à l'aide des options NFS par défaut et comme nous avons créé le fichier en utilisant root sur la machine du client, la propriété sur l'hôte a été transférée à nobody:nogroup. Ici, l'utilisateur du client ne peut pas effectuer de tâches administratives sur la machine de l'hôte.

Crée un fichier de test sur le partage /nfs/home`.

$ sudo touch /nfs/home/home.test

Vérifie 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, comme nous avons créé le fichier de test en utilisant root depuis la machine du client, la propriété a été conservée sur la machine de l'hôte. Cela s'explique par le fait que nous avons utilisé le drapeau no_root_squash qui permet à l'utilisateur root de la machine cliente d'être également utilisateur root sur la machine hôte.

Étape 7 - Monte les partages NFS pendant le démarrage

Ces montages ne seront pas conservés une fois que tu auras démarré la machine cliente. Pour les rendre permanents, nous devons modifier le fichier /etc/fstab.

Ouvre le fichier /etc/fstab pour le modifier.

$ sudo nano /etc/fstab

Colle les lignes suivantes au bas du fichier. Chaque ligne correspond à chaque répertoire que nous voulons voir monté au moment du 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, consulte la page de manuel de nfs.

$ man nfs

Enregistre le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque tu y es invité.

Redémarre le serveur pour vérifier les montages.

$ sudo reboot

Connecte-toi au client-serveur et vérifie 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 tu n'as plus besoin des montages NFS, tu peux les démonter en utilisant la commande suivante.

$ sudo umount /nfs/home
$ sudo umount /nfs/general

Une erreur courante est d'utiliser unmount au lieu de umount qui est la commande réelle.

Vérifie qu'ils ont été démontés correctement.

$ 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

Tu devras également supprimer leurs entrées du fichier /etc/fstab pour qu'ils ne soient pas remontés au démarrage. Tu peux aussi simplement décommenter leurs entrées en plaçant un caractère # devant au cas où tu aurais besoin de réutiliser les montages à nouveau.

Conclusion

Ceci conclut notre tutoriel où nous avons appris à créer des montages NFS sur une machine hôte et à y accéder depuis différentes machines clientes. Si tu as des questions, envoie-les dans les commentaires ci-dessous.

Vous aimerez aussi...