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.-
Pour obtenir de l’aide pour configurer un utilisateur non root avec des privilèges
sudo
et un pare-feu, suivez notre guide Configuration Initiale du Serveur avec Ubuntu 18.04. -
Si vous utilisez des gouttes DigitalOcean pour votre serveur et votre client, lisez Comment Créer un VPC pour configurer un réseau privé.
-
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 :
Ensuite, installez le paquet :
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 :
Ensuite, installez le paquet :
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é :
Étant donné que vous le créez avec sudo
, le répertoire est possédé par l’utilisateur root de l’hôte:
Outputtotal 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:
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
:
Le fichier contient des commentaires montrant la structure générale de chaque ligne de configuration. La syntaxe est la suivante:
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:
/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 :
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é :
OutputStatus: 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:
Vous pouvez vérifier le changement en exécutant ce qui suit:
Vous devriez recevoir une liste de trafic autorisé depuis le port 2049
dans la sortie:
OutputStatus: 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::
Ensuite, exécutez cette commande pour créer le second::
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
:
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:
OutputFilesystem 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:
Output44K /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
:
Ensuite, vérifiez sa propriété :
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 :
Ensuite, examinez la propriété du fichier :
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é :
A la fin du fichier, ajoutez une ligne pour chacun de vos partages, comme suit :
. . .
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 :
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 :
Ensuite, démontez /nfs/home
. Notez que la commande se nomme umount
et non unmount
comme vous pourriez vous y attendre :
Ensuite, démontez /nfs/general
:
Cela supprimera les partages distants, ne laissant que votre stockage local accessible :
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