ubuntu-fr

Communauté francophone des utilisateurs d'Ubuntu

[[nfs]]

Piste: » nfs


à revoir (versions oboslètes + mise en forme)

NFS : Network File System

Introduction

NFS est l'acronyme de Network File System, c'est-à-dire un système de fichiers utilisable sur un réseau.

NFS est utilisé pour partager des données entre systèmes UNIX. Si vous désirez partager des données avec d'autres systèmes, veuillez vous référer à la page traitant des partages de dossiers, de connexion et d'imprimante

En tant qu'utilisateur, plusieurs raisons peuvent vous pousser à partager des fichiers. Étant donné que les besoins peuvent être différents, la suite de cette documentation s'articule autour de deux aspects :

  • Si vous souhaitez simplement partager des données sur votre réseau local en configurant le mode graphique de Ubuntu, veuillez vous reportez à la section Partage simple.
  • Si vous souhaitez monter un serveur de fichier destiné à fournir des données pour un réseau d'entreprise, veuillez vous reportez à la section Partage en ligne de commande.
  • Si vous souhaitez utiliser webmin (très simple et administrable à distance), veuillez vous reportez à la section Partage en utilisant webmin.

Partage simple

Le partage "simple" tel qu'il est présenté ci-dessous est un partage utilisant l'interface graphique fournie avec Ubuntu.

Ubuntu Hardy 8.04 : L'interface graphique est accessible en faisant ALT+F2 et tapant shares-admin, sinon utilisez webmin (cf "Partage en utilisant webmin")

Côté serveur

Pour partager un dossier, suivez les étapes suivantes :

  • Allez dans le menu Système → Administration → Dossiers partagés ou dans Réglage du système → Partage.
  • Introduisez votre mot de passe.
  • Si vous ouvrez le gestionnaire de partage pour la première fois (ou si vous n'avez pas installé le serveur NFS manuellement), Ubuntu vous indique qu'il est nécessaire d'installer les paquets de serveur pour continuer. Si les paquets ne sont pas installés, faites-le en cochant les cases appropriées et cliquez sur Appliquer. (Pour le faire manuellement: installez les paquets nfs-common,nfs-kernel-server apt://nfs-common apt://nfs-kernel-server)

  • Dans le gestionnaire de partage se trouvent 3 boutons à droite pour gérer les partages :
    • Ajouter qui permet de créer un nouveau partage.
    • Propriétés qui permet de modifier les paramètres du partage sélectionné.
    • Supprimer qui permet de supprimer le partage sélectionné.
  • Pour ajouter un partage, cliquez sur Ajouter ; la fenêtre suivante s'affiche :

  • Dans cette fenêtre, vous choisissez le chemin du dossier à partager. Dans mon cas : /home/ols/Shared_Linux.

Comme dans toute syntaxe *nix, certains caractères dans les noms de fichiers sont interdits, ce sont par exemple le /, les parenthèses (), l'espace ou *. Vous ne devez donc pas utiliser d'espaces dans le nom de vos dossiers (/home/moi/Mon Dossier) mais plutôt /home/moi/MonDossier

  • Ensuite, vous choisissez le mode de partage. Ici, nous utiliserons NFS.
  • En bas de l'écran, vous indiquez quels sont les hôtes autorisés à accéder à votre partage. Pour ajouter un hôte, cliquez sur Ajouter hôte.
  • Dans la nouvelle fenêtre qui vient de s'ouvrir, vous pouvez choisir d'autoriser tous les hôtes de votre réseau, ou spécifier une adresse IP. Dans mon cas, je spécifie l'adresse IP (192.168.0.100) de mon ordinateur portable car je ne souhaite pas que les autres hôtes aient un accès en en lecture-écriture. Pour autoriser tout le réseau local, sélectionnez "Saisissez le nom du réseau", dans réseau mettez 192.168.0.0 et le masque de sous réseau 255.255.255.0
  • Cliquez sur Valider pour enregistrer cet hôte.
  • Cliquez sur Valider pour sauvegarder les paramètres de partage.
  • Cliquez sur Valider pour activer les dossiers partagés.

Les dossiers sélectionnés sont maintenant partagés avec les permissions que vous leur avez octroyées.

Si le serveur répond : permission denied , éditez le fichier /etc/exports sur le pc serveur, pour changer :

/home/ols/Shared_Linux  192.168.0.100(rw)

en :

/home/ols/Shared_Linux  192.168.0.100/255.255.255.0(rw)

Redémarrez enfin le service NFS :

sudo /etc/init.d/nfs-kernel-server restart

Redémarrer le PC (et vérifier que le firewall est correctement configuré) peut être nécessaire si vous faites encore face à ce message.

Côté client

A Savoir! qu'il n'est actuellement pas possible de partager des ressources sur une partition NTFS via NFS... (sauf si le serveur comportant ce NTFS est windows)

Il faut commencer par installer le paquet nfs-common

Pour se connecter à un partage NFS, vous devez définir un point de montage. Pour ce faire, suivez les instructions suivantes :

  • Ouvrez un terminal
  • Créez un dossier où le dossier partagé va être monté (dans mon cas) :
sudo mkdir /media/nfs
N'hésitez pas à donner un nom plus parlant, surtout si vous avez plusieurs partages NFS.

Mais n'oubliez surtout pas de changer aussi la suite en conséquence !

  • Ouvrez le fichier /etc/fstab
  • Ajoutez une ligne comme celle-ci à la fin du fichier (dans mon cas) :
192.168.0.101:/home/ols/Shared_Linux	/media/nfs	nfs	user,noauto	0	0

Pour connaître l'adresse IP du serveur, vous pouvez scruter les ordinateurs du réseau :

 arp -a
Explications: Les deux premiers champs sont à adapter en fonction de vos réglages. La première partie (192.168.0.101:/..../Shared_Linux) indique l'adresse IP du serveur suivie du dossier partagé. La seconde partie (/media/nfs) indique le point de montage que vous venez de créer plus haut.

la suite: est commune à toutes les configurations.

Vous pouvez tout de même enlever noauto dans la partie user pour que le dossier partagé soit monté automatiquement au démarrage.

  • Sauvegardez le fichier.
  • Allez maintenant dans le poste de travail (si vous n'avez pas enlevé ,noauto), dans le menu Raccourcis ⇒ Poste de travail.
  • Vous y trouverez une icône nfs (ou autre suivant le point de montage que vous avez défini). Double-cliquez sur cet icône pour accéder au répertoire partagé sur l'autre machine.
  • Si le répertoire partagé n'apparaît pas, lancer la commande suivante dans un terminal:
sudo mount -a

Partage en ligne de commande

Le partage de dossier sur un serveur de fichier avec NFS, tel que décrit ici, se fait en utilisant la ligne de commande et en se préoccupant des problèmes de droit d'accès.

Côté serveur

Installation

Avant toutes choses, il est nécessaire d'installer le paquet nfs-kernel-server

Configuration

Ensuite, nous allons définir les dossiers à partager. Toutes les informations concernant le partage de dossier pour NFS se trouvent dans le fichier /etc/exports.

Éditez le fichier /etc/exports

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 suivantes :

  • <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éfinit 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 ou 192.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 au requête 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).

Voyons quelques exemples...

Nous souhaitons exporter un répertoire /srv/archive pour le réseau local (192.168.0.0/24) en lecture seule, en optimisant les performances (sur un répertoire en lecture seule, on peut se le permettre). Nous indiquons la ligne suivante dans le fichier /etc/exports :

/srv/archive 192.168.0.0/24(ro,async)

Nous souhaitons exporter un répertoire /srv/temp_add pour un hôte particulier (lab05.ubuntu-fr.org) en lecture/écriture et tous les utilisateurs sont considérés comme l'utilisateur nfsshare (UID : 5000, GID : 5000). L'hôte lab02.ubuntu-fr.org peut également y accéder mais seulement en lecture seule. Nous indiquons la ligne suivante dans le fichier /etc/exports :

/srv/temp_add lab05.ubuntu-fr.org(rw,all_squash,anonuid=5000,anongid=5000,sync) lab02.ubuntu-fr.org(ro,sync)

Vous obtiendrez tous les détails concernant les options NFS dans les manpages (man exports).

Remarquez que, si vous n'utilisez pas all_squash, l'UID de l'utilisateur de la machine cliente sera utilisé sur la machine serveur. Ce qui signifie que, soit vous avez des fichiers /etc/passwd et /etc/group identiques (ce qui est encore possible dans un petit parc informatique), soit vous utilisez un serveur d'identité comme NIS afin d'avoir les mêmes UID/GID partout.

Mise en route

Ouvrez un terminal,

Il ne vous reste plus qu'à démarrer votre nouveau serveur de fichier avec la commande :

sudo /etc/init.d/nfs-kernel-server start

Lorsque vous modifiez le fichier de configuration, n'oubliez pas d'entrer la commande suivante pour le recharger :

sudo /etc/init.d/nfs-kernel-server reload

Pour redémarrer le serveur NFS complètement, vous devez utiliser cette commande:

sudo /etc/init.d/nfs-kernel-server restart

Considérations sécuritaires

NFS n'est pas réputé pour être totalement sécurisé. Il est conseillé d'éviter de partager des informations avec NFS au travers de l'Internet. Pour sécuriser les accès, vous avez le choix entre plusieurs possibilités :

  • Accès uniquement sur le réseau local
    • Une première méthode consiste à modifier vos fichier /etc/hosts.deny et /etc/hosts.allow. Cette méthode simple est expliquée dans les manpages (man hosts_access).
    • Une seconde méthode (ma favorite) consiste à configurer un firewall avec iptables pour éviter les accès non-autorisés. Je préfère cette solution car elle permet de traiter tous les services et accès (y compris ping, suivi de connexions, etc.). Les ports utilisés par NFS sont le 111 et le 2049 (en udp et tcp).
  • Accès externes
    • Le mieux est d'utiliser un tunnel VPN, crypté et sécurisé, qui fera de votre machine distante une machine de votre réseau local.

Côté client

Il faut commencer par installer le paquet nfs-common

Pour les connexions clientes sur des machines de bureau, vous pouvez utiliser la méthode décrite dans la section précédente.

Si vous devez effectuer des liens NFS entre différents serveurs, voici quelques précisions concernant les montages NFS.

Pour monter un partage NFS, vous avez besoin d'un répertoire vide qui servira de point de montage. En général (et de préférence), les points de montage se trouvent dans /media, mais ces points de montage peuvent se trouver n'importe où dans votre arborescence root (/).

Pour monter un système de fichier NFS manuellement, vous utiliserez la commande suivante :

sudo mount -t nfs <ip_serveur>:<rep_serveur> <point_montage_local>

Ce qui donne par exemple :

sudo mount -t nfs 192.168.0.40:/home/brol /media/nfs

Certaines options peuvent être passées à la commande mount lors du montage. Les options les plus intéressantes sont les suivantes :

  • ro : monte le système de fichier en lecture seule.
  • rw : monte le système de fichier en lecture/écriture.
  • hard : si le serveur n'est pas accessible, le noyau place les processus en attente de la ressource en attente.
  • soft : si le serveur est inaccessible, on attend le timeout avant de générer une erreur de lecture/écriture aux processus impactés.
  • timeo=XXX : indique le timeout (en mode soft) en secondes (maximum = 60sec).

Ces options se passent via l'argument -o de la commande mount; par exemple :

sudo mount -t nfs -o ro,soft,timeo=10 192.168.0.40:/home/brol /media/nfs

Pour démonter le système de fichier, vous pouvez utilisez la commande suivante :

sudo umount <point_montage_local>

Pour monter le serveur de fichier au démarrage de la machine, vous pouvez ajouter une ligne ressemblant à celle-ci dans le fichier /etc/fstab :

<ip_serveur>:<rep_serveur> <point_montage_local> nfs <options> 0 0

Par exemple :

192.168.0.40:/home/brol	/media/nfs	nfs	ro	0	0

Erreurs

Le message classique en cas d'erreur au moment du mount du coté client est

mount RPC : le programme n'est pas enregistré

Cela ne signifie pas qu'il y a une erreur du coté client. Cela peut-être dû (coté serveur) à une mauvaise définition du client autorisé à se connecter comme défini dans le fichier /etc/exports. Vérifier que l'hôte-client est correctement identifié. En cas de doute remplacer le nom d'un client par son Ip.
Cela peut-être (toujours du coté serveur) dû à une restriction sur les hôtes-clients dans /etc/hosts.deny (qui indique quel programme doit refuser quel hote) qui n'est pas contrebalancée par une permission dans /etc/hosts.allow (qui indique quel client à néanmoins le droit d'outrepasser les interdictions du hosts.deny)
Pour plus de lisibilité utiliser de manière préférentielle les Ip de vos clients. Soit une par une (petit nombre) ou à l'aide du couple Adresse/Masque (grand nombre)

Un exemple de configuration des fichiers hosts.allow et hosts.deny est donnée ici :

SUR LE SERVEUR SEULEMENT
il faut ajouter les lignes suivantes (minimum vital):

Fichier hosts.deny
#Interdire tout le monde sur les services portmap, nfsd et mountd
portmap:ALL
nfsd:ALL
mountd:ALL

Fichier hosts.allow
#Accepter néanmoins les <machine-liste> sur les services portmap, nfsd et moundt
#Exemple de <machine> 192.168.0.50 , une seule machine.
#Autre exemple 192.168.0.0/255.255.255.0 , toutes les machines de 192.168.0.1 à 192.168.0.254
portmap:<machine_liste>
nfsd:<machine_liste>
mountd:<machine_liste>

Ensuite il ne reste plus qu'à recharger les configs pour le démon nfs :

sudo /etc/init.d/nfs-kernel-server reload
Autre erreur : Accés refusé.

Vérifiez que tous les services nécessaires sont démarrés (coté serveur) grâce à la commande

rpcinfo -p

Vous devez obtenir une liste qui comprend au moins un exemplaire de chacun de ces services :

tcp    111  portmapper
udp    942  status
udp    752  mountd
udp   2049  nfs
udp  32799  nlockmgr

Si ce n'est pas le cas, relancer le script de démarrage (start) de nfs comme expliqué plus haut.
Pour plus d'informations concernant les options de montage, vous pouvez consulter les manpages de NFS (man nfs).

Partage en utilisant webmin

- Simple, marche sur toutes les distributions et administrable à distance -

Côté serveur

Installez webmin (téléchargez le paquet debian sur http://www.webmin.com) et les paquets nfs-common nfs-kernel-server

  • Connectez vous sur webmin (ex : https://127.0.0.1:10000 ).
  • Allez dans "Un-used Modules", "NFS Exports" et "Add a new export".
  • Renseignez "Directory to export", si besoin cocher "Read-only?" "No".
  • Cliquer sur "Save" puis "Apply changes"

Côté client

Installez nfs-common, et voir la partie "Partage Simple" → "Côté client" ou, mieux, "Autofs" (ci-après).

Attention cependant, par défaut Webmin monte le partage sur le serveur dans /export.

Ainsi le partage de /home/dossier_mis_en_partage sera accessible par le client en tant que /export/dossier_mis_en_partage. Ignorer ceci entraîne la réponse suivante à un mount:

nath@nath-minix:~$ sudo mount -t nfs 192.168.0.1:/home/Multimedia /media/nfs
[sudo] password for nath: 
mount.nfs: access denied by server while mounting (null)
nath@nath-minix:~$ 

Autofs

Objectifs

Le montage manuel ou par fstab a plusieurs inconvénients. Le principal, c'est qu'il n'est pas toujours possible de rendre le montage automatique. Pourtant, si vous ne spécifiez pas "noauto" dans les options de montage dans /etc/fstab, il est sensé être automatique. Mais si lors du montage vous n'êtes pas encore connecté (en wifi par exemple), et bien le montage ne se fait pas, et il faut effectuer le montage manuellement. Et dans tous les cas, le démontage aussi. Un autre inconvénient, moins important, est que même si vous n'utilisez pas les dossiers montés, ils restent montés et consomment des ressources.

autofs permet de résoudre ces 2 problèmes.

Installation

Installez la paquet autofs

Configuration

Tout d'abord, supprimez (ou commentez) dans /etc/fstab les montages que vous voulez gérer par autofs (si vous en aviez écrit auparavant).

Ensuite, éditez /etc/auto.master, pour y ajouter la ligne :

/net    /etc/auto.nfs --ghost,--timeout=30

L'option ghost permet de toujours afficher les dossiers, mêmes lorsqu'ils ne sont pas montés. 30 correspond au temps pour démonter automatiquement : ne mettez pas une valeur trop importante, parce que si l'ordinateur distant est éteint le démontage plante ; il faut donc attendre au moins 30 sec entre le dernier accès au partage nfs et l'extinction de l'ordinateur distant.

Créez alors un fichier /etc/auto.nfs :

mondossier    -soft,rw,intr    192.168.0.1:/home/user/share

Le montage se fera alors dans /net/mondossier, et pointera vers la machine 192.168.0.1 sur le répertoire /home/user/share. Vous pouvez dans ce même fichier écrire plusieurs lignes pour chacun de vos points de montages.

Il ne reste plus qu'à lancer le serveur :

sudo /etc/init.d/autofs start

et à double-cliquer sur /net/mondossier dans le navigateur pour les monter automatiquement.

Si vous faites un changement :

 sudo /etc/init.d/autofs reload

Serveur en DHCP

Dans ce cas, l'adresse IP du serveur peut être modifiée...

Il faut configurer le routeur qui assigne les adresses IP aux ordinateurs qui s'y connectent en lui donnant un bail DHCP permanent à l'ordinateur qui sert de serveur NFS.

Votre routeur vous demandera l'adresse MAC du serveur NFS : vous pouvez la trouver en exécutant cette commande sur le serveur :

 ifconfig

Relevez l'adresse inscrite après "HWaddr", c'est l'adresse MAC de la carte réseau du serveur. Une fois votre routeur configuré, relancez le serveur (ou débranchez / rebranchez le cable réseau).

Remarque : la freebox permet de le faire dans l'interface de gestion → routeur


Contributeurs : ostaquet, Fabien26


nfs.txt · Dernière modification: Le 03/07/2008, à 17:44 par 82.231.148.110, 127.0.0.1
Le contenu de ce wiki est sous double licence : CC BY-SA et GNU FDL