Le Network File System (NFS) est une solution de stockage distribué. C’est un protocole de système de fichiers qui permet de monter des répertoires distants sur le serveur local et de les utiliser comme s'il s'agissait d'un stockage local. NFS permet à plusieurs clients de partager un stockage distant. Il est particulièrement adapté aux environnements qui nécessitent régulièrement des ressources partagées. NFS est basé sur le système ONC RPC (Open Network Computing Remote Procedure Call). C’est un standard ouvert défini dans les RFC (Request for Comments). Cela permet à quiconque d'implémenter le protocole.
Dans ce guide, nous allons passer en revue les étapes de configuration et de paramétrage d'un montage NFS sur Ubuntu 20.04.
Prérequis
Comme le suggère la description de NFS, la configuration de NFS comporte deux parties :
-
Hôte : Stocke physiquement les données et partage le stockage avec les systèmes « clients ».
-
Client : Le système qui se connecte à l'« hôte » et utilise le stockage distant comme s'il était local.
Pour notre démonstration, nous utiliserons deux serveurs, tous deux configurés avec Ubuntu 20.04. Voici un guide simple sur la configuration de votre serveur Ubuntu. Tout au long de ce guide, ces serveurs seront appelés hôte et client. Notez que l'action pour le client sera la même, même s'il y en a plusieurs.
Les adresses IP suivantes sont attribuées aux serveurs. Ces serveurs sont hébergés par CloudSigma:
-
hôte: 31.171.240.79
-
client: 31.171.250.109
Veillez à les remplacer par les adresses IP appropriées.
Installation de NFS
NFS est facilement disponible dans les dépôts officiels d'Ubuntu. Il existe différents paquets logiciels pour l' hôte et le client systèmes.
-
Installation de NFS sur l'hôte
Sur l'hôte, nous avons besoin des composants qui permettent à la machine de servir d' hôte. Cela se présente sous la forme du paquet nfs-kernel-server. Ubuntu utilise APT comme gestionnaire de paquets. Tout d'abord, lancez le terminal et mettez à jour la base de données des paquets APT :
|
1 |
hôte$ sudo apt update |

Ensuite, installez le paquet nfs-kernel-server. Si nécessaire, APT se chargera de toutes les dépendances supplémentaires :
|
1 |
hôte$ sudo apt install nfs-kernel-server |

-
Installation de NFS sur le client
Sur le système client, nous avons besoin de la fonctionnalité permettant de se connecter aux répertoires de l' hôte via le réseau. Il n'a pas besoin de la fonctionnalité de serveur NFS. Sur Ubuntu, elle est regroupée dans le paquet nfs-common. Mettez à jour la base de données des paquets APT :
|
1 |
client$ sudo apt update |

Ensuite, installez le paquet nfs-common :
|
1 |
$ sudo apt install nfs-common |

Répertoires partagés sur l'hôte
Ensuite, nous allons partager deux répertoires distincts, chacun avec une configuration différente. Nous allons faire la démonstration de deux manières clés dont les montages NFS fonctionnent par rapport à l'accès superutilisateur. Par défaut, les superutilisateurs ont l'autorité nécessaire pour effectuer n'importe quelle action sur l'ensemble du système. Cependant, les répertoires montés via NFS ne font pas partie du système sur lequel ils sont montés. Le serveur NFS refusera d'effectuer toute opération nécessitant des privilèges de superutilisateur. Cette restriction se traduit par le fait que les clients n'ont aucune autorité pour écrire, réattribuer des propriétés et effectuer d'autres tâches de superutilisateur sur les montages NFS.
Il est possible d'autoriser certains utilisateurs de confiance à effectuer ces tâches sur les systèmes de fichiers montés. Cependant, cela comporte un certain risque, car un tel client peut potentiellement obtenir un accès complet à l' hôte. Cela peut être atténué par une gestion appropriée des permissions des utilisateurs. Sous Linux, le fichier sudoers contrôle tous les privilèges des utilisateurs sur le système. Pour plus d'informations, vous pouvez consulter notre tutoriel sur la configuration du fichier sudoers sous Linux.
-
Montage à usage général
Le premier exemple sera un montage NFS à usage général avec les comportements NFS par défaut. Avec cette approche, il est extrêmement difficile pour le client d'effectuer des actions de superutilisateur sur les montages. Ce type de montage NFS est couramment déployé pour le stockage de fichiers, le téléversement à l'aide d'un CMS (Content Management System), ou le partage de fichiers de projet, etc.
Les étapes suivantes doivent être effectuées sur le système hôte. Tout d'abord, créez un répertoire à partager nommé nfs:
|
1 |
hôte$ sudo mkdir -pv /var/nfs/general |

Comme le répertoire a été créé avec sudo le privilège, le propriétaire sera root:
|
1 |
$ ls -la /var/nfs/general |

Par défaut, NFS traduira toute opération root du côté client vers les nobody:nogroup identifiants par mesure de sécurité. Par souci de cohérence, modifiez le propriétaire du répertoire pour qu'il corresponde aux identifiants :
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Répertoire personnel
Le deuxième exemple consiste à rendre le répertoire personnel de l'utilisateur host disponible pour les clients. Les administrateurs de confiance des clients sélectionnés peuvent y accéder pour gérer facilement les utilisateurs. Le répertoire /home existe par défaut, il n'est donc pas nécessaire de créer un répertoire. Quant aux permissions du répertoire, il n'est pas nécessaire d'effectuer des modifications car cela causerait plus de problèmes que d'avantages.
Configuration des partages NFS (Exports)
Les répertoires à partager sont maintenant créés. Ensuite, NFS doit être configuré pour les rendre disponibles pour les clients. NFS utilise un fichier de configuration pour suivre les répertoires à partager. Ouvrez le fichier de configuration NFS suivant dans l'éditeur de texte de votre choix :
|
1 |
host$ sudo nano /etc/exports |

La section des commentaires du fichier décrit la structure syntaxique générale de la configuration. En résumé, tout répertoire doit être déclaré au format suivant :
|
1 |
$ <répertoire> <client>(<option_1>,<option_2>,...,<option_N>) |
Pour les deux répertoires que nous avons décidé de partager, la configuration ressemblera à ceci. Les deux répertoires ont presque les mêmes options de configuration :
|
1 2 3 |
host$/var/nfs/general 31.171.250.221(rw,sync,no_subtree_check) host$ /home 31.171.250.221(rw,sync,no_root_squash,no_subtree_check) |

Voici une brève description des options de configuration :
-
rw : Le client bénéficie des autorisations de lecture et d'écriture sur le volume.
-
sync : Force NFS à écrire les modifications sur le disque avant de répondre. Cela offre une expérience plus stable et cohérente. La réponse reflétera l'état réel du volume distant. Cependant, les opérations sur les fichiers seront plus lentes.
-
no_subtree_check : Empêche la vérification des sous-arborescences (subtree checking). Si elle n'est pas désactivée, les hôtes seront contraints de vérifier l'existence du fichier dans l'arborescence exportée pour chaque requête du client. Cela peut entraîner de nombreux problèmes, par exemple, si un fichier est renommé pendant que le client l'utilise. Dans la plupart des cas, il est préférable de désactiver la vérification des sous-arborescences.
-
no_root_squash : Comme mentionné précédemment, NFS traduira toute requête de l'utilisateur root distant en un utilisateur non privilégié. Il s'agit d'une fonctionnalité de sécurité intentionnelle pour empêcher tout accès indésirable au système hôte. Cependant, l'utilisation de cette option désactivera ce comportement.
Enregistrez le fichier de configuration et quittez l'éditeur. Pour que les modifications prennent effet, redémarrez le serveur NFS :
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Ajustement du pare-feu
Pour tout serveur, une configuration correcte du pare-feu est indispensable. En supposant que vous ayez configuré votre serveur Ubuntu 20.04 en conséquence, le pare-feu UFW devrait être actif. C'est un pare-feu simple mais puissant qui est fourni avec la plupart des distributions Linux. Pour les débutants, voici un guide rapide expliquant UFW, son fonctionnement et l'utilisation courante d'UFW avec des exemples.
Par défaut, le pare-feu bloquera tout trafic entrant et sortant. Pour s'assurer que le serveur NFS peut se connecter et échanger du trafic correctement, nous devons ajouter une exception pour le protocole NFS. Tout d'abord, vérifiez l'état du pare-feu. Cela affichera également toutes les règles actuelles :
|
1 |
host$ sudo ufw status |

Comme nous pouvons le voir, seul le trafic SSH est autorisé sur le système. We need to add an exception to allow NFS traffic.
Dans la plupart des cas, il est fortement recommandé d'utiliser la règle la plus restrictive qui permet tout de même le trafic nécessaire. Ainsi, nous n'autoriserons que le ou les clients sélectionnés à se connecter à l'hôte :
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Après cela, vérifiez à nouveau l'état du pare-feu :
|
1 |
host$ sudo ufw status |

Création du point de montage
Le serveur est maintenant prêt à autoriser le système client à se connecter au protocole NFS. Ensuite, nous devons préparer le client. Pour accéder au volume distant, il doit être monté localement sur le client. En ce qui concerne le point de montage, il est recommandé d'utiliser un répertoire vide dédié.
Pour les deux volumes distants, créez deux points de montage distincts :
|
1 |
client$ sudo mkdir -pv /nfs/general |

|
1 |
client$ sudo mkdir -pv /nfs/home |

Maintenant que les points de montage sont prêts, vous devez monter les volumes distants :
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Nous pouvons vérifier si les montages ont réussi. Vérifiez la liste de tous les volumes montés :
|
1 |
client$ df -h |

Voilà ! Les volumes distants sont montés avec succès. Nous pouvons également vérifier l'utilisation de l'espace à l'aide de la commande suivante :
|
1 |
client$ du -sh /nfs/home |

Test de l'accès NFS
Jusqu'à présent, les volumes distants ont été montés correctement. Cependant, cela ne servira à rien si le client ne peut pas lire/écrire de données sur le volume distant. Pour vérifier, créez un fichier factice sur le(s) montage(s) NFS. Ici, le fichier sera créé avec le privilège root pour tester si les configurations spécifiques à root fonctionnent correctement :
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Ensuite, vérifiez le propriétaire du fichier :
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Comme nous pouvons le voir, NFS traduit le propriétaire du fichier en nobody:nogroup. Le répertoire /var/nfs/ general appartient à nobody:nogroup, donc NFS traduit la propriété du fichier. Il est temps de tester l'autre montage NFS :
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Vérifiez l'existence et le propriétaire du fichier :
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

Dans ce cas, NFS n'a pas traduit la propriété du fichier. Ce client a été configuré pour pouvoir effectuer des actions administratives. De plus, le répertoire hôte d'origine /home n'appartient pas à nobody:nogroup.
Astuces supplémentaires
-
Montage au démarrage
Jusqu'à présent, nous devions monter manuellement le volume NFS sur un répertoire local. S'ils ne sont pas démontés, les montages NFS dureront jusqu'au redémarrage du système. Si le volume NFS est utilisé régulièrement, le montage manuel devient extrêmement fastidieux. Dans le cas de montages NFS multiples, il n'est pas pratique de les monter manuellement un par un.
En utilisant le fichier /etc/fstab , nous pouvons automatiser le processus. Pendant le démarrage, ce script montera automatiquement les volumes NFS sur les points de montage cibles. Ouvrez le fichier dans un éditeur de texte :
|
1 |
client$ sudo nano /etc/fstab |

Ajoutez les lignes suivantes pour monter les volumes distants du système hôte :
|
1 2 3 |
client$ 31.171.240.236:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 client$31.171.240.236:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 |

Enregistrez le script et fermez l'éditeur de texte. Au prochain démarrage, Linux montera automatiquement les volumes distants. Notez que le démarrage du système peut prendre un certain temps car il se connecte et monte les volumes.
-
Démontage du volume NFS
Si le volume distant n'est plus nécessaire, le démontage des volumes les supprimera du système client. Avant de procéder au démontage, assurez-vous toutefois qu'aucune application ou script n'utilise le volume distant. Le démontage des montages NFS est similaire au démontage de tout autre montage. Dans ce cas, démontez /nfs/home et /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/général |

Ensuite, vérifiez l'action :
|
1 |
client$ df -h |

Dernières réflexions
Dans ce guide, nous avons créé un serveur NFS et présenté quelques bases du partage à distance NFS. Si vous souhaitez implémenter NFS dans un environnement de production, gardez à l'esprit que le protocole NFS n'est pas chiffré. Cela peut poser des problèmes de sécurité, par exemple des attaques de l'homme du milieu (man-in-the-middle).
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.