5. Configuration du client NFS

Le rôle du client est d'intégrer un accès au système de fichiers d'un hôte distant dans son arborescence locale. On parle de «montage NFS». Dans un premier temps, on teste les opérations de montage manuel. Bien sûr, ces tests ne peuvent aboutir que si une arborescence à été exportée par un serveur.

Ensuite, on teste les opérations de montage automatisées ou «automontage». Si le serveur NFS n'est pas encore disponible au moment des tests de montage manuel, il faut préparer les fichiers de configuration du service d'automontage.

5.1. Opérations manuelles de (montage|démontage) NFS

Q8.

Quelle est la commande qui permet de tester la disponibilité du service de montage NFS sur un hôte distant ?

Reprendre l'utilisation de la commande qui donne les listes des procédures distantes disponibles. Elle a été identifiée dans la section précédente.

Relativement aux résultats de la section précédente, la liste des services accessibles via RPC sur le serveur NFS s'est étoffée et le service de montage NFS apparaît clairement.

Voici un exemple de résultat utilisant l'adresse IP du serveur NFS.

$ rpcinfo -s fe80::baad:caff:fefe:3
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100005  3,2,1     tcp6,udp6,tcp,udp                mountd      superuser
    100003  4,3       udp6,tcp6,udp,tcp                nfs         superuser
    100227  3         udp6,tcp6,udp,tcp                -           superuser
    100021  4,3,1     tcp6,udp6,tcp,udp                nlockmgr    superuser

Q9.

Quelle est la commande qui permet d'identifier l'arborescence disponible à l'exportation depuis le serveur NFS ?

Rechercher dans la liste des commandes du paquet de service NFS commun au client et au serveur.

Dans la liste des commandes fournies avec le paquet nfs-common, on trouve un programme appelé showmount. Après consultation des pages de manuels, on relève l'option -e qui permet de consulter l'arborescence exportée par un serveur depuis un client. Voici un exemple d'exécution.

$ sudo showmount -e fe80::baad:caff:fefe:3
Export list for fe80::baad:caff:fefe:3:
/home/exports/home 2001:678:3fc:1f5::/64,192.168.51.192/27
/home/exports      2001:678:3fc:1f5::/64,192.168.51.192/27

Les résultats de la copie d'écran ci-dessus supposent que le serveur NFS ait déjà été configurer pour exporter le dossier home.

La commande showmount ne produit aucun résultat si le serveur NFS n'est pas configuré.

Q10.

Quelle est la commande à utiliser pour les opérations de montage manuel ? À quel paquet appartient cette commande ? Cette commande est-elle exclusivement liée au protocole NFS ?

Après avoir consulté le support Linux NFS-HOWTO, interroger la base de données des paquets, rechercher dans le contenus des paquets et consulter les pages de manuels.

La documentation indique que c'est la commande mount qui nous intéresse. On effectue ensuite les recherches avec le gestionnaire de paquets.

$ apt search ^mount$
En train de trier... Fait
Recherche en texte intégral... Fait
mount/testing,now 2.37.2-1 amd64  [installé]
  tools for mounting and manipulating filesystems

$ dpkg -L mount | grep bin
/bin
/bin/mount
/bin/umount
/sbin
/sbin/losetup
/sbin/swapoff
/sbin/swapon

La commande appartient au paquet du même nom. La consultation des pages de manuels $ man mount montre que cette commande n'est pas réservée au seul protocole NFS mais à l'ensemble des opérations de montage pour tous les systèmes de fichiers utilisables.

Q11.

Créer le répertoire /ahome destiné à «recevoir» le contenu répertoires utilisateurs exportés depuis le serveur NFS. Quelle est la syntaxe de la commande permettant de monter le répertoire exporté par le serveur NFS sur ce nouveau répertoire ?

Rechercher dans le support Linux NFS-HOWTO.

Exemple avec l'adresse IPv6 du serveur NFS.

$ sudo mkdir /ahome
$ sudo mount [2001:678:3fc:1f5:baad:caff:fefe:3]:/home /ahome
$ mount | grep nfs
[2001:678:3fc:1f5:baad:caff:fefe:3]:/home on /ahome type nfs4 \
        (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp6,
        timeo=600,retrans=2,sec=sys,clientaddr=2001:678:3fc:1f5:baad:caff:fefe:2,
        local_lock=none,addr=2001:678:3fc:1f5:baad:caff:fefe:3)

Exemple avec l'adresse IPv4 du serveur NFS.

$ sudo mkdir /ahome
$ sudo mount 192.168.51.195:/home /ahome
$ mount | grep nfs
192.168.51.195:/home on /ahome type nfs4 \
        (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,
        timeo=600,retrans=2,sec=sys,clientaddr=192.168.51.194,
        local_lock=none,addr=192.168.51.195)

Q12.

Réaliser une capture lors de l'exécution de la commande ls -lAh /ahome et relever les numéros de ports caractéristiques de ces transactions. Est-il possible de retrouver les informations échangées dans les données de capture ?

La marche à suivre est identique à celle de la même question côté serveur NFS.

  1. On lance la capture de trafic côté serveur NFS.

    $ tshark -i enp0s6 -f "! port 22" -w /var/tmp/ls-nfs.pcap
  2. On exécute la commande ls -lAh /ahome côté client NFS.

  3. Retour côté serveur pour exploiter les résultats.

    $ Capturing on 'enp0s6'
    12 ^C
    $ tshark -V -r /var/tmp/ls-nfs.pcap -Y "frame.number == 11"

L'analyse montre que le protocole NFS en version 4 utilise bien le mode COMPOUND de traitement par lot des appels de procédure distants RPC. On ne relève dans cette capture que les métadonnées système sur les attributs et les permissions relatives à l'arborescence lue.

Si on reprend la même démarche avec la commande cat d'un fichier texte par exemple, le contenu de ce fichier apparaît en clair dans la capture de trafic.

Q13.

Quelles seraient les opérations à effectuer pour configurer le système et rendre un montage NFS statique permanent ?

Rechercher le fichier de configuration système responsable des montages statiques des partitions.

Il est inutile de modifier les fichiers de configuration du système sachant que l'on change de méthode de montage dans la section suivante.

Il faudrait éditer le fichier /etc/fstab pour effectuer un montage statique à chaque initialisation du système. On pourrait par exemple insérer une ligne du type suivant à la fin du fichier.

  • Avec le protocole IPv4 :

    192.168.51.195:/home   /ahome   nfs4    0   0
  • Avec le protocole IPv6 :

    [2001:678:3fc:1f5:baad:caff:fefe:3]:/home   /ahome   nfs4    0   0

Q14.

Quelle est la commande à utiliser pour démonter le dossier /ahome ?

Rechercher cette commande dans la liste des outils forunis avec le paquet mount.

C'est la commande umount qu'il faut utiliser pour «détacher» un dispositif de stockage du système de fichiers. Dans le cas de cette section, la syntaxe est la suivante.

$ sudo umount /ahome

5.2. Opérations automatisées de (montage|démontage) NFS

Dans cette section, on reprend le processus de montage précédent en utilisant le service d'automontage. L'objectif étant de rendre les opérations d'accès au système de fichiers réseau totalement transparentes pour l'utilisateur, le recours au montage manuel doit être évité le plus possible.

Il existe plusieurs implémentations libres pour le service d'automontage. On se limite ici au logiciel lié au noyau Linux.

[Avertissement] Avertissement

Les montages manuels et le service d'automontage ne font pas bon ménage ! Il faut absolument démonter tous les systèmes de fichiers NFS avant d'aborder cette partie.

Q15.

Quel est le paquet qui contient les outils nécessaires au fonctionnement de l'automontage ?

Rechercher le mot clé automount dans les descriptions du gestionnaire de paquets.

$ aptitude search "?description(automount)"
p   afuse                           - automounting file system implemented in user-space
p   autodir                         - Automatically creates home and group directories
p   autofs                          - kernel-based automounter for Linux
p   autofs-hesiod                   - Hesiod map support for autofs
p   autofs-ldap                     - LDAP map support for autofs
p   fusiondirectory-plugin-autofs   - autofs plugin for FusionDirectory
p   libnss-cache                    - NSS module for using nsscache-generated fi
p   libunix-configfile-perl         - Perl interface to various Unix configurati
p   nsscache                        - asynchronously synchronise local NSS databases
p   pmount                          - mount removable devices as normal user
i   systemd                         - system and service manager
i   systemd-sysv                    - system and service manager - SysV links
p   udevil                          - Alternative storage media interface
p   udiskie                         - automounter for removable media for Python
p   vfu                             - Versatile text-based file-manager

Dans le contexte de ces manipulations, c'est le paquet autofs qui nous intéresse.

$ sudo apt install autofs

Q16.

Comment créer un compte utilisateur local baptisé etu-nfs avec un répertoire utilisateur situé sous la racine /ahome dont les fichiers et répertoires sont placés sur le serveur NFS ?

Après consultation des pages de manuels de la commande adduser, on dispose des options de création de compte respectant les deux critères énoncés. L'option --home permet de désigner le répertoire utilisateur dans l'arborescence système et l'option --no-create-home évite la création de ce répertoire sur le système local.

$ sudo adduser --no-create-home --home /ahome/etu-nfs etu-nfs
Attention ! Impossible d'accéder au répertoire personnel que vous avez indiqué (/ahome/etu-nfs) : No such file or directory.
Ajout de l'utilisateur « etu-nfs » ...
Ajout du nouveau groupe « etu-nfs » (1001) ...
Ajout du nouvel utilisateur « etu-nfs » (1001) avec le groupe « etu-nfs » ...
Le répertoire personnel « /ahome/etu-nfs » n'a pas été créé.
Nouveau mot de passe :
Retapez le nouveau mot de passe :
passwd: password updated successfully
Changing the user information for etu-nfs
Enter the new value, or press ENTER for the default
        Full Name []: Etudiant NFS
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Cette information est-elle correcte ? [O/n]

$ id etu-nfs
uid=1001(etu-nfs) gid=1001(etu-nfs) groupes=1001(etu-nfs)

Les identifiants numériques uid/gid jouent un rôle important dans la suite des manipulations. Voir Section 7, « Gestion des droits sur le système de fichiers NFS ».

Q17.

Quels sont les fichiers de configuration du service d'automontage à éditer ou créer pour que l'utilisateur etu-nfs ait accès à ses données personnelles ?

Utiliser les fichiers exemples fournis avec le paquet, les pages de manuels associées et créer un fichier spécifique pour la gestion des comptes utilisateurs.

La liste des fichiers du paquet autofs montre qu'il existe une page de manuel consacrée au fichier principal de configuration du service : /etc/auto.master. Ces informations permettent de configurer un point de montage au dessous duquel doivent se trouver les répertoires utilisateurs. Ces derniers utilisent un fichier de configuration propre : /etc/auto.home.

  1. On définit la racine de montage /ahome dans le fichier de configuration principal /etc/auto.master. Cette racine de montage pointe vers le fichier de configuration dédié au montage automatique des répertoires des utilisateurs.

    Après analyse des commentaires présents dans le fichier /etc/auto.master, on créé un fichier spécifique à notre contexte dans le dossier /etc/auto.master.d/ avec le suffixe .autofs.

    $ echo "/ahome  /etc/auto.home" | \
    sudo tee -a /etc/auto.master.d/ahome.autofs
  2. On créé le fichier /etc/auto.home qui utilise une syntaxe particulière pour que le montage du système de fichiers du serveur soit générique et indépendant du nombre des comptes utilisateurs.

    $ echo "*    -fstype=nfs4    [2001:678:3fc:1f5:baad:caff:fefe:3]:/home/&" | \
    sudo tee -a /etc/auto.home
    • Le premier paramètre est le symbole * qui se substitue au nom d'utilisateur : etu-nfs dans notre exemple.

    • Le deuxième paramètre -fstype=nfs4 correspond à une option de montage qui privilégie la version 4 du protocole NFS. Le jeu des options de montage est le même que pour un montage statique.

    • Le troisième paramètre est l'adresse IPv4 ou IPv6 du serveur. Comme on ne dispose pas d'un service DNS à ce stade de la progression des travaux pratiques, on utilise directement les adresses IP.

    • Le répertoire /home/ correspond à la configuration de l'exportation NFS sur le serveur. Le répertoire /home/ est situé sous la racine d'exportation qui est uniquement connue du serveur.

    • Le symbole & indique la répétition du premier paramètre : le nom d'utilisateur.

  3. Une fois les fichiers de configuration en place, il ne faut pas oublier de redémarrer le service et de contrôler son bon fonctionnement.

    $ sudo systemctl restart autofs
    
    $ systemctl status autofs
    ● autofs.service - Automounts filesystems on demand
         Loaded: loaded (/lib/systemd/system/autofs.service; enabled; vendor preset: enabled)
         Active: active (running) since Sun 2021-08-29 09:42:16 CEST; 51s ago
           Docs: man:autofs(8)
        Process: 8027 ExecStart=/usr/sbin/automount $OPTIONS --pid-file /var/run/autofs.pid (code=exited, status=0/SUCCESS)
       Main PID: 8028 (automount)
          Tasks: 4 (limit: 1131)
         Memory: 1.0M
            CPU: 29ms
         CGroup: /system.slice/autofs.service
                 └─8028 /usr/sbin/automount --pid-file /var/run/autofs.pid
    
    août 29 09:42:16 client-nfs systemd[1]: Starting Automounts filesystems on demand...
    août 29 09:42:16 client-nfs systemd[1]: Started Automounts filesystems on demand.

Q18.

Quelles sont les conditions à respecter sur le client et le serveur NFS pour que l'utilisateur etu-nfs ait la capacité à écrire dans son répertoire personnel ?

Rechercher les attributs d'un compte utilisateur qui correspondent aux propriétés des objets d'un système de fichiers au sens général.

Les identifiants numériques uid/gid doivent nécessairement être identiques sur le client et le serveur NFS. Toute la gestion des droits sur le système de fichiers est conditionnée par ces valeurs.

Q19.

Comment prendre l'identité de l'utilisateur etu-nfs pour tester la validité du montage ?

Cette validation suppose que l'utilisateur puisse atteindre son répertoire et que l'on visualise l'automontage avec les commandes mount et df.

C'est la commande su qui permet de «changer d'identité» sur le système. On l'utilise donc pour prendre l'identité de l'utilisateur dont le répertoire est situé sur le serveur NFS. Pour que l'opération de montage automatique ait lieu, il suffit de se placer dans ce répertoire.

etu@client-nfs:~$ su - etu-nfs
etu-nfs@client-nfs:~$ pwd
/ahome/etu-nfs
etu-nfs@:client-nfs~$ df -HT
Sys. de fichiers                                  Type     Taille Utilisé Dispo Uti% Monté sur
udev                                              devtmpfs   495M       0  495M   0% /dev
tmpfs                                             tmpfs      103M    680k  102M   1% /run
/dev/vda1                                         ext4        72G    2,4G   66G   4% /
tmpfs                                             tmpfs      512M       0  512M   0% /dev/shm
tmpfs                                             tmpfs      5,3M       0  5,3M   0% /run/lock
tmpfs                                             tmpfs      103M       0  103M   0% /run/user/1000
[2001:678:3fc:1f5:baad:caff:fefe:3]:/home/etu-nfs nfs4        72G    2,4G   66G   4% /ahome/etu-nfs
etu-nfs@client-nfs:~$ mount | grep nfs
[2001:678:3fc:1f5:baad:caff:fefe:3]:/home/etu-nfs on /ahome/etu-nfs type nfs4
        (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp6,
        timeo=600,retrans=2,sec=sys,clientaddr=2001:678:3fc:1f5:baad:caff:fefe:2,
        local_lock=none,addr=2001:678:3fc:1f5:baad:caff:fefe:3)

Bien sûr, ces manipulations ne sont possibles que si la configuration du serveur est effective.

Q20.

Réaliser une capture réseau lors de l'exécution des commandes et relever les numéros de ports caractéristiques de ces transactions. Est-il possible de retrouver les informations échangées dans les données de capture ?

La marche à suivre est identique à celle de la même question côté serveur NFS.