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:
-
Deux serveurs Ubuntu 18.04. Chacun de ceux-ci devrait avoir un utilisateur non * root * avec les privilèges
+ sudo +
configurés, un pare-feu simple configuré avec UFW et une mise en réseau privée, si elle est disponible. -
Pour obtenir de l’aide pour configurer un utilisateur non * root * avec les privilèges
+ sudo +
et un pare-feu, suivez notre https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 Guide [Configuration initiale du serveur avec Ubuntu 18.04]. -
Pour obtenir de l’aide sur la configuration d’un réseau privé, voir Comment configurer et utiliser le réseau privé DigitalOcean .
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.