Comment configurer un montage NFS sur Ubuntu 18.04

Introduction

NFS, ou Système de Fichiers en Réseau, est un protocole de système de fichiers distribué qui vous permet de monter des répertoires distants sur votre serveur. Cela vous permet de gérer l’espace de stockage dans un emplacement différent et d’écrire dans cet espace à partir de plusieurs clients. NFS fournit un moyen relativement standard et performant d’accéder à des systèmes distants via un réseau et fonctionne bien dans les situations où les ressources partagées doivent être accessibles régulièrement.

Dans ce guide, vous apprendrez comment installer le logiciel nécessaire pour la fonctionnalité NFS sur Ubuntu 18.04, configurer les montages NFS sur un serveur et un client, et monter et démonter les partages distants.

Prérequis

Nous utiliserons deux serveurs dans ce tutoriel, avec l’un partageant une partie de son système de fichiers avec l’autre. Pour accomplir ce tutoriel, vous aurez besoin de:

  • Deux serveurs Ubuntu 18.04. Chacun d’eux devrait avoir un utilisateur non root avec des privilèges sudo configurés, un pare-feu configuré avec UFW, et un réseau privé s’il est disponible pour vous.

Tout au long de ce tutoriel, nous faisons référence au serveur qui partage ses répertoires comme l’hôte et au serveur qui monte ces répertoires comme le client. Nous utiliserons les adresses IP suivantes comme substituts pour les valeurs de l’hôte et du client:

  • Hôte: 203.0.113.0
  • Client: 203.0.113.24

Lorsque ces adresses IP apparaissent dans les commandes et les fichiers de configuration, remplacez-les par vos propres adresses IP respectives de l’hôte et du client.

Étape 1 — Téléchargement et Installation des Composants

Commencez d’abord par installer les composants nécessaires sur chaque serveur.

Sur l’Hôte

Sur le serveur hôte, installez le paquet nfs-kernel-server, ce qui vous permettra de partager vos répertoires. Étant donné que c’est la première opération que vous effectuez avec apt dans cette session, rafraîchissez votre index de paquets local avant l’installation :

  1. sudo apt update

Ensuite, installez le paquet :

  1. sudo apt install nfs-kernel-server

Une fois ces paquets installés, passez au serveur client.

Sur le client

Sur le serveur client, installez un paquet appelé nfs-common, qui fournit la fonctionnalité NFS sans inclure les composants du serveur. Encore une fois, rafraîchissez l’index de paquets local avant l’installation pour vous assurer que vous disposez d’informations à jour :

  1. sudo apt update

Ensuite, installez le paquet :

  1. sudo apt install nfs-common

Maintenant que les deux serveurs disposent des paquets nécessaires, vous pouvez commencer à les configurer.

Étape 2 — Création des répertoires de partage sur l’hôte

Nous allons partager deux répertoires distincts avec des paramètres de configuration différents afin d’illustrer deux façons clés dont les montages NFS peuvent être configurés en ce qui concerne l’accès superutilisateur.

Les superutilisateurs peuvent tout faire n’importe où sur leur système. Cependant, les répertoires montés via NFS ne font pas partie du système sur lequel ils sont montés, donc par défaut, le serveur NFS refuse d’effectuer des opérations nécessitant des privilèges de superutilisateur. Cette restriction par défaut signifie que les superutilisateurs sur le client ne peuvent pas écrire de fichiers en tant que root, réaffecter la propriété ou effectuer d’autres tâches de superutilisateur sur le montage NFS.

Parfois, cependant, il y a des utilisateurs de confiance sur le système client qui ont besoin d’effectuer ces actions sur le système de fichiers monté mais qui n’ont pas besoin d’un accès superutilisateur sur l’hôte. Vous pouvez configurer le serveur NFS pour autoriser cela, bien que cela introduise un élément de risque, car un tel utilisateur pourrait obtenir un accès root à l’ensemble du système de l’hôte.

Exemple 1 : Exportation d’un montage polyvalent

Dans le premier exemple, vous allez créer un montage NFS polyvalent qui utilise le comportement NFS par défaut pour rendre difficile à un utilisateur avec des privilèges de root sur la machine client d’interagir avec l’hôte en utilisant ces privilèges de superutilisateur du client. Vous pourriez utiliser quelque chose comme cela pour stocker des fichiers qui ont été téléchargés à l’aide d’un système de gestion de contenu ou pour créer de l’espace pour que les utilisateurs partagent des fichiers de projet.

Tout d’abord, créez un répertoire partagé :

  1. sudo mkdir /var/nfs/general -p

Étant donné que vous le créez avec sudo, le répertoire est possédé par l’utilisateur root de l’hôte:

  1. ls -la /var/nfs/general
Output
total 8 drwxr-xr-x 2 root root 4096 Feb 7 23:21 . drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..

NFS traduira toutes les opérations root sur le client en utilisant les informations d’identification nobody:nogroup comme mesure de sécurité. Par conséquent, vous devez changer la propriété du répertoire pour correspondre à ces informations d’identification:

  1. sudo chown nobody:nogroup /var/nfs/general

Vous êtes maintenant prêt à exporter ce répertoire.

Exemple 2 : Exporter le répertoire personnel

Dans notre deuxième exemple, l’objectif est de rendre les répertoires personnels des utilisateurs stockés sur l’hôte disponibles sur les serveurs clients, tout en permettant aux administrateurs de confiance de ces clients l’accès dont ils ont besoin pour gérer commodément les utilisateurs.

Pour ce faire, vous exporterez le répertoire /home. Comme il existe déjà, vous n’avez pas besoin de le créer. Vous ne changerez pas non plus les autorisations. Si vous le faisiez, cela pourrait entraîner toute une série de problèmes pour toute personne ayant un répertoire personnel sur la machine hôte.

Étape 3 — Configuration des exports NFS sur le serveur hôte

Ensuite, nous plongerons dans le fichier de configuration NFS pour mettre en place le partage de ces ressources.

Sur la machine hôte, ouvrez le fichier /etc/exports dans votre éditeur de texte préféré avec les privilèges root. Ici, nous utiliserons nano:

  1. sudo nano /etc/exports

Le fichier contient des commentaires montrant la structure générale de chaque ligne de configuration. La syntaxe est la suivante:

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

Vous devrez créer une ligne pour chacun des répertoires que vous prévoyez de partager. Puisque notre exemple de client a une adresse IP de 203.0.113.24, nos lignes ressembleront à ce qui suit. Assurez-vous de changer l’adresse IP par celle de votre client:

/etc/exports
/var/nfs/general    203.0.113.24(rw,sync,no_subtree_check)
/home       203.0.113.24(rw,sync,no_root_squash,no_subtree_check)

Ici, nous utilisons les mêmes options de configuration pour les deux répertoires à l’exception de no_root_squash. Examinons ce que signifient chacune de ces options:

  • rw: Cette option donne à l’ordinateur client à la fois un accès en lecture et en écriture au volume.
  • sync: Cette option force NFS à écrire les modifications sur le disque avant de répondre. Cela garantit un environnement plus stable et cohérent, car la réponse reflète l’état réel du volume distant. Cependant, cela réduit également la vitesse des opérations de fichier.
  • no_subtree_check: Cette option empêche la vérification des sous-arbres, un processus où l’hôte doit vérifier si le fichier est toujours disponible dans l’arborescence exportée pour chaque demande. Cela peut causer de nombreux problèmes lorsque le fichier est renommé alors que le client l’a ouvert. Dans presque tous les cas, il est préférable de désactiver la vérification des sous-arbres.
  • no_root_squash: Par défaut, NFS traduit les demandes d’un utilisateur root à distance en un utilisateur non privilégié sur le serveur. Cela a été conçu comme une fonctionnalité de sécurité pour empêcher un compte root sur le client d’utiliser le système de fichiers de l’hôte en tant que root. no_root_squash désactive ce comportement pour certaines parts.

Une fois vos modifications terminées, enregistrez et fermez le fichier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL + X, puis sur Y et ENTER. Ensuite, pour rendre les partages disponibles aux clients que vous avez configurés, redémarrez le serveur NFS avec la commande suivante :

  1. sudo systemctl restart nfs-kernel-server

Avant de pouvoir réellement utiliser les nouveaux partages, cependant, vous devrez vous assurer que le trafic vers les partages est autorisé par les règles de pare-feu.

Étape 4 — Ajustement du pare-feu sur l’hôte

Tout d’abord, vérifiez l’état du pare-feu pour confirmer s’il est activé et, le cas échéant, examinez ce qui est actuellement autorisé :

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Sur notre système, seul le trafic SSH est autorisé, donc nous devrons ajouter une règle pour le trafic NFS.

Avec de nombreuses applications, vous pouvez utiliser sudo ufw app list et les activer par leur nom, mais nfs n’en fait pas partie. Cependant, comme ufw vérifie également /etc/services pour le port et le protocole d’un service, vous pouvez toujours ajouter NFS par son nom. La meilleure pratique recommande d’activer la règle la plus restrictive qui permettra toujours le trafic que vous souhaitez autoriser, donc plutôt que d’autoriser le trafic de n’importe où, vous serez spécifique.

Utilisez la commande suivante pour ouvrir le port 2049 sur l’hôte, en veillant à substituer l’adresse IP de votre client:

  1. sudo ufw allow from 203.0.113.24 to any port nfs

Vous pouvez vérifier le changement en exécutant ce qui suit:

  1. sudo ufw status

Vous devriez recevoir une liste de trafic autorisé depuis le port 2049 dans la sortie:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

Cela confirme que UFW n’autorisera que le trafic NFS sur le port 2049 depuis votre machine client.

Étape 5 — Création de points de montage et montage de répertoires sur le client

Maintenant que le serveur hôte est configuré et qu’il partage ses ressources, vous allez préparer votre client.

Pour rendre les partages distants disponibles sur le client, vous devez monter les répertoires sur l’hôte que vous souhaitez partager vers des répertoires vides sur le client.

Remarque: Si des fichiers et des répertoires se trouvent dans votre point de montage, ils deviendront masqués dès que vous monterez le partage NFS. Pour éviter la perte de fichiers importants, assurez-vous que si vous montez dans un répertoire déjà existant, celui-ci est vide.

Créez deux répertoires pour vos montages. Exécutez la commande suivante pour créer le premier::

  1. sudo mkdir -p /nfs/general

Ensuite, exécutez cette commande pour créer le second::

  1. sudo mkdir -p /nfs/home

Maintenant que vous avez un emplacement pour mettre les partages distants et que vous avez ouvert le pare-feu, vous pouvez monter les partages en utilisant l’adresse IP de votre hôte serveur, qui dans ce guide est 203.0.113.0:

  1. sudo mount 203.0.113.0:/var/nfs/general /nfs/general
  2. sudo mount 203.0.113.0:/home /nfs/home

Ces commandes monteront les partages de l’ordinateur hôte sur la machine cliente. Vous pouvez vérifier qu’ils ont été montés avec succès de plusieurs façons. Vous pouvez le vérifier avec une commande mount ou findmnt, mais df -h fournit une sortie plus lisible qui illustre comment l’utilisation du disque est affichée différemment pour les partages NFS:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.6M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general 203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home

Les deux partages que vous avez montés apparaissent en bas. Comme ils ont été montés à partir du même système de fichiers, ils affichent la même utilisation du disque. Pour vérifier combien d’espace est réellement utilisé sous chaque point de montage, utilisez la commande d’utilisation du disque du et le chemin du montage. Le drapeau -s fournit un résumé de l’utilisation plutôt que d’afficher l’utilisation pour chaque fichier. Le drapeau -h affiche une sortie lisible par l’homme:

  1. du -sh /nfs/home
Output
44K /nfs/home

Cela vous montre que le contenu de l’intégralité du répertoire personnel n’utilise que 44K de l’espace disponible.

Étape 6 — Test de l’accès NFS

Ensuite, testez l’accès aux partages en écrivant quelque chose dans chacun d’eux.

Exemple 1 : Le partage à usage général

Tout d’abord, écrivez un fichier de test dans le partage /var/nfs/general :

  1. sudo touch /nfs/general/general.test

Ensuite, vérifiez sa propriété :

  1. ls -l /nfs/general/general.test
Output
-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test

Étant donné que vous avez monté ce volume sans modifier le comportement par défaut de NFS et avez créé le fichier en tant qu’utilisateur client du root via la commande sudo, la propriété du fichier est définie par défaut sur nobody:nogroup. Les superutilisateurs client ne pourront pas effectuer d’actions administratives typiques, telles que changer le propriétaire d’un fichier ou créer un nouveau répertoire pour un groupe d’utilisateurs, sur ce partage monté via NFS.

Exemple 2 : Le partage du répertoire personnel

Pour comparer les autorisations du partage à usage général avec celles du partage du répertoire personnel, créez un fichier dans /nfs/home de la même manière :

  1. sudo touch /nfs/home/home.test

Ensuite, examinez la propriété du fichier :

  1. ls -l /nfs/home/home.test
Output
-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test

Vous avez créé home.test en tant que root en utilisant la commande sudo, exactement de la même manière que vous avez créé le fichier general.test. Cependant, dans ce cas, il est détenu par root car vous avez outrepassé le comportement par défaut lorsque vous avez spécifié l’option no_root_squash sur ce montage. Cela permet à vos utilisateurs root sur la machine client d’agir en tant que root et facilite beaucoup l’administration des comptes d’utilisateurs. En même temps, cela signifie que vous n’avez pas à donner à ces utilisateurs l’accès root sur l’hôte.

Étape 7 — Montage des répertoires NFS distants au démarrage

Vous pouvez monter automatiquement les partages NFS distants au démarrage en les ajoutant au fichier /etc/fstab sur le client.

Ouvrez le fichier suivant avec des privilèges root dans votre éditeur de texte préféré :

  1. sudo nano /etc/fstab

A la fin du fichier, ajoutez une ligne pour chacun de vos partages, comme suit :

/etc/fstab
. . .
203.0.113.0:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home       /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Note : Vous pouvez trouver plus d’informations sur les options spécifiées ici dans la page de manuel NFS man. Vous pouvez y accéder en exécutant la commande suivante :

  1. man nfs

Le serveur client montera automatiquement les partitions distantes au démarrage, bien que cela puisse prendre quelques instants pour établir la connexion et rendre les partages disponibles.

Étape 8 — Démontage d’un partage distant NFS

Si vous ne souhaitez plus que le répertoire distant soit monté sur votre système, vous pouvez le démonter en sortant de la structure de répertoire du partage et en le démontant.

Changez d’abord dans le répertoire principal :

  1. cd ~

Ensuite, démontez /nfs/home. Notez que la commande se nomme umount et non unmount comme vous pourriez vous y attendre :

  1. sudo umount /nfs/home

Ensuite, démontez /nfs/general :

  1. sudo umount /nfs/general

Cela supprimera les partages distants, ne laissant que votre stockage local accessible :

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.5M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

Si vous souhaitez également les empêcher d’être remontés au prochain démarrage, modifiez /etc/fstab et supprimez la ligne ou commentez-la en plaçant un caractère # au début de la ligne. Vous pouvez également empêcher le montage automatique en supprimant l’option auto, ce qui vous permettra de le monter manuellement.

Conclusion

Dans ce tutoriel, vous avez créé un hôte NFS et illustré certains comportements clés de NFS en créant deux montages NFS différents, que vous avez partagés avec votre client NFS. Si vous envisagez de mettre en œuvre NFS en production, il est important de noter que le protocole lui-même n’est pas crypté. Dans les cas où vous partagez des fichiers sur un réseau privé, cela peut ne pas poser de problème. Dans d’autres cas, un VPN ou un autre type de tunnel crypté sera nécessaire pour protéger vos données. Notez que cela entraîne souvent une réduction significative des performances. Si la performance est un problème, envisagez d’utiliser SSHFS.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04