Comment configurer un montage NFS sur Ubuntu 18.04

introduction

NFS, ou système de fichiers 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 un espace de stockage dans un emplacement différent et d’écrire sur cet espace à partir de plusieurs clients. NFS fournit un moyen relativement rapide et facile d’accéder aux systèmes distants via un réseau et fonctionne bien dans les situations où les ressources partagées doivent être accédées régulièrement.

Dans ce guide, nous verrons comment installer les composants nécessaires à la fonctionnalité NFS, configurer les montages NFS et démonter un partage NFS distant.

Conditions préalables

Nous allons utiliser deux serveurs dans ce tutoriel, l’un partageant son système de fichiers avec l’autre. Pour suivre, vous aurez besoin de:

Tout au long de ce didacticiel, nous faisons référence au serveur qui partage ses répertoires en tant que * hôte * et au serveur qui monte ces répertoires en tant que * client *. Pour les conserver correctement, nous allons utiliser les adresses IP suivantes comme remplaçants pour les valeurs * host * et * 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, vous devrez les remplacer par vos propres adresses IP * hôte * et * client * respectives.

Étape 1 - Téléchargement et installation des composants

Nous allons commencer par installer les composants nécessaires sur chaque serveur.

Sur l’hôte

Sur le serveur * hôte *, installez le paquetage + nfs-kernel-server +, qui vous permettra de partager vos répertoires. Comme il s’agit de la première opération que vous effectuez avec + apt + dans cette session, actualisez l’index de votre package local avant l’installation:

sudo apt update
sudo apt install nfs-kernel-server

Une fois ces packages installés, passez sur le serveur * client *.

Sur le client

Sur le serveur * client *, nous devons installer un package appelé + nfs-common +, qui fournit la fonctionnalité NFS sans inclure les composants de serveur inutiles. Encore une fois, actualisez l’index de package local avant l’installation pour vous assurer que vous disposez des informations à jour:

sudo apt update
sudo apt install nfs-common

Maintenant que les deux serveurs disposent des packages nécessaires, nous pouvons 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 manières principales de configurer les montages NFS en ce qui concerne l’accès superutilisateur.

Les super-utilisateurs peuvent tout faire n’importe où sur leur système. Toutefois, les répertoires montés sur NFS ne faisant pas partie du système sur lequel ils sont montés, le serveur NFS refuse par défaut d’exécuter 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 * racine *, réaffecter la propriété ou effectuer toute autre tâche de superutilisateur sur le montage NFS.

Cependant, il arrive parfois que des utilisateurs de confiance sur le système * client * aient besoin d’effectuer ces actions sur le système de fichiers monté, mais qu’ils n’aient pas besoin d’un accès superutilisateur sur * l’hôte *. Vous pouvez configurer le serveur NFS pour autoriser cette opération, bien que cela introduise un élément de risque, de sorte qu’un utilisateur peut puisse obtenir un accès root à l’ensemble du système * hôte *.

Exemple 1: exportation d’un montage à usage général

Dans le premier exemple, nous allons créer un montage NFS à usage général qui utilise le comportement NFS par défaut, ce qui rend difficile pour un utilisateur disposant de privilèges root sur l’ordinateur * client * d’interagir avec * l’hôte * à l’aide de ces privilèges * client *. . Vous pouvez utiliser quelque chose comme ceci pour stocker des fichiers téléchargés à l’aide d’un système de gestion de contenu ou pour créer un espace permettant aux utilisateurs de partager facilement des fichiers de projet.

Commencez par créer un répertoire de partage appelé + nfs +:

sudo mkdir /var/nfs/general -p

Comme nous le créons avec + sudo +, le répertoire appartient à l’utilisateur * root * de * host *.

ls -la /var/nfs/general
Output4 drwxr-xr-x  2 root   root    4096 Jul 25 15:26 .

NFS traduira toutes les opérations * root * sur le * client * en informations d’identification + nobody: nogroup + en tant que mesure de sécurité. Par conséquent, nous devons modifier la propriété du répertoire pour qu’elle corresponde à ces informations d’identification.

sudo chown nobody:nogroup /var/nfs/general

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

Exemple 2: exportation du répertoire de base

Dans notre deuxième exemple, l’objectif est de rendre les répertoires personnels des utilisateurs stockés sur l’hôte * hôte * sur des serveurs * clients *, tout en permettant aux administrateurs de confiance de ces * clients * serveurs d’accéder à leur compte pour gérer facilement les utilisateurs.

Pour ce faire, nous allons exporter le répertoire + / home. Comme il existe déjà, nous n’avons pas besoin de le créer. Nous ne changerons pas les permissions non plus. Si nous did, cela pourrait poser toute une série de problèmes à quiconque possédant un répertoire personnel sur la machine * hôte *.

Étape 3 - Configuration des exportations NFS sur le serveur hôte

Nous plongerons ensuite dans le fichier de configuration NFS pour configurer le partage de ces ressources.

Ouvrez le fichier + / etc / exports + dans votre éditeur de texte avec les privilèges * root *:

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

   (,,)

Nous devrons créer une ligne pour chacun des répertoires que nous prévoyons de partager. Puisque notre exemple * client * a une adresse IP de «+ 203.0.113.24 +», nos lignes ressembleront à ce qui suit. Assurez-vous de changer l’adresse IP indiquée ici par celle de votre * client *:

/ etc / exports

/var/nfs/general    (rw,sync,no_subtree_check)
/home       (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 +. Voyons ce que chacune de ces options signifie:

  • + rw +: cette option donne à l’ordinateur * client * l’accès en lecture et en écriture au volume.

  • + sync +: cette option oblige NFS à écrire les modifications sur le disque avant de répondre. Cela se traduit par 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 sur les fichiers.

  • + no_subtree_check +: Cette option empêche la vérification des sous-arborescences, processus dans lequel * 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 lorsqu’un 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 * racine * à distance en un utilisateur sans privilège sur le serveur. Ceci était conçu comme une fonction 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 certains partages.

Lorsque vous avez terminé vos modifications, enregistrez et fermez le fichier. Ensuite, pour rendre les partages disponibles aux clients que vous avez configurés, redémarrez le serveur NFS à l’aide de la commande suivante:

sudo systemctl restart nfs-kernel-server

Avant de pouvoir utiliser les nouveaux partages, vous devez toutefois vous assurer que le trafic sur les partages est autorisé par les règles de pare-feu.

Étape 4 - Réglage du pare-feu sur l’hôte

Commençons par vérifier l’état du pare-feu pour voir s’il est activé et, le cas échéant, ce qui est actuellement autorisé:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Sur notre système, seul le trafic SSH est autorisé à passer. Nous devons donc 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, nous pouvons toujours ajouter NFS par nom. La meilleure pratique vous recommande d’activer la règle la plus restrictive qui permette toujours le trafic que vous souhaitez autoriser. Ainsi, plutôt que de l’activer, n’importe où, nous serons spécifiques.

Utilisez la commande suivante pour ouvrir le port + 2049 + sur * l’hôte *, en vous assurant de remplacer l’adresse IP de votre * client *:

sudo ufw allow from  to any port nfs

Vous pouvez vérifier le changement en tapant:

sudo ufw status

Vous devriez voir le trafic autorisé du port + 2049 + dans la sortie:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
2049                       ALLOW
OpenSSH (v6)               ALLOW       Anywhere (v6)

Cela confirme que UFW n’autorise le trafic NFS que sur notre port * client * sur le port + 2049 +.

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

Maintenant que le serveur * hôte * est configuré et sert ses partages, nous allons préparer notre * client *.

Afin de rendre les partages distants disponibles sur le * client *, nous devons monter les répertoires sur le * hôte * que nous voulons partager dans des répertoires vides sur le * client *.

Nous allons créer deux répertoires pour nos supports:

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

Maintenant que nous avons un emplacement pour placer les partages distants et que nous avons ouvert le pare-feu, nous pouvons monter les partages en adressant notre serveur * hôte *, qui dans ce guide est + 203.0.113.0 +:

sudo mount :/var/nfs/general /nfs/general
sudo mount :/home /nfs/home

Ces commandes monteront les partages de l’ordinateur hôte sur la machine * client *. Vous pouvez vérifier qu’ils ont été montés avec succès de plusieurs manières. Vous pouvez vérifier cela avec une commande simple + 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:

df -h
OutputFilesystem                Size  Used Avail Use% Mounted on
udev                      238M     0  238M   0% /dev
tmpfs                      49M  628K   49M   2% /run
/dev/vda1                  20G  1.2G   18G   7% /
tmpfs                     245M     0  245M   0% /dev/shm
tmpfs                     5.0M     0  5.0M   0% /run/lock
tmpfs                     245M     0  245M   0% /sys/fs/cgroup
tmpfs                      49M     0   49M   0% /run/user/0

Les deux actions que nous avons montées 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 voir la quantité d’espace réellement utilisée sous chaque point de montage, utilisez la commande d’utilisation du disque + du + et le chemin du montage. L’indicateur + -s + fournit un résumé de l’utilisation plutôt que l’affichage de l’utilisation de chaque fichier. + -H + imprime une sortie lisible par l’homme.

Par exemple:

du -sh /nfs/home
Output36K /nfs/home

Cela nous montre que le contenu de tout le répertoire de base n’utilise que 36 Ko de l’espace disponible.

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

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

Exemple 1: Partage à usage général

Commencez par écrire un fichier de test sur le partage + / var / nfs / general +:

sudo touch /nfs/general/general.test

Ensuite, vérifiez sa propriété:

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

Dans la mesure où nous avons monté ce volume sans modifier le comportement par défaut de NFS et créé le fichier en tant qu’utilisateur * root * de la machine * client * via la commande + sudo +, la propriété du fichier par défaut est + nobody: nogroup +. * Les utilisateurs superbes * clients 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é sur NFS.

Exemple 2: le partage du répertoire de base

Pour comparer les autorisations du partage polyvalent avec le partage du répertoire de base, créez un fichier de répertoire de base de la même manière:

sudo touch /nfs/home/home.test

Ensuite, regardez la propriété du fichier:

ls -l /nfs/home/home.test
Output-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test

Nous avons créé + home.test en tant que * racine * à l’aide de la commande` + sudo`, exactement comme nous avons créé le fichier + general.test +. Cependant, dans ce cas, il appartient à * root * car nous avons surchargé le comportement par défaut lorsque nous avons spécifié l’option + no_root_squash + sur ce montage. Cela permet à nos utilisateurs * root * sur la * machine * cliente d’agir en tant que * root * et rend l’administration des comptes utilisateur bien plus pratique. En même temps, cela signifie que nous n’avons pas à donner à ces utilisateurs un accès root sur * hôte *.

Étape 7 - Monter les répertoires NFS distants au démarrage

Nous pouvons monter les partages NFS distants automatiquement au démarrage en les ajoutant au fichier + / etc / fstab + sur le * client *.

Ouvrez ce fichier avec les privilèges root dans votre éditeur de texte:

sudo nano /etc/fstab

Au bas du fichier, ajoutez une ligne pour chacune de nos actions. Ils vont ressembler à ceci:

/ etc / fstab

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

Le * client * serveur montera automatiquement les partitions distantes au démarrage, bien que l’établissement de la connexion et de la disponibilité des partages puisse prendre quelques instants.

Étape 8 - Démontage d’un partage à distance 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épertoires du partage et en le démontant, comme suit:

cd ~
sudo umount /nfs/home
sudo umount /nfs/general

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

df -h
Output
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  320K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user

Si vous souhaitez également empêcher leur remontage lors du prochain redémarrage, éditez + / etc / fstab + et supprimez la ligne ou mettez-la en commentaire en plaçant un symbole # 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, nous avons créé un hôte NFS et illustré quelques comportements clés de NFS en créant deux montages NFS différents, que nous avons partagés avec notre client NFS *. Si vous souhaitez implémenter NFS en production, il est important de noter que le protocole lui-même n’est pas chiffré. Dans les cas où vous partagez des fichiers destinés à être accessibles au public, cela ne pose aucun problème grave.

Si vous utilisez NFS pour des données privées, vous devrez toutefois décider de la manière dont vous souhaitez protéger ces données. Vous pourrez peut-être acheminer NFS via SSH ou une connexion VPN pour créer une expérience plus sécurisée, mais cela entraîne souvent une réduction importante des performances. Si les performances posent problème, envisagez SSHFS. Il est légèrement plus lent que le trafic NFS non chiffré, mais généralement beaucoup plus rapide que le NFS tunnel. Le chiffrement authentifié par Kerberos pour NFS est une autre option à explorer.