ubuntu: nfs

Publié le par duteil

Introduction au service NFS


Le service NFS (Network File System),
permet le partage d'un système de fichiers sur un réseau Linux

Généralités

  • Il s'agit du protocole standard de partage réseau entre machines Unix, créé par SUN vers 1980.
    Il comprend l'ajout de fonctionnalités supplémentaires (dans la couche session au dessus de TCP/IP), les RPC =(Remote Procedure Calls)

     

  • Donc une machine joue le rôle de serveur de fichiers. Elle est appelée serveur NFS, et
    • on dit qu'elle exporte tout (arborescence racine /) ou partie de son système de fichiers,
    • en le partageant par une liste de stations accessibles par réseau,
    • en installant toutefois des restrictions d'accès.

     

  • Comme toute ressource extérieure doit être intégrée dans le système de fichiers Linux, cet accès ne pourra être permis qu'à l'aide d'un processus de montage : une partie de l'arborescence d'une machine Linux "serveur", est exportée ce qui lui permet d'être intégré dans le système de fichiers d'une machine Linux "cliente".
  • L'utilisateur peut monter cette arborescence exportée par le serveur, sur un point de montage, de façon tout-à-fait semblable au montage de systèmes de fichiers des divers périphériques.
    Le montage peut s'effectuer en cours de session de travail par la commande interactive mount.

     

  • Mais dans un cadre de travail stable, où le serveur est dédié, il est souhaitable de monter la ressources NFS au démarrage.
    Il suffit pour cela d'inclure la description du montage sur une ligne de /etc/fstab. On peut comparer le processus à la "connexion à un lecteur réseau" sur d'autres systèmes.

     

  • Dès lors, pour l'utilisateur sur la machine cliente, la ressource est accessible comme si elle résidait sur un périphérique local.

 


Installation

Sur le serveur NFS

  • Tout d'abord, les services portmap qui gère les connexions RPC, et nfs ont dû être installés initialement. (sur une distribution Mdke 7.2, il s'agit des packages portmap-4.0 .. et nfs-utils
  • Vérifier avec l'utilitaire ntsysv que les services portmap et nfs sont bien activés automatiquement au démarrage.

pour lister les services sous ubuntu il faut taper la commande service --status-all

 

 

 

  • Pour vérifier que les processus correspondant sont bien en exécution :
     ps aux | grep portmap 
  • NFS, comme les autres services, se gère avec un script placé dans /etc/rc.d/init.d/.
    Voici pour lancer NFS (sur une distribution de type RedHat)
     # service portmap start Starting portmapper: [OK] # service nfs start Starting NFS services: [OK] Starting NFS quotas: [OK] Starting NFS deamon: [OK] Starting NFS mountd: [OK] 
  • Le fichier /etc/exports.
    Ce fichier (à créer s'il est absent) contient la liste des exportations.
    Sur chaque ligne, on précise un répertoire du système de fichiers, suivi par la liste des  machines distantes clientes autorisées à les monter. Si cette liste est vide, toutes les stations accessibles sont autorisées.
    Exemples d'exportation déclarées dans le fichier /etc/exportssur le serveur p00
     # repertoire liste-machines (liste-options) /home/jean pc2(ro) pc3(rw) /usr/bin pc2(ro) pc3(ro) /var/www/html *.fctice.ac-creteil.fr (ro) pc3 (rw) /usr/share/doc (ro) 
    Pour valider un changement opéré dans ce fichier de configuration, faire appel à la commande :
     # exportfs -a 

Sur la station cliente

  • On crée un rép. de montage, situé pour des tests, dans /mnt, par exemple sur la machine pc3 :
    [root@pc3 /]# mkdir /mnt/nfs

     

  • Puis on effectue le montage, sur le point de montage précédent, de la ressource /var/www/html (qui a été exportée par p00 [root@pc3 /]# mount -t nfs p00:/home/httpd/html /mnt/nfs L'utilisateur sur pc3 pourra alors mettre à jour le site WEB distant sur p00

     

  • Syntaxe  générale
    mount -t nfs nom-machine:arborescence point-montage

     

  • Respects par nfs des droits
    Bien sûr les permissions des fichiers importés s'appliquent vis à vis de l'utilisateur, notamment en ce qui concerne la directive (rw). On ne pourra mettre à jour sur la station cliente, un fichier exporté que s'il posséde la permission w vis-à-vis de l'utilisateur.

     

  • Automatisation du montage
    Pour cela, il suffit d'ajouter le contenu de la commande précédente dans une ligne du fichier /etc/fstab

        p01:/home/httpd  /mnt/nfs  nfs  auto, user
     

  • Autres paramètres de montage
    insecure autorise les accès non authentifiés
    rsize=8192 et wsize=8192 augmente le débit de nFS ? intr interrompt une requete NFS en cas de serveur indisponible, permet d'éviter un blocage

Exemple de mise en oeuvre

  • Ce que veut avant tout un utilisateur, c'est pouvoir travailler dans son répertoire personnel situé sur du serveur, à partir d'une station Linux quelconque.
  • Il doit se connecter et s'authentifier sur le serveur NIS qui tient à jour la base de données des comptes utilisateurs
  • Sur le client pc1 on monte la ressource /home exportée sur le serveur sur /home local, au démarrage ou bien en root.
    Ce montage ca masquer les comptes éventuellement présents sur le client
    # mount -t nfs serveur:/home /home
  • Dès lors, l'utilisateur jean accède à ses fichiers par :
    [jean@pc1 ] cd /home/jean

Problèmes rencontrés

  • "Je relance le "démon" nfs par l'exécution du script /etc/rc.d/init.d/nfs start, et ... pas de message, rien ne focntionne !
    Cela est du à la ligne [ -s /etc/exports ] || exit 0 (-s = le fichier n'est pas vide)
    Donc pas de fonctionnement inutile de nfs s'il n'y a aucune ressource à exporter !
  • "J'ai bien déclaré les exportations sur le serveur. Pourtant quand je monte correctement une ressource sur une station, avec la commande mount -f nfs serveur:/ressource /point-de-montage, je constate un blocage ..."
    S'il n'y a pas d'erreur dans le nom de la ressource, c'est sans doute que le nom du serveur n'est pas trouvé par requête DNS, NIS ou en consultant tout simplement le fichier /etc/hosts ...

 Configuration avec Linuxconf

Soit à configurer l'export  : du serveur p00 ---> stations clientes p02,  p03
Pour chaque rép à exporter, on précise la liste des clients :
/home        p02, p03      r
/usr/bin     p02, p03      r
/home/httpd  p03           rw
/usr/public  p03           rw

Après validation, on peut vérifier que la table suivante a été écrite dans le fichier /etc/exports
/home p02(ro), p03(ro)
/usr/bin  p02(ro), p03(ro)
/home/httpd p03(rw)
/usr/public p03(rw)

Publié dans informatique

Commenter cet article