Comment configurer un montage NFS sur Ubuntu 16.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 à des systèmes distants via un réseau et fonctionne bien dans les situations où les ressources partagées seront accédées régulièrement.

Dans ce guide, nous expliquerons comment configurer les montages NFS.

Conditions préalables

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

Tout au long du didacticiel, nous nous référons au serveur qui partage ses répertoires en tant quehost et au serveur qui monte ces répertoires en tant queclient. Afin de les garder droites, nous utiliserons les adresses IP suivantes en tant que remplaçants pour les valeurs de l'hôte et du client:

  • Host: 203.0.113.0

  • Client: 203.0.113.256

Vous devez remplacer ces valeurs par vos propres adresses IP d'hôte et de client.

[[step-1 -—- téléchargement-et-installation-des-composants]] == É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, nous installerons le packagenfs-kernel-server, qui nous permettra de partager nos répertoires. Comme il s'agit de la première opération que nous effectuons avecapt dans cette session, nous actualiserons notre index de package local avant l'installation:

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

Une fois ces packages installés, basculez vers 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 serveur inutiles. Encore une fois, nous actualiserons l'index de paquetage local avant l'installation pour nous assurer que nous avons les informations à jour:

sudo apt-get update
sudo apt-get install nfs-common

Maintenant que les deux serveurs disposent des packages nécessaires, nous pouvons commencer à les configurer.

[[step-2 -—- creation-the-share-directory-on-the-host]] == É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 super-utilisateurs du client ne peuvent pas écrire de fichiers en tant que root, réaffecter des droits de propriété ou effectuer d'autres tâches de super-utilisateur sur le montage NFS.

Cependant, il arrive parfois que des utilisateurs de confiance sur le système client aient besoin de pouvoir effectuer ces opérations sur le système de fichiers monté, mais qu’ils n’aient pas besoin d’un accès superutilisateur sur l’hôte. Le serveur NFS peut être configuré pour permettre cela, bien que cela introduise un élément de risque, car un tel utilisateurcould obtient un accès root à tout le 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 pour rendre difficile pour un utilisateur disposant de privilèges root sur la machine cliente d'interagir avec l'hôte à l'aide de ces privilèges superutilisateur. Vous pouvez utiliser quelque chose comme ceci pour stocker les 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.

Tout d'abord, créez un répertoire de partage appelénfs:

sudo mkdir /var/nfs/general -p

Puisque nous le créons avecsudo, le répertoire appartient à root ici sur l'hôte.

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

NFS traduira toutes les opérationsroot sur le client en informations d'identificationnobody:nogroup comme 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

Ce répertoire est maintenant prêt pour l'exportation.

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 disponibles sur les serveurs clients, tout en permettant aux administrateurs de confiance de ces serveurs clients d'accéder aux informations nécessaires 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 nousdid, cela entraînerait toutes sortes de problèmes pour quiconque possède un répertoire personnel sur la machine hôte.

[[step-3 -—- configuration-the-nfs-exports-on-the-host-server]] == É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

directory_to_share    client(share_option1,...,share_optionN)

Nous devrons créer une ligne pour chacun des répertoires que nous prévoyons de partager. Puisque notre exemple de client a une adresse IP de203.0.113.256, nos lignes ressembleront à ce qui suit. Assurez-vous de changer les adresses IP pour qu'elles correspondent à votre client:

/etc/exports

/var/nfs/general    203.0.113.256(rw,sync,no_subtree_check)
/home       203.0.113.256(rw,sync,no_root_squash,no_subtree_check)

Nous utilisons les mêmes options de configuration pour les deux répertoires à l'exception deno_root_squash. Voyons ce que chacun signifie.

  • rw: cette option donne à l'ordinateur client 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 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 de sous-arborescence, qui est un processus où l'hôte doit vérifier si le fichier est réellement toujours disponible dans l'arborescence exportée pour chaque requête. 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 à distance les demandes d'un utilisateur root en un utilisateur non privilégié sur le serveur. Ceci était 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 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.

[[step-4 -—- Adjusting-the-firewall-on-the-host]] == É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é. Nous devons donc ajouter une règle pour le trafic NFS.

Avec de nombreuses applications, vous pouvez utilisersudo ufw app list et les activer par leur nom, maisnfs n'en fait pas partie. Parce queufw 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 203.0.113.256 to any port nfs

Vous pouvez vérifier le changement en tapant:

sudo ufw status

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

OutputStatus: active

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

Ceci confirme que UFW n'autorise le trafic NFS que sur notre port client sur le port 2049.

[[step-5 -—- creation-the-mount-points-on-the-client]] == Étape 5 - Création des points 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 le répertoire de l'hôte sur un répertoire du client vide.

[.note] #Note: S'il y a des fichiers et des répertoires dans votre point de montage, dès que vous montez le partage NFS, ils seront masqués. Assurez-vous que si vous montez dans un répertoire qui existe déjà, le répertoire est vide.
#

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

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

[[step-6 -—- montage-des-répertoires-sur-le-client]] == Étape 6 - Montage des répertoires sur le client

Maintenant que nous avons un endroit 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 est203.0.113.0, comme ceci:

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

Ces commandes doivent monter 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 manières. Vous pouvez vérifier cela avec une simple commandemount oufindmnt, maisdf -h vous donnera une sortie plus lisible par l'homme 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
203.0.113.0:/home      20G  1.2G   18G   7% /nfs/home
203.0.113.0:/var/nfs/general   20G  1.2G   18G   7% /nfs/general

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 combien d'espace est réellement utilisé sous chaque point de montage, utilisez la commande d'utilisation du disquedu et le chemin du montage. L'indicateur-s fournira un résumé de l'utilisation plutôt que d'afficher l'utilisation pour chaque fichier. Le-h imprimera 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 utilise seulement 20K de l’espace disponible.

[[step-7 -—- testing-nfs-access]] == Étape 7 - 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

Tout d'abord, écrivez 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

Étant donné que 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 cliente via la commandesudo, la propriété du fichier par défaut est nobody: nogroup. Les superutilisateurs clients ne pourront pas effectuer d’actions administratives classiques, telles que le changement du propriétaire d’un fichier ou la création d’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 root via la commandesudo, exactement de la même manière que nous avons créé le fichiergeneral.test. Cependant, dans ce cas, il appartient à root car nous avons remplacé le comportement par défaut lorsque nous avons spécifié l'optionno_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 l’hôte.

[[step-8 -—- montage-des-répertoires-nfs-distants-au-démarrage]] == Étape 8 - Montage des 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, nous allons ajouter une ligne pour chacune de nos actions. Ils vont ressembler à ceci:

/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] #Note: Vous trouverez plus d'informations sur les options que nous spécifions ici dans la page de manuel qui décrit le montage NFS dans lesfstab avec la commandeman nfs.
#

Le serveur client monte automatiquement les partitions distantes au démarrage, bien que la connexion puisse être établie et que les partages soient disponibles.

[[step-9 -—- unmounting-an-nfs-remote-share]] == Étape 9 - 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é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 les empêcher d'être remontés au prochain redémarrage, modifiez/etc/fstab et supprimez la ligne ou commentez-la en plaçant un symbole # au début de la ligne. Vous pouvez également empêcher le montage automatique en supprimant l'optionauto, 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 pas de 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 perte de performance sérieuse. Si les performances sont un problème, considérezSSHFS. 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.

Related