Serveur NFS


Dans un système Unix, les lecteurs ne sont pas représentés par des lettres comme dans un système Windows. L'ensemble des lecteurs possibles forme une seule arborescence ; on garde pour mémoire l'emplacement physique des différents lecteurs simplement en les requérant dans différents répertoires de l'arborescence.

Dans cette optique, on peut rajouter des lecteurs distants (physiquement distants) dans son arborescence, est créé un serveur de fichiers qui sera transparent pour les utilisateurs non avertis.

Ce serveur de fichiers, le plus simple est le plus léger qui soit, est nommé N. F. S. (network file system). Il est très léger en termes de ressources réseau, parce qu'il délègue à l'authentification de l'utilisateur qui se connecte au serveur lui-même. Les requêtes elles-mêmes sont réduites alors plus simples expressions. L'ensemble de la bande passante est donc attribuer pour le contenu (ce qui intéresse l'utilisateur).


Pour mettre en place un serveur N. F. S., il faut quatre étapes :

mettre en place le réseau : tant sur les machines clientes que sur les machines serveur, il faut bien sûr que les paramètres du réseau local soient renseignés en sorte que les machines accèdent correctement au réseau.

Choisir les partages : sur le serveur, il faut décider quels répertoires vont être accessibles par le réseau. Il faut prendre en compte le fait que tous les sous répertoires d'un répertoire partagé seront eux aussi partagés (sauf s'il se trouve sur notre partition physique que la partition du répertoire principal : dans ce cas on ne verra que les sous répertoires qui sont sur la même partition que le répertoire principal). Par ailleurs, une politique raisonnée d'administration de serveur implique de paramétrer des quotas, ainsi que des droits précis sur certains répertoires de l'arborescence. On pourra par exemple mettre en place une partition spécifique réservée aux partages. Ces détails ne font pas l'objet de ce cours.

Sur le serveur, ajuster la sécurité pour N. F. S. : le serveur présente possibilité de paramétrer les droits en lecture et en écriture, en plus des droits propres de la machine. Il va de soi que les droits du serveur N. F. S. devrait être cohérent avec les droits propres du répertoire considéré, mais que ces quelques lignes de paramètres N. F. S. ne remplacent pas la politique globale de sécurité mentionnée plus haut.

Monter le répertoire : sur le client, il faut remonter les répertoires partagés du serveur, en les requérant dans le réseau. Cette étape qu'il ne faut pas oublier : le fait d'abord l'autorisation d'accès à un répertoire ne le rend pas auto montable.


Le serveur N. F. S. est composé de trois outils, qui se trouve dans les paquetages RPM portmap et nfs-tutils :

Portmap : ce composant est essentiel, et il est souvent oublié sur les serveurs N. F. S. qui ne fonctionnent pas ! Il aiguille les requêtes envoyées par d'autres machines vers le service RPC approprié. Rappelons que RPC est un composant essentiel du processus de communication réseau sous TCP/IP. C'est lui qui va être chargé d'établir l'appel vers une autre machine, d'identifier le numéro de port approprié, ainsi que le protocole utilisé (TCP ou UDP). Sur le serveur N. F. S. on a aussi besoin bien sûr de rpc.nfsd, le démon qui va écouter l'appel de N. F. S. sur le réseau.

Nfs : c'est un composant des noyaux qui traduit les requêtes N. F. S. en requêtes interprétables par le système de fichier local.

Rpc.mountd. : c'est le composant qu'il a monté et démonter les systèmes de fichiers distants.


Tous ces outils utilisés des démons qui sont lancés au démarrage par les scripts d'initialisation standard portmap et nfs, de la manière habituelle. Ils sont nécessaires tant sur le client que sur le serveur.

Pour vérifier que ces services fonctionnent, on utilisera rpcinfo –p mamachine, ou le paramètre est un standard de chaque démon (/etc/rc.d/init.d/portmap status, /etc/rc.d/init.d/nfs status).


Paramétrage du serveur :

les répertoires qui vont pouvoir être mis à disposition du réseau sont dits « répertoires exportés ». Ils sont définis dans le fichier /etc/exports.

Ce fichier peut être édité en tant que root est renseigné à la main. Voici un exemple de ce fichier, qui permettra d'en comprendre le paramétrage :

/var/ftp/pub *.mydomain.com (ro) serveur.mydomain.com (rw)

/data/slides serveur2.mydomain.com(rw)

/data/meetings 192.168.0.0/255.255.255.0

/pub (ro, insecure, all_squash)

/home machine1(rw, squash uids=0-99) machine3(rw, squash uids=0-99)


Dans cet exemple, le répertoire /var/ftp/pub est partagé pour toutes les machines du domaine mydomain.com, ainsi que pour la machine serveur.mydoamin.com. Le partage n'est pas le même pour tous : les machines du domaine mydomain.com auront un simple droit en lecture, alors que le serveur serveur.mydomain.com aura un droit en lecture et en écriture sur ce répertoire.

Dans le même état d'esprit, le répertoire /data/slides sera accessible en lecture et en écriture pour la seule machine serveur2.mydomain.com.

Par contre, le répertoire /data/meetings sera partagé pour tous les membres du réseau local dont l'adresse IP commence par 192.168.0.

On voit que l'on peut renseigner les machines clientes en les désignant par leur nom (éventuellement avec un caractère d'échappement *), ou par leur adresse IP, soit complète, soient renseignés à l'aide d'un masque. Dans le masque, le numéro 255 sert de caractère d'échappement (si le masque est construit différemment que sur un octet, on utilisera évidemment le Broadcast correspondant). S'il y a plusieurs machines clientes autorisées, on n'en fait la liste en les séparent par un espace.

Dans cette troisième ligne, on n'a pas précisé les droits de ce répertoire. Par défaut, ils seront donc sur lecture seule (ro).

Le répertoire /pub, lui, est partagé en lecture seule. On ne précise pas de client autorisé : en conséquence, toutes les machines qui se connecteront au serveur seront autorisés à lire ce répertoire. On précise l'option insecure, qui signifie que même les clients disposant d'une version N. F. S. non sécurisé pourront accéder à sa lecture. Enfin, on précise aussi all_squash, ce qui signifie que tous les utilisateurs et groupes qui se connecteront assez répertoire seront assimilés à l'utilisateur anonyme (anonymous), ce qui affectera évidemment lors droit sur la machine.

Enfin, le répertoire /home sera accessible à partir des seules machine1 et machine3. Ces deux aux ordinateurs auront des droits en lecture et en écriture ; en revanche, l'utilisateur qui se connectera depuis ces machines ne pourra pas avoir un numéro inférieur à cent. De la sorte, on élimine les comptes administratifs, et en particulier root. Cette configuration est classique pour permettre à l'utilisateur qui utilise deux aux ordinateurs (la machine locale et la machine1 par exemple) a conservé un libre accès à ces données, qui seront stockés sur une seule des deux machines.


Droit d'accès des répertoires :

voici un récapitulatif des options d'accès que l'on peut définir sur les répertoires partagés :

ro : n'autorise le montage du répertoire partagé qu'en lecture. C'est l'option par défaut qui est choisi si le mode de partage n'est pas renseigné.

Rw : précise explicitement que le répertoire partagé pourrait être accédé en lecture et en écriture. Cependant, le client pourra toujours choisir de démonter le répertoire qu'en lecture seule. Ce paramètre est celui du serveur.

Noaccess : tous les fichiers et sous répertoire du répertoire considéré ne seront pas accessibles. Cette option est utilisée classiquement pour interdire l'accès à un sou répertoire d'un répertoire qui lui-même partagé. Dans cette option cependant, le répertoire interdit reste visible pour le client, qui ne peut simplement pas l'ouvrir.

Link_relative : on utilise cette option pour préciser que si un chemin absolu est renseigné pour désigner un fichier ou répertoire (du type /var/www :html :toto.txt), le serveur N. F. S. convertira ce chemin absolu en chemin relatif à partir du répertoire partagé. De la sorte le client pourra accéder à l'ensemble de l'arborescence même s'il ignore la position exacte du répertoire partagé.

Link_absolute : c’est l’option contraire, les liens absolus seront pris comme tels, à partir du point partagé. C’est l’option par défaut.

No_root_squash : normalement, l'utilisateur root de la machine clientes est assimilée sur le serveur à l'utilisateur anonymous pour des raisons évidentes de sécurité. Mais dans le cas où l'administrateur des deux machines est la même personne, on peut choisir de ne pas faire cette assimilation : c'est ce que permet cette option.

squash uids=0-99 : Root est un cas particulier, mais il peut être prudent de décider d'assimiler d'autres utilisateurs que l'administrateur à l'utilisateur anonyme. C'est typiquement le cas des comptes d'administration, dont le numéro et compris entre 0 et 99. Cette option permet de décider que tous ses comptes auront les mêmes droits sur la machine serveur que l'utilisateur anonymous.

Map_static : l'une des difficultés du serveur N. F. S. éculé utilisateur sont identifiés par leur nom et par leur numéro. Ceci produit des effets que vous expérimenterez dans la partie travaux pratiques. En particulier, si un utilisateur nommé Tom (uid 112), sur la machine1, à un compte sur le serveur avec le même nom et le même numéro, il se connectera correctement, et les fichiers qui créera sur le serveur seront référencés comme lui appartenant tout à fait normalement. Par contre, s'il n'a pas le même numéro sur le serveur, il sera identifié comme l'utilisateur possédant le numéro 112. C'est là que prend tout son sens à la démarche qui consiste à créer sur chaque machine des utilisateurs en précisant le numéro qu'on veut le voire obtenir. De la sorte, on est assuré qu'un utilisateur pas sur toutes les machines du réseau le même numéro d'identification. L'option map_static permet d'attribuer la propriété d'un fichier créé sur le serveur à la personne identifiée sur la machine clientes.


Mis en place du serveur :

une fois que les fichiers qui doivent être partagés ont été définis, il reste invalidé leur mise à disposition au niveau du réseau. Cette procédure se fait en utilisant la commande exportfs –a –v. L'option –a permet d'exporter l'ensemble des répertoires partageables, et l'option –v la rend verbeuse, ce qui permet d'être alerté si une ligne du fichier exports est mal rédigée.

Ce deux autres arguments peuvent être utilisés valablement à cette étape :

Exportfs –r, qui met un journaliste des éléments partagés sur le serveur après modification du fichier exports.

Exportfs –u, qui désactive l'export de l'élément partagé nommé en arguments, ou de tout les répertoires partagés si l'argument est –a.


Une fois exports accomplie on peut vérifier la liste des éléments disponibles sur une machine en tapant la commande :showmount –e machine.


À ce stade, il conviendra de s'assurer que le serveur N. F. S. et démarrer, ainsi que son pendant nfslock, qui permet d'éviter qu'un fichier stratégique du système serveur soit utilisé en écriture simultanément par plusieurs utilisateurs distants.

On s'assurera du fonctionnement de ces deux serveurs par les arguments de statut standard (/etc/init.d/nfs status, /etc/init.d/nfslock status), et on les démarrera au besoin.


Utilisation de N. F. S. :

une fois le serveur mis en place, on peut tenter un accès depuis une machine cliente. La procédure est simple, il suffit de démonter le répertoire partagé dans l'arborescence.

Par exemple, si la machine nommée serveur à un répertoire nommé /tmp qui est en partage, et qu'on souhaite le monter dans le répertoire standard /mnt, on commencera par créer par exemple un répertoire nommé /mnt/serveur (le nom serveur n'est pas obligatoire, mais il est pratique pour savoir ce qu'elle machine est en fait localisée le répertoire correspondant. On pourrait appeler ce répertoire Toto, et le localisé n'importe où ailleurs dans l'arborescence locale).

Ensuite, il suffit de monter à cet endroit le répertoire partagé, en entrant la commande :

Mount serveur:/tmp /mnt/serveur.

La procédure est simple, et s'arrête là. Si elle a échoué, c'est vraisemblablement qu'il y a un problème de paramétrage sur le serveur, ou que l'utilisateur de la machine clientes n'existe pas sur la machine serveur.

On peut utiliser la commande mount, qui donnera la liste de toutes l'arborescence monter sur la machine locale. On devrait voir apparaître dans la liste le répertoire de la machine serveur.


La procédure de montage manuel et la plus simple. Mais si le répertoire de la machine serveur est utilisé fréquemment par la machine clientes (si le serveur est par exemple spécifiquement serveur de fichiers), il peut être utile de procéder au montage automatique des répertoires N. F. S. au démarrage de la machine clientes.

Le fichier /etc/fstab contient la liste de tout ce que doit monter la machine au démarrage. Il suffit de rajouter la ligne correspondante aux répertoires N. F. S. utilisé :

Serveur:/tmp /mnt/serveur nfs auto, rw 0 0

Cette ligne indique que le répertoire /tmp de la machine serveur sera montée au démarrage dans le répertoire /mnt/serveur, qu'il s'agit d'un partage de type N. F. S., monter automatiquement au démarrage (auto ; on pourrait écrire noauto, pour interdire le montage automatique. Mais le sens en serait étrange. On utilise cet argument dans la cas de montages particulier types lecteurs de cd-rom, qui ne contiennent pas forcément de CD au démarrage. Ajouter un montage auto non-automatique pour nfs ne serait pas logique). On précise aussi que l'accès (vue du côté du client) se fait en lecture et en écriture. On ajoutera les chiffres 0 0 en fin de ligne ; on se référera au cours sur Linux pour en expliciter le sens.

Il existe de nombreuses options en plus de noauto. On se référera à man mount et info fstab pour les détails.

Il va de soi que la procédure de montage automatique ne fonctionne que si le serveur et démarrer au moment où la machine clientes s'initialiser.


Une fois qu'un partage N. F. S. est monté, le démonter est très facile : il suffit et d'utiliser la commande umount avec en cible ce soir le répertoire local soit le répertoire distant :

Umount serveur:/tmp

Umount /mnt/serveur

ces deux commandes produiront le même effet.

Si cette commande produit un message « device is busy », cela signifie que le répertoire contente de démonter est en cours d'utilisation. Classiquement, une console (un shell) est ouvert quelque part à l'endroit de l'arborescence que l'on veut démonter. Il suffit de remonter en dehors de cette arborescence pour pouvoir démonter correctement


N. F. S. est un serveur de fichiers très puissants et très simples. Sa simplicité et d'ailleurs ce qui rend sa configuration sujette à précaution, et qui découragent souvent les utilisateurs débutants. Mais une fois qu'on en maîtriser les principes, il est très pratique. Une utilisation très courante consiste à partager le répertoire /home, de façon à ce que les utilisateurs du réseau puissent de n'importe quelle machine accéder alors donner sur le serveur de fichiers.

Un autre usage standard consiste à partager le répertoire /var/spool/mail, de façon là encore à ce que les utilisateurs puissent accéder alors message depuis n'importe quel point du réseau.

Une utilisation plus pointue consiste à partager pour l'administrateur le répertoire /var/log du machine stratégique : de la sorte il pourra surveiller les messages émis par cette machine depuis n'importe quel autre ordinateur distant du réseau.

Enfin, une autre utilisation classique consiste à créer et partager un répertoire de type groupe de travail (/tmp/projetc par exemple).

L'avantage indéniable de N. F. S. et qu'il est pris en charge par toutes les machines de type Unix system V, ce qui permet de partager des données très facilement sur un parc hétérogène de machine. Évidemment, cette procédure ne concerne pas les machines Windows, qui est le composant d'un protocole complexe nommé SMB (simple message block, le simple n'ayant de simples que le nom), nécessaire à la circulation des données sur le réseau. Pour l'utilisateur, l'utilisation de ce processus est assez transparente est simple, puisqu'elle se fait en quelque clics. Mais la transmission sur le réseau des données correspondantes est bien plus lourde tant du côté du client que du côté du serveur à l'utilisation.