Ceci est une ancienne révision du document !
NFS : Network File System - le partage réseau sous Linux
NFS est l'abréviation de Network File System, c'est-à-dire système de fichiers réseau.
Ce système de fichiers en réseau permet de partager des données principalement entre systèmes de type UNIX mais des versions existent également pour Microsoft Windows™ et Mac.
NFS est compatible avec IPv6 sur la plupart des systèmes.
L'intérêt de NFS est de permettre l'utilisation d'un répertoire ou de tout le système de fichiers d'un ordinateur de manière totalement transparente, comme s'il s'agissait d'un disque dur connecté directement à votre ordinateur.
Pré-requis
Deux ordinateurs au moins
- Un serveur sous GNU/Linux (ici Ubuntu) où se trouvent les fichiers à partager.
- Un client qui doit pouvoir accéder aux fichiers du Serveur.
Ne pas avoir peur de la ligne de commande
Avoir les droits d'administration sur les deux machines
C'est-à-dire de pouvoir installer des paquets et utiliser la commande sudo
Voir ici de quoi il est question et en particulier la commande « sudo ».
Être sur un réseau de confiance
NFS surtout avant la version 4 (incompatible avec les précédentes) ne doit être déployé que sur des réseaux sûrs.
Quelle que soit la version, NFS est a déployer dans un réseau local et n'a pas de vocation à être ouvert sur internet.
On peut utiliser par exemple NFS sur son réseau local derrière une Box assurant le rôle de routeur NAT.
Connaître les adresses IP locales de Serveur et de Client
Dans le terminal lancer « ifconfig », l'adresse est à la ligne « inet adr:
», paragraphe « eth
» si vous êtes connecté en ethernet, « wlan
» pour une connexion Wi-Fi.
Vous pouvez aussi connaître l'IP de vos PC via l'applet network-manager.
Pour la suite de cet exemple, on considérera que Serveur et Client ont une adresse locale fixe :
- Serveur : 192.168.1.10
- Client : 192.168.1.20
- Soit à partir de l'interface du routeur / de la *box. Ouvrez Firefox, et tapez dans la barre d'adresse celle donnée dans le mode d'emploi du routeur / de la *box (le login et le mot de passe y sont aussi). Plus d'infos.
- Soit directement à partir d'Ubuntu via Network-Manager ou par la configuration fixe
Se faire un aide-mémoire
Les machines | IP locales | Points de montage des fichiers |
---|---|---|
Serveur | 192.168.1.10 | /Fichiers_à_partager_sur_Serveur |
Votre serveur | IP de votre serveur | Exemple : /home/Votre_Nom_d'Utilisateur_sur_Votre_Serveur |
Client | 192.168.1.20 | /Point_de_montage_sur_Client |
Votre client | IP de votre client | Exemple : /home/Nom_d'Utilisateur_sur_le_Client/Partage |
En effet avec cette méthode, les ordinateurs de tout votre réseau local pourront sans distinction utiliser NFS.
D'autres méthodes décrites dans les Exemples concrets vous demanderont de les connaître.
Création d'un Serveur NFS
Installation
Installez sur le ou les serveurs NFS le paquet nfs-kernel-server
Configuration
déclaration de l'Export NFS
La configuration d'un 'export' NFS se fait en éditant le fichier /etc/exports
- /etc/exports
# Un exemple à adapter: /Dossier/à/partager/ 192.168.0.0/24(rw,all_squash,anonuid=1000,anongid=1000,sync) /Dossier/numero02/ master(rw) trusty(rw,no_root_squash)
Dans ce fichier, chaque ligne est définie comme ceci :
<dossier partagé> <hôte>(<options>) <hôte2>(<options>)...
Les informations se trouvant sur une ligne sont les suivantes1) :
- <dossier partagé> : chemin menant au dossier partagé.
- <hôte> : indique quel est l'hôte qui peut accéder à ce partage, l'hôte peut être défini de plusieurs manières :
- une IP : on indique simplement l'adresse IP de la machine pouvant accéder à ce partage.
- un nom d'hôte : on indique le nom complet de l'hôte (pour peu qu'il soit connu du système au travers d'un DNS ou du fichier
hosts
). - un nom de groupe réseau NIS (NIS netgroup) qui s'indique sous la forme
@<netgroup>
. - un domaine avec un joker qui indique les machines d'un domaine ou sous-domaine; par exemple :
*.ubuntu-fr.org
. - un intervalle d'IP avec le masque de sous-réseau; par exemple :
192.168.0.0/24
ou192.168.0.*
- <options> : indique les options de partage; nous n'allons pas parcourir toutes les options ensemble mais uniquement les plus importantes.
- rw : permet la lecture et l'écriture sur un partage pour l'hôte défini (par défaut, les partages sont en mode
ro
; c'est-à-dire en lecture seule). - async : permet au serveur NFS de violer le protocole NFS et de répondre aux requêtes avant que les changements effectués par la requête aient été appliqués sur l'unité de stockage. Cette option améliore les performances mais a un coût au niveau de l'intégrité des données (données corrompues ou perdues) en cas de redémarrage non-propre (par exemple en cas de crash système).
- sync : est le contraire de
async
. Le serveur NFS respecte le protocole NFS. - root_squash : force le mapping de l'utilisateur
root
vers l'utilisateur anonyme (option par défaut). - no_root_squash : n'effectue pas de mapping pour l'utilisateur
root
. - all_squash : force le mapping de tous les utilisateurs vers l'utilisateur anonyme.
- anonuid : indique au serveur NFS l'UID de l'utilisateur anonyme (considéré comme tel dans les précédentes options de mapping).
- anongid : indique au serveur NFS le GID de l'utilisateur anonyme (considéré comme tel dans les précédentes options de mapping).
relancer le service
Après avoir défini vos partages dans le fichier /etc/exports il suffit de relancer le service nfs:
sudo service nfs-kernel-server reload
Cette commande ne coupe pas les transferts en cours si la nouvelle configuration permet toujours leur accès au serveur. Vous pouvez donc la lancer plus ou moins à n'importe quel moment.
Un peu de sécurité avec TCPwrapper
Si vous utilisez denyhosts sur le serveur, il vous faudra également ajouter les lignes suivantes dans le fichier /etc/hosts.allow :
- /etc/hosts.allow
portmap: <ip de la machine cliente> lockd: <ip de la machine cliente> nfsd: <ip de la machine cliente> mountd: <ip de la machine cliente> rquotad: <ip de la machine cliente> statd: <ip de la machine cliente>
et également afin de sécuriser un peu plus votre installation, ajouter dans le fichier /etc/hosts.deny :
- /etc/hosts.deny
# Tout interdire sur portmap, nfsd et mountd portmap:ALL nfsd:ALL mountd:ALL
Exemples concrets
- Exemple de partage avec NFS : Exemple de réseau entre 3 ordinateurs qui permet l'échange et le partage de fichiers avec le minimum de contraintes via nfs-kernel-server.
- Partager une partition en réseau : Exemple en éditant les fichiers de configuration du partage d'une partition de sauvegarde en réseau via nfs-kernel-server.
- Un simple partage NFS : Tutoriel expliquant pas à pas comment accéder à distance aux documents enregistrés sur un ordinateur à partir d'un autre. Nécessite de saisir quelques lignes de commandes, mais permet de comprendre tout en faisant.
- D'autres méthodes, parfois obsolètes, sont également disponible sur l'ancienne version de la page NFS.
Client NFS
Pour accéder à un NFS, il faut le "monter". En gros il s'agit de dire au service qui s'occupe des disques durs que ce serveur NFS est comme un disque dur et qu'il serait bête de ne pas s'en servir !
Il n'existe pas d'autoconfiguration pour NFS, il faudra donc le faire manuellement.
Ubuntu GNU/Linux
Le paquet nécessaire pour accéder à un NFS est nfs-common
Après avoir installé ce paquet, il existe deux solutions pour monter son NFS sur un ordinateur.
La première est plus adaptée à un Serveur allumé en permanence (ou presque), la seconde via autoFS est peut être plus tolérante à l'arrêt inopiné du serveur.
Pour parcourir les partages NFS d'un serveur (ici : serveur.local, que vous pouvez remplacer par l'IP) saisissez dans un terminal la commande suivante:
showmount -e serveur.local Export list for serveur.local: /mnt/nas/media *.local,192.168.0.0/255.255.0.0
Modifier /etc/fstab
Il faut tout d'abord créer un dossier dans lequel le NFS viendra se loger. Ouvrez donc un terminal sur vos clients puis tapez:
sudo mkdir /media/NFS
Vous pouvez bien entendu créer un répertoire du nom de votre choix.
Pour ce faire, il suffit de modifier le fichier /etc/fstab pour y ajouter la ligne:
192.168.1.10:/<Dossier_à_partager>/ /media/NFS nfs defaults,user,auto,noatime,intr 0 0
- 192.168.1.10 étant l'IP de votre serveur
- <Dossier_à_partager> étant le dossier sur votre serveur que vous voulez recevoir (doit correspondre à celui que le serveur veut envoyer)
- /media/NFS On précise le point de montage (dossier que vous avez créé juste avant dans lequel vous souhaitez monter le partage NFS)
- nfs On précise le protocole utilisé.
- defaults,user,auto,noatime,intr sont des options de montage, vous pouvez ajouter ,ro à la fin pour ne pas autoriser l'écriture.
- 0 0 dit à Linux de ne pas vérifier si le disque contient des erreurs (le serveur s'en occupera)
Si votre serveur est très peu puissant (un Pentium 2 ou 3 par exemple plus de 12 ans d'âge, bon millésime) vous pouvez augmenter les performances en ajoutant en "options de montage" (voir plus haut) ,nfsvers=3,udp ceci aura pour effet d'utiliser la version 3 de NFS ainsi que le protocole UDP. Vous devrez utiliser moins de processeur mais ceci peut ne pas marcher très bien si votre liaison réseau est de mauvaise qualité (ne surtout pas utiliser ces options sur les clients en Wifi !)
Utiliser Autofs
- Autofs : Logiciel pour monter facilement votre partage NFS.
Windows
- Comment configurer un PC client Windows pour accéder à un partage NFS : Tutoriel pour accéder au partage NFS depuis un client Windows à l'aide de Windows Services for Unix (SFU).
Firewall (Pare-feu) et NFS
Sachez qu'un firewall ne vous servira à rien si vous êtes (comme ce tutoriel l'exige très important) derrière un routeur.
Si vous faites un partage de connexion via Network-Manager un routage sera en place automatiquement, les ordinateurs dans le partage n'ont donc rien à craindre.
Si vous utilisez un pare-feu entre le modem et le PC qui partage la connexion internet, n'ouvrez surtout pas le port NFS vers le modem ! Il faut l'ouvrir dans le sens inverse, c'est-à-dire vers le partage de connexion ! Ne vous trompez pas !
Le seul intérêt d'un pare-feu dans ce cas précis est seulement si vous avez un nombre très important de postes informatiques chez vous et que ces postes risquent d'être utilisés par des personnes malveillantes.
Si vous utilisez tout de même un pare-feu sur vos serveurs et/ou clients NFS, il vous faudra le configurer pour ne pas filtrer NFS et donc pouvoir y accéder :
- partage NFS et Firewall (UFW ) : Comment fixer les ports utilisés lors d'un partage NFS (firewalling, routage..) .
Résoudre les problèmes
Rétrograder en NFSv3
Côté serveur
Modifier le fichier /etc/default/nfs-kernel-server et éditer la ligne
RPCNFSDCOUNT='8'
par
RPCNFSDCOUNT='8 --no-nfs-version 4'
Côté client
Ajoutez nfsvers=3 au fichier /etc/fstab
Utilisez nfsstat
pour vérifier que la modification à été prise en compte.
Résoudre le problème de verrouillage de fichiers avec LibreOffice
Commentez les lignes suivantes dans les fichiers /usr/bin/libreoffice et /usr/bin/soffice
SAL_ENABLE_FILE_LOCKING=1 export SAL_ENABLE_FILE_LOCKING