Table des matières
Étape 1 — Téléchargement et installation des composants
Étape 2 — Création des répertoires de partage sur l’hôte
Exemple 1 : Exportation d’un montage à usage général
Exemple 2 Exportation du répertoire d’accueil
Étape 3 — Configuration des exportations NFS sur le serveur hôte
Étape 4 — Réglage du pare-feu sur l’hôte
Étape 5 — Création de points de montage et de répertoires de montage sur le client
Exemple 1 : Partage à usage général
Exemple 2 : Partage du répertoire d’accueil
Étape 7 — Montage des répertoires NFS à distance au démarrage
Étape 8 — Démontage d’un partage distant NFS
NFS, ou Network File System, 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 autre emplacement et d’y écrire depuis plusieurs clients. NFS fournit un moyen relativement standard et performant d’accéder à des systèmes distants sur réseau, et fonctionne bien dans les situations où un accès régulier aux ressources partagées est nécessaire.
Dans ce guide, nous allons voir comment installer le logiciel nécessaire à la fonctionnalité NFS sur Ubuntu 20.04, configurer deux montages NFS sur un serveur et un client, et monter et démonter les partages distants.
Nous utiliserons deux serveurs dans ce tutoriel, l’un partageant une partie de son système de fichiers avec l’autre. Pour suivre ce tutoriel, vous aurez besoin de :
•Deux serveurs Ubuntu 20.04. Chacun d’entre eux doit avoir un utilisateur non root avec des privilèges sudo, un pare-feu configuré avec UFW, et un réseau privé, si vous en avez la possibilité.
•Pour obtenir de l’aide pour configurer un utilisateur non root avec des privilèges sudo et un pare-feu, suivez notre guide de configuration initiale du serveur avec Ubuntu 20.04.
•Si vous utilisez les DigitalOcean Droplets pour votre serveur et votre client, vous pouvez en savoir plus sur la mise en place d’un réseau privé dans notre documentation sur la manière de créer un VPC.
Tout au long de ce tutoriel, nous faisons référence au serveur qui partage ses répertoires comme étant l’hôte et au serveur qui monte ces répertoires comme étant le client. Vous devrez connaître l’adresse IP de ces deux serveurs. Assurez-vous d’utiliser l’adresse de réseau privée, si elle est disponible.
Tout au long de ce tutoriel, nous ferons référence à ces adresses IP par les substituants host_ip et client_ip. Veuillez les remplacer si nécessaire.
Nous commencerons par installer les composants nécessaires sur chaque serveur.
Sur le serveur hôte, installez le paquet nfs-kernel-server, qui vous permettra de partager vos répertoires. Comme c’est la première opération que vous effectuez avec apt dans cette session, rafraîchissez l’index de votre paquet local avant l’installation :
sudo apt update
sudo apt install nfs-kernel-server
Une fois que ces paquets sont installés, accédez au serveur client.
Sur le serveur client, nous devons installer un paquet appelé nfs-common, qui fournit la fonctionnalité NFS sans inclure aucun composant serveur. Encore une fois, rafraîchissez l’index local du paquet avant l’installation pour vous assurer que vous disposez d’informations à jour :
sudo apt update
sudo apt install nfs-common
sudo pacman -S nfs-utils # client archlinux
Maintenant que les deux serveurs disposent des paquets nécessaires, nous pouvons commencer à les configurer.
Nous allons partager deux répertoires séparés, avec des paramètres de configuration différents, afin d’illustrer deux façons principales dont les montages NFS peuvent être configurés en tenant compte de l’accès des super utilisateurs.
Les super-utilisateurs peuvent faire n’importe quoi n’importe où sur leur système. Cependant, les répertoires montés par 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 qui nécessitent des privilèges de super-utilisateur. Cette restriction par défaut signifie que les super-utilisateurs sur le client ne peuvent pas écrire des fichiers en tant que root, réassigner la propriété, ou effectuer toute autre tâche de super-utilisateur sur le montage NFS.
Parfois, cependant, il existe des utilisateurs de confiance sur le système client qui doivent effectuer ces actions sur le système de fichiers monté mais qui n’ont pas besoin d’un accès super-utilisateur sur l’hôte. Vous pouvez configurer le serveur NFS pour permettre 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 hôte.
Dans le premier exemple, nous allons créer un montage NFS polyvalent qui utilise le comportement par défaut de NFS pour rendre difficile pour un utilisateur ayant les privilèges root sur la machine cliente d’interagir avec l’hôte en utilisant ces privilèges de super-utilisateur client. Vous pourriez utiliser quelque chose de ce genre 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 un espace permettant aux utilisateurs de partager facilement des fichiers de projet.
Tout d’abord, créez le répertoire de partage :
sudo mkdir /var/nfs/general -p
Comme nous le créons avec sudo, le répertoire appartient à l’utilisateur root de l’hôte :
ls -la /var/nfs/general
Output
drwxr-xr-x 2 root root 4096 May 14 18:36 .
Par mesure de sécurité, NFS traduira toutes les opérations root sur le client par les identifiants nobody:nogroup. Par conséquent, nous devons modifier la propriété du répertoire pour qu’il corresponde à ces identifiants.
sudo chown nobody:nogroup /var/nfs/general
Vous êtes maintenant prêt à exporter ce répertoire.
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 l’accès dont ils ont besoin pour gérer les utilisateurs de manière pratique.
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 modifierons pas non plus les autorisations. Si nous le faisions, cela pourrait entraîner toute une série de problèmes pour quiconque possède un répertoire home sur la machine hôte.
Ensuite, nous allons nous plonger dans le fichier de configuration NFS pour configurer le partage de ces ressources.
Sur la machine hôte, 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. Assurez-vous de modifier le champ représenté ici par votre adresse IP réelle
/etc/exports
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(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 signifie chacune de ces options :
•rw : cette option donne à l’ordinateur client un accès en lecture et en écriture au volume.
•sync : cette option oblige NFS à écrire les modifications sur le disque avant de répondre. Il en résulte un environnement plus stable et plus cohérent puisque 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 encore 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 la plupart des cas, il est préférable de désactiver la vérification des sous-arborescences.
•no_root_squash : par défaut, NFS traduit les requêtes d’un utilisateur root à distance en un utilisateur non privilégié sur le serveur. Cette fonction a été conçue comme un dispositif de sécurité pour empêcher un compte racine sur le client d’utiliser le système de fichiers de l’hôte comme racine. 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 parts disponibles aux clients que vous avez configurés, redémarrez le serveur NFS avec la commande suivante :
sudo systemctl restart nfs-kernel-server
Cependant, avant de pouvoir utiliser les nouveaux partages, vous devez vous assurer que le trafic vers les partages est autorisé par les règles du pare-feu.
Tout d’abord, vérifions l’état du pare-feu pour voir s’il est activé et, si c’est le cas, pour voir ce qui est actuellement autorisé :
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é, nous devrons donc ajouter une règle pour le trafic NFS.
Pour 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. Les meilleures pratiques recommandent 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ù, nous nous montrerons spécifiques.
Utilisez la commande suivante pour ouvrir le port 2049 sur l’hôte, en vous assurant de substituer l’adresse IP de votre client :
sudo ufw allow from client_ip to any port nfs
Vous pouvez vérifier le changement en saisissant :
sudo ufw status
Vous devriez voir le trafic autorisé à partir du 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 le trafic NFS que sur le port 2049 de notre ordinateur 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 l’hôte que nous voulons partager dans des répertoires vides sur le client.
Remarque : s’il existe des fichiers et des répertoires dans votre point de montage, ils seront caché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 qui existe déjà, ce répertoire est bien vide.
Nous allons créer deux répertoires pour nos montages :
sudo mkdir -p /nfs/general
sudo mkdir -p /nfs/home
Maintenant que nous disposons d’un emplacement pour placer les partages distants et que nous avons ouvert le pare-feu, nous pouvons monter les partages en utilisant l’adresse IP de notre serveur hôte :
sudo mount host_ip:/var/nfs/general /nfs/general
sudo mount host_ip:/home /nfs/home
Ces commandes monteront les partages de l’ordinateur hôte sur la machine cliente. Vous pouvez vérifier de plusieurs façons que le montage a réussi. Vous pouvez le vérifier avec une commande mount ou findmnt, mais df -h fournit une sortie plus lisible :
df -h
Output
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general
10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home
Les deux partages que nous avons montés apparaissent en bas. Comme ils ont été montés à partir du même système de fichiers, ils présentent 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 disque du et le chemin du montage. L’indicateur -s fournit un résumé de l’utilisation plutôt que d’afficher l’utilisation pour chaque fichier. L’indicateur -h génère une sortie lisible par l’utilisateur.
Par exemple :
du -sh /nfs/home
Output
36K /nfs/home
Ceci nous montre que le contenu de l’ensemble du répertoire d’accueil n’utilise que 36 K de l’espace disponible.
Ensuite, testons l’accès aux partages en écrivant quelque chose à chacune d’entre eux.
Tout d’abord, créez un fichier test dans 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
Comme nous avons monté ce volume sans modifier le comportement par défaut de NFS et que nous avons créé le fichier en tant qu’utilisateur root de la machine cliente via la commande sudo, la propriété du fichier est par défaut nobody:nogroup. Les super-utilisateurs clients ne pourront pas effectuer des actions administratives typiques (comme le changement de propriétaire d’un fichier ou la création d’un nouveau répertoire pour un groupe d’utilisateurs) sur ce partage monté par NFS.
Pour comparer les autorisations du partage d’usage général avec le partage de répertoire d’accueil, créez un fichier dans /nfs/home de la même manière :
sudo touch /nfs/home/home.test
Ensuite, examinez 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 en utilisant la commande sudo, exactement de la même manière que nous avons créé le fichier general.test. Cependant, dans ce cas, il est la propriété de la racine, car nous avons remplacé 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 utilisateurs beaucoup plus pratique. En même temps, cela signifie que nous n’avons pas besoin de donner à ces utilisateurs un accès root sur l’hôte.
Nous pouvons monter automatiquement les partages NFS distants au démarrage en les ajoutant au fichier /etc/fstab sur le client.
Ouvrez ce fichier avec des privilèges root dans votre éditeur de texte :
sudo nano /etc/fstab
En bas du fichier, ajoutez une ligne pour chacun de nos partages. Ils ressembleront à ceci :
/etc/fstab
. . .
host_ip:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Note : Vous pouvez trouver plus d’informations sur les options que nous spécifions ici dans la page man de NFS. Vous pouvez y accéder en exécutant la commande suivante :
man nfs
Le client montera automatiquement les partitions distantes au démarrage, bien que cela puisse prendre quelques instants pour établir la connexion et pour que les partages soient disponibles.
Cette procédure montre comment monter un système de fichiers à la demande en utilisant les unités automount de systemd lorsque le point de montage est défini par une unité de montage. Vous devez ajouter une unité automount pour chaque montage et l'activer.
Procédure
1.Créez une unité de montage. Par exemple :
mount-nfs-general.mount
[Mount]
What=host_ip:/var/nfs/general
Where=/nfs/general
Type=nfs
2.Créer un fichier d'unité avec le même nom que l'unité de montage, mais avec l'extension .automount
3.Ouvrez le fichier et créez une section [Automount]. Définissez l'option Where= avec le chemin de montage :
[Automount]
Where=/nfs/general
[Install]
WantedBy=multi-user.target
4.Chargez les unités nouvellement créées pour que votre système enregistre la nouvelle configuration :
# systemctl daemon-reload
5.Activez et démarrez l'unité automount à la place :
# systemctl enable --now mount-nfs-general.automount
Vérification
1.Vérifiez que mount-point.automount fonctionne :
# systemctl status mount-nfs-general.automount
2.Vérifier que le répertoire monté automatiquement a le contenu souhaité :
# ls /nfs/general
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 du répertoire de partage et en le démontant, comme ceci :
cd ~
sudo umount /nfs/home
sudo umount /nfs/general
Notez que la commande est nommée umount et non unmount, comme vous pourriez vous y attendre.
Cela supprimera les partages distants, ne laissant accessible que votre stockage local :
df -h
Output
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
Si vous voulez également éviter qu’ils ne soient remontés au prochain redémarrage, éditez /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 remontage automatique en supprimant l’option auto, ce qui vous permettra de toujours pouvoir le monter manuellement.
Dans ce tutoriel, nous avons créé un hôte NFS et illustré certains comportements clés du NFS en créant deux montages NFS différents, que nous avons partagés avec un client NFS.
Si vous cherchez à implémenter NFS en production, il est important de souligner que le protocole lui-même n’est pas crypté. Dans les cas de partage sur un réseau privé, cela ne devrait pas poser de problème. Dans les autres cas, un VPN ou un autre type de tunnel crypté sera nécessaire pour protéger vos données