Configuration de NFS

Préalable : Vous utiliserez votre machine virtuelle principale comme serveur et vos machines virtuelles secondaires comme clients.

Les RPC UNIX

Présentation : Le protocle RPC Unix (Remote Procedure Call) permet l'appel à distance (sur un serveur) de procédures. Ce protocole gère le nommage de la procédure, le passage des paramètres (avec traduction d'un système à un autre) et la récupération d'un éventuel résultat. Ce service est une brique de base utilisé par d'autres services (NFS, NIS, rwalld, rwhod, rusers). Nous devons donc vérifier qu'il est opérationnel.

  • Vérifiez la présence des packages :
    dnf -y install rpcbind
    systemctl restart rpcbind
    systemctl enable  rpcbind
    
  • Vérifiez que le portmappeur fonctionne correctement :
    rpcinfo -p localhost
    
  • Vérifiez les éventuelles limitations exprimées dans les fichiers /etc/hosts.allow et /etc/deny.allow (il est possible que ces fichiers n'existent pas/plus).

Le service RPC NFS

Présentation : Le service NFS (Network File System) assure la publication sur le réseau (à partir d'un serveur) et l'utilisation (à partir d'un client) d'une arborescence de fichiers. Pour l'utiliser, nous devons préparer le serveur puis le client. Dans le cadre de cette séance nous allons utiliser la version 3 de NFS, mais une version 4 est également disponible.

Le serveur NFS

Installation. Vérifiez l'installation du serveur NFS :

dnf -y install nfs-utils
systemctl restart nfs-server
systemctl enable  nfs-server

Vérifiez avec rpcinfo -p localhost que le service RPC NFS est bien connu du portmapper (ce dernier étant le système d'aiguillage des RPC). Le service NFS est composé de plusieurs démons : rpc.mountd est à l'écoute des demandes de montages/démontages en provenance des clients et les démons nfsd s'occupent des demandes d'entrées/sorties.

Configuration. Les répertoires publiés par NFS sont listés dans le fichier /etc/exports. Chaque ligne à la forme suivante Vous pouvez donc exporter un répertoire vers des clients particuliers en utlisant des options adaptées aux clients.

répertoire  client1(options) client2(options) ...

Un client est

  • soit le nom d'une machine,
  • soit une adresse IP,
  • soit un nom incomplet (par exemple *.idl.fr),
  • soit un réseau de la forme adresse/masque-réseau (par exemple 192.168.0.0/255.255.255.0 ou 192.168.0.0/24).

Les options les plus importantes sont (man exports pour les autres)

  • ro (lecture seule),
  • rw (lecture écriture),
  • no_root_squash (les fichiers appartenant à root sur le serveur appartiennent à root sur le client).

Voila un exemple tiré du manuel :

# sample /etc/exports file
/            master(rw) trusty(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)

Mise en oeuvre sur le serveur VM

Quelques manipulations :

Créer un répertoire pour l'exporter
mkdir /var/mes-exports
cd /var/mes-exports
dd if=/dev/zero of=fichier.txt bs=1k count=10
echo fini
Déclarer l'exportation
cat <<EOF >> /etc/exports

/var/mes-exports  192.168.0.0/24(rw,no_root_squash)

EOF
Exporter et vérifier
exportfs -a              # exporter
exportfs -v              # vérifier
showmount -e             # lister les exportations

Le client NFS

Commencez par installer le service NFS client :

dnf -y install nfs-utils

Pour utiliser un répertoire exporté par NFS, il suffit de le monter en utilisant la commande mount ci-dessous:

Pour savoir ce qui est exporté
showmount -e 192.168.0.10
Monter le répertoire exporté
mkdir /tmp/montage
mount -t nfs 192.168.0.10:/var/mes-exports /tmp/montage
Utiliser le répertoire exporté
ls -l /tmp/montage
touch /tmp/montage/un-autre-fichier.txt

Vérifiez le montage à partir du poste serveur (avec showmount -a).

Exercices

  • Vérifiez sur le poste client le propriétaire des fichiers exportés à partir d'un poste serveur. Que peut-on en déduire ? Que se passe-t-il quand un utilisateur sur le poste client a le même UID qu'un autre utilisateur défini sur le poste serveur ?
  • Identifiez le comportement particulier du service NFS quand le propriétaire d'un fichier est l'administrateur du poste serveur. Quel est le résultat sur le poste client ? Activez ensuite l'option no_root_squash. Le comportement précédent est-il modifié ?
  • Les services NFS sont paramétrés finement via les fichiers /etc/nfs.conf et /etc/nfsmount.conf. Dans le premier, repérez la ligne qui indique le nombre de threads et diminuez le à 2. Vérifiez le bon fonctionnement :
    systemctl restart nfs-server.service
    ps aux | grep nfsd