• 12 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/22/23

Partagez vos fichiers sur un réseau Linux avec NFS

Dans les chapitres précédents, vous avez vu comment :

  1. monter un serveur,

  2. partitionner les disques

  3. et sécuriser une partition de données en RAID 1.

Vous allez maintenant apprendre à partager des fichiers sur votre réseau local grâce à NFS.

Vous allez utiliser NFS 4 qui apporte beaucoup d’améliorations par rapport aux versions précédentes. Une des plus notables est l’utilisation d’un port TCP unique et configurable là où les versions précédentes utilisaient plusieurs ports TCP, parfois alloués dynamiquement, ce qui rendait difficile l’utilisation de NFS avec un pare-feu.

Le serveur virtuel que vous avez monté n’a pas de pare-feu mais si c’était le cas, le port par défaut alloué à NFSv4 et qu’il faudrait ouvrir serait le port TCP 2049 entrant.

Dans ce chapitre, vous allez partager par NFS les deux partitions de données sous LVM+RAID :

  1. la première servira aux clients à stocker leurs fichiers personnels, comme une extension de leur répertoire/home en ligne ;

  2. la deuxième sera un répertoire partagé commun à tous les utilisateurs.

Voyons ensemble comment configurer le serveur.

Configurez le serveur

Tout d’abord, vous allez créer une arborescence de partage /export dans laquelle seront montés tous les répertoires à partager. Ça n’est pas une étape obligatoire mais plutôt une bonne pratique. Le fait de séparer votre arborescence partagée permet d’avoir une configuration plus claire et offre un niveau de sécurité supérieur :

$ sudo mkdir /export
$ sudo mkdir /export/home
$ sudo mkdir /export/shared

Vous allez monter/var/data1 dans/export/home et/var/data2 dans  /export/shared grâce à un montage de type “bind”. C’est une option de montage qui permet de monter plusieurs fois un système de fichiers : /var/data1 et /export/home pointeront vers les mêmes données, comme deux archers qui viseraient la même cible. Pour cela, rajoutez dans votre fichier /etc/fstab :

/var/data1 /export/home none rw,bind 0 0
/var/data2 /export/shared none rw,bind 0 

On peut alors réaliser ces montages par un mount -a  

Une fois notre arborescence créée, installez le serveur NFS par la commande :

$ sudo apt-get install nfs-server

Vos partages NFS sont définis dans le fichier   /etc/exports .

Les lignes qui commencent par  #  sont des commentaires.

Ajoutez les lignes suivantes :

/export        192.168.0.0/24(ro,sync,root_squash,no_subtree_check,fsid=0)
/export/home 192.168.0.0/24(rw,sync,root_squash,no_subtree_check)
/export/shared 192.168.0.0/24(rw,sync,all_squash,no_subtree_check)

Pour chaque ligne, on indique le répertoire à partager, puis une tabulation et le réseau avec lequel on souhaite partager ce répertoire et les options de partage entre parenthèse. On peut indiquer plusieurs réseaux avec chacun leurs propres options de partage en les séparant par des espaces.

Voici le détail des options qu’on a utilisées :

ro

Le partage est en lecture seule.

rw

Le partage est en lecture-écriture.

sync

Pour indiquer que les opérations sont effectuées les unes à la suite des autres. C’est conseillé pour les partages en lecture-écriture. Pour les partages en lecture seule, on peut utiliser l’option contraire async pour indiquer qu’une opération de lecture peut commencer avant la fin de l’opération précédente.

no_subtree_check

L’option contraire “subtree_check” fait une vérification supplémentaire pour vérifier qu’un fichier est bien dans l’arborescence de partage (ce qui n’est pas toujours si évident à vérifier dans des cas complexes). Cette option était l’option par défaut mais elle causait plus de problèmes qu’elle n’en résolvait. L’option par défaut recommandée est maintenant “no_subtree_check” sauf pour des partages en lecture seule où les renommages de fichiers sont rares. Vous aurez un avertissement de NFS si vous n’indiquez pas cette option explicitement.

fsid=0

Identifie un système de fichier par un code. Ça peut être utile pour identifier certains partages qui ne sont pas identifiés par des périphériques dans /dev mais surtout le code spécial "0" indique que c’est la racine de notre répertoire de partage.

root_squash

C’est une option de sécurité. Si on partage des fichiers appartenant à root sur le serveur NFS, on n’a pas forcément envie que l’utilisateur root des clients soit propriétaire de ces fichiers et ait tous les droits dessus. L’option root_squash indique donc que l’utilisateur root des clients NFS sera reconnu comme l’utilisateur "nobody" d’UID 65534 et de groupe "nogroup" de GID 65534.

all_squash

Comme pour l’option précédente sauf que tous les utilisateurs seront reconnus comme l’utilisateur "nobody" avec le groupe "nogroup".

Vous pouvez valider vos changements de configuration et vérifier vos partages actifs par les commandes :

$ sudo exportfs -r
$ sudo showmount -e localhos

Il ne nous reste plus qu’à utiliser nos partages sur notre client.

Configurez le client

Sur votre client, pour pouvoir monter votre partage réseau, vous devrez installer le paquet  nfs-common  et créer le point de montage de votre partage NFS :

$ sudo apt-get install nfs-common
$ sudo mkdir /mnt/reseau

Vous pouvez alors indiquer la ligne suivante dans votre fichier /etc/fstab pour monter votre partage réseau :

vm-serveur:/ /mnt/reseau nfs4 rw,hard,intr,_netdev 0 0

On indique donc qu’on veut monter la racine / du partage réseau sur vm-serveur dans  /mnt/reseau  

Le système de fichier est de typenfs4 et voici le détail des options :

rw

Le montage est en lecture-écriture.

hard

Signifie que le montage sera traité comme le montage d’un périphérique standard. Il sera permanent et ne sera pas démonté automatiquement au bout d’un certain temps d’inactivité. L’option contraire est "soft".

intr

Signifie "interruptible", c’est-à-dire qu’une opération peut être interrompue en attente de réponse du serveur. Option vivement conseillée, car sans cette option et en cas de problème à joindre le serveur (coupure réseau par exemple), le client pourrait rester coincé en attente tant que la connexion n’est pas rétablie ou qu’il n’a pas été rebooté.

_netdev

Indique que le montage ne doit être réalisé qu’une fois le réseau opérationnel (pour un partage réseau, ça paraît logique mais encore faut-il l’indiquer à votre système).

Vous pouvez alors monter votre partage réseau par la commande mount -a  

Dans /mnt/reseau , vous retrouvez bien vos deux répertoires partagés home et shared 

Mais si vous essayez d’écrire dedans, vous voyez que vous n’avez pas les droits. Pire, même avec unsudo , vous n’avez pas les droits.

C’est normal, sur le serveur ces répertoires appartiennent àroot:root et l’utilisateur root du client est reconnu commenobody 

Corrigeons donc ce problème de droits.

Sur le serveur vm-serveur, faites :

$ sudo mkdir /export/home/stiven #Sur mon client, mon utilisateur est stiven
$ sudo chown 1000:1000 /export/home/stiven #Sur mon client, UID et GID de l’utilisateur stiven
$ sudo chown nobody:nogroup /export/shared

Retournez sur le client, vous pouvez maintenant écrire dans /mnt/reseau/home/stiven et tous vos fichiers appartiennent à votre utilisateur en cours. Vous pouvez aussi écrire dans  /mnt/reseau/shared et tous les fichiers que vous écrivez appartiennent à nobody  .

NFS est un outil puissant pour partager des fichiers dans un réseau UNIX. Malheureusement, s’il est parfaitement intégré sur Linux, il n’est pas disponible nativement sous Windows. Aussi, si votre réseau comporte des clients Windows, vous préférerez peut-être utiliser Samba, que nous allons découvrir ensemble, dans la partie suivante.

En résumé

  • NFS permet de partager des fichiers sur un réseau local UNIX. La dernière version du protocole est la version 4.

  • Vous avez pu très simplement partager une arborescence de répertoires depuis votre serveur et la monter sur votre client.

  • NFS respecte les droits UNIX ce qui permet de profiter de la puissance de ce système sur vos partages.

  • L’utilisation des droits UNIX avec NFS impose que chaque utilisateur ait les mêmes UID sur tous les postes clients.

Example of certificate of achievement
Example of certificate of achievement