Installation des produits clients et serveurs

Sur une debian, et donc sur la Freeduc-Sup, vous pouvez installer les outils nécessaires sur un serveur grâce à apt-get.

Sur le serveur, il faut installer portmap, nfs-common, et nfs-kernel-server.

apt-get install portmap nfs-common nfs-kernel-server

Sur le client, il est faut installer nfs-common et portmat.

apt-get install portmap nfs-common

En ce qui concerne les sécurités, sachez que NFS utilise le wrapper tcp (tcpd). Il est possible de configurer la sécurité via les fichiers /etc/hosts.allow et /etc/hosts.deny. Les protocoles à ouvrir sur le serveur sont statd, nfsd, lockd, rquotad et mountd. Sur le client, il faut permettre à statd d'accèder à localhost.

Vous pouvez activer NFS par la commande /etc/init.d/nfs-kernel-server start. Il vous faudra au préalable avoir défini les ressources à partager (exporter).

Les programmes sur lequel s'appuie le service NFS utilisent les RPC (Remote Procedure Call). Ils s'inscrivent donc auprès du service portmap qui met à jour sa table de service rpc. Voici un extrait de ce que donne la commande rpcinfo -p

 program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100021    1   udp  33065  nlockmgr
    100021    3   udp  33065  nlockmgr
    100021    4   udp  33065  nlockmgr
    100021    1   tcp  38399  nlockmgr
    100021    3   tcp  38399  nlockmgr
    100021    4   tcp  38399  nlockmgr
    100005    1   udp    967  mountd
    100005    1   tcp    970  mountd
    100005    2   udp    967  mountd
    100005    2   tcp    970  mountd
    100005    3   udp    967  mountd
    100005    3   tcp    970  mountd

Voici maintenant les processus qui doivent être actifs sur le serveur NFS.

portmap gére le catalogue des programmes RPC,

mountd est chargé des opérations de montage/démontage d'arborescence,

nfsd exécute les primitives d'accès aux fichiers - requêtes émanant des clients.

Les fichiers de configuration du serveur NFS

/etc/exports décrit ce que le serveur exporte, vers quelles machines le serveur exporte, avec quelles autorisations. Il s'agit d'un fichier texte, qui est éditable avec n'importe quel éditeur. Il centralise la liste de l'ensemble des ressources offertes par cette machine. Notez cependant que le nom de partage est automatiquement celui de la ressource (on ne peut pas partager sous un autre nom), et qu'enfin, on peut ponctuellement partager une ressource sans passer par ce fichier (à la volée : voir exportfs).

Exemple de fichier /etc/exports :

# Ressource  Options   Liste_de_Clients
# Exporte /tmp vers la machine "cli" avec possibilité Read Write (rw)
# rw est l'option par défaut
/tmp  cli(rw) 
#Exporte "/tmp" en lecture seule vers toutes les machines du réseau
/tmp  *(ro)

Les fichiers de configuration du client NFS

Il n'y a pas de fichier particulier. Il suffit que les programmes soient installés (portmap et nfs-common). Pensez à lancer le portmap, sinon le montage restera en attente.

/etc/init.d/portmap start

Les répertoires exportés par un serveur peuvent être “ montés ” manuellement ou à la demande. Nous verrons comment configurer un fichier sur le poste client, afin qu'un dossier soit “ monté ” automatiquement au démarrage du client. Il s'agit dans ce cas de l'utilisation permanente de la ressource.

Exemple Unix de montage NFS

Prenons la configuration précédente ( fichier /etc/exports ci-dessus)

Le client cli1 monte (importe) /tmp de ns1 sur le répertoire local /tempo en utilisant la commande suivante

$mount -t nfs ns1:/tmp /tempo. -t indique le type de SGF - arborescence NFS -

Une fois montée, l'accès à la ressource est transparent.

En fin d'utilisation, le client démonte l'arborescence /tmp en utilisant la commande $umount /tempo

A chaque opération de montage ou démontage, le fichier local /etc/mtab est mis à jour. Il contient la liste des systèmes de fichiers montés (arborescence NFS ou non).

Attention : NFS utilise un cache. Si vous ne voulez pas perdre de données, utiliser une procédure de “ démontage ” des disques ou alors un “ shutdown ” du poste client. Dans les autres cas, vous risquez de perdre les informations logées en cache.

Configuration du serveur

Vérifiez que le noyau supporte le système de fichiers nfs:

Utilisez la commande more /proc/filesystems, voici ce que vous pouvez obtenir.

nodev   pipefs
        ext2
nodev   ramfs
        msdos
        vfat
        iso9660
nodev   usbfs
nodev   nfs

Le système de fichiers nfs doit apparaître. S'il n'apparaît pas, c'est que le système n'est pas compilé avec le support de NFS, ou alors il est compilé pour le charger comme un module. Si c'est le cas, vous pouvez charger le module avec la commande :

insmod nfs

ou encore

modprobe nfs

Le module doit apparaître avec la commande lsmod, et le fichier /proc/filesystems est normalemnt modifié (insmod force l'insertion d'un module dans le noyau, un module pouvant étre un pilote de périphérique par exemple, ou des fonctionnalités de la machine. Modprobe insert le module avec autodétection, afin de vous rendre compte de son bon fonctionnement, ou en donnant les bons paramètres. Lsmod liste les modules présents dans votre noyau, et rmmod permet la suppression d'un module présent dans le noyau).

Le fichier /etc/exports

Ce fichier est utilisé par les daemons pour déterminer les volumes qui seront exportés (accessibles), et quels seront les permissions à accorder sur ces volumes. Il existe autant de lignes que de points de montage. La structure d'une ligne est de la forme :

PointDeMontage  client1(option) clientn(option)

- PointDeMontage est le volume local à exporter,

- Client1 ... Clientn définissent les ordinateurs qui ont le droit d'accéder au volume exporté,

- Option: définit le type d'accès et les permissions.

Exemple de fichier avec la commande more /etc/exports

/tmp   *.archinet.edu(rw)
/usr/local/man *.archinet.edu(ro)

Le dossier /tmp est exporté en lecture et écriture pour tous les ordinateurs du domaine archinet.edu. Le dossier /usr/local/man en lecture uniquement.

Voici quelques options de montage, utiliser man exports pour avoir la liste exhaustive :

Secure : requiert une authentification

Insecure : ne requiert pas d'authentification

ro | rw : lecture uniquement ou lecture écriture

Noaccess : permet d'exclure une partie de l'arborescence pour des clients donnés

Voici un extrait de la page de manuel :

Exemple

# fichier /etc/exports d'exemple
/  		maître(rw) confiance(rw,no_root_squash)
/projects   	proj*.local.domain(rw)
/usr  		*.local.domain(ro) @trusted(rw)
/home/joe  	pc001(rw,all_squash,anonuid=150,anongid=100)
/pub		(ro,insecure,all_squash)

Commentaire :

La première ligne exporte l'ensemble du système de fichiers vers les machines maître et confiance. En plus des droits d'écriture, toute conversion d'UID est abandonnée pour l'hôte confiance.

La deuxième et la troisième ligne montrent des exemples de noms d'hôtes génériques, et de sous-réseaux (`@trusted').

La quatrième ligne montre une entrée pour le client PC/NFS présenté plus haut.

La dernière ligne exporte un répertoire public de FTP, à tous les hôtes dans le monde, en effectuant les requêtes sous le compte anonyme. L'option insecure permet l'accès aux clients dont l'implémentation NFS n'utilise pas un port réservé.

L'identité des utilisateurs

Un des problèmes de NFS va être la gestion des utilisateurs et de leurs droits. Le serveur NFS va tenter d'identifier les users de la machine cliente par rapport au système habituel d'authentification de la machine. Tant que le client et le serveur ne se mettent pas d'accord sur une base commune d'identification, les confusions, voire les attaques, sont possibles. En effet, comment gérer les droits de l'utilisateur Pierre qui vient de la machine client Pluton si notre serveur ne connait aucun utilisateur Pierre ? Et d'abord, comment sait on quel utilisateur est connecté ?

La réponse est simple : par son id. Or, si on a deux systèmes d'authentification différents et autonomes (par exemple, par /etc/passswd, sur chacune des machines), qui dit que l'id de Pierre sur la machine cliente ne sera pas celle de Paul sur la machine serveur ?

En fait, c'est encore pire : Si on ne met pas un système commun d'identification (et pour être sur, d'authentification), on est certain de confondre les utilisateurs. DE MANIERE GENERAL, IL VAUT MIEUX UTILISER NFS DANS UN ENVIRONNEMENT DE CONFIANCE

NFS offre de commandes qui permettent de manipuler les identifiants des utilisateurs afin de plier ceux-ci à notre système de sécurité (contrôle et modification des identifiants donnés par les clients).

Configuration et utilisation du client Unix/Linux

Programmes client

Comme vu plus haut, n'oubiez pas d'avoir portmap actif sur votre client. Les programmes clients à utiliser sont : mount et showmount

Le fichier /etc/fstab

Ce fichier contient une table des volumes montés sur le système. Il est utilisé par les daemons mount, umount, fsck. Les volumes déclarés sont montés au démarrage du système. Voici un extrait de fichier :

Exemple

/dev/hda1  	/   		ext2      defaults   1 1
/dev/hda2  	swap  		swap      defaults   0 0
/dev/fd0   	/mnt/floppy 	ext2      noauto     0 0
/dev/cdrom  	/mnt/cdrom 	iso9660   user,noauto,ro 0 0
ns1:/usr/local/man  /doc  	nfs       rsize=8192,wsize=8192,timeo=14,intr

La dernière ligne indique que le volume /usr/local/man, situé sur le serveur ns1, et qui contient les pages du manuel est un volume nfs, monté sous le nom de local de /doc.

Ce fichier évite d'avoir à “ monter ” manuellement des systèmes de fichiers ou d'avoir à indiquer les points de montage, bien que cela puisse s'avérer parfois nécessaire (utilisation ponctuelle d'une ressource...). L'option auto permet de préciser si le montage doit etre fait automatiquement au démarrage de la machine. L'option noauto permet d'indiquer le montage tel qu'il doit être fait, lors d'une demande manuelle de montage (pratique pour les disquettes, CD et autres lecteurs amovibles).

Montage manuel de système de fichiers

La commande souvent utilisée est de la forme mount -t TypeDeSGF NomDeMontage VolumeMonté.

Vous pourrez avoir toutes les options avec la commande man mount ou une aide plus brève avec mount --help.

Exemple de montage : mount -t nfs ns1:/usr/local/man /doc.

La forme standard de la commande mount est mount -t type périphérique répertoire avec :

Type : type de sgf (fat, vfat, nfs, ext2, minix....) pour nous c'est nfs

Périphérique : nom du fichier exporté sous la forme NomServeur:NomDossierExporté

Répertoire : nom du répertoire local de montage/

Le type de fichier que vous montez est de type nfs, vous utiliserez l'exemple de la commande ci-dessous :

mount -t nfs serveurNFS:/usr/share/doc /mnt/doc

Commentaire : la ligne de commande monte le répertoire exporté /usr/share/doc du serveur serveurNFS, sur le répertoire local du client /mnt/doc.

Le mtab est modifié chaque fois que l'utilisateur “ monte ” ou “ démonte ” un système de fichiers. Le système tient à jour une table des volumes montés.

Attention, l'accès à la commande mount n'est, par défaut, autorisée que pour root.

Il faut rajouter l'option user dans le fichier /etc/fstab, afin qu'un autre utilisateur puisse accéder à cette commande.

Exemple : /dev/cdrom /mnt/cdrom iso9660 noauto,ro

devient /dev/cdrom /mnt/cdrom iso9660 user,noauto,ro

La prise en compte des modifications est dynamique.

La commande mount sans paramètres donne la liste des volumes montés. La commande consulte la table maintenue à jour dans le fichier mtab.

La commande showmount

Cette commande permet d'interroger un hôte distant sur les services NFS qu'il offre, et notamment les volumes qu'il exporte.

showmount -e AdresseIP_ou_NomIP lancée à partir d'un client nous affichera la liste des ressources offertes par sAdresseIP_ou_NomIP (=serveur).

Sur le serveur, showmount -a nous affichera la liste des clients connectés sur chacune de nos ressources.

De même, sur le serveur, la command showmount -e affiche le liste des partages en cours.

Autres commandes d'administration

rpcinfo : (par exemple rpcinfo -p consulte le catalogue des applications RPC (nfsd, mountd sont des applicatifs RPC parmi d'autres).

nfsstat : fournit des statistiques d'utilisation de NFS.

La commande exportfs permet elle aussi d'obtenir la liste des partages en cours, de relancer le service (pour la prise en compte d'éventuelles modifications du fichier /etc/exports, voir même d'effectuer un partage à la volée (sans passer par /etc/exports).

exportfs -v affiche les partages en cours.

exportfs -r active les changements fait dans le fichier de configuration de partage NFS (il fait relire le fichier /etc/exports par le programme serveur).

exportfs machine:/repertoire offre à la volée à machine (qui peut être aussi bien un nom de machine qu'étoile, ou un réseau) le partage /repertoire. On peut passer des options avec -o.

Exemple

#exportfs -v
  /tmp   pluton(rw,root_squash)
#exportfs -o rw,no_root_squash 192.168.*:/opt/sav
#exportfs -v
  /tmp   pluton(rw,root_squash)
  /opt/sav	192.168.*(rw,no_root_squash)