5. Déployer l'exportation NFSv4

Cette partie reprend les étapes décrites dans le support Introduction au système de fichiers réseau NFSv4. Les certificats TLS du service NFS (Section 3.2, « Définir les objets gérés par l'autorité de certification » et Section 3.3, « Installer les paquets TLS et générer les certificats ») ainsi que le keytab système /etc/krb5.keytab (Section 3.4, « Installer et initialiser le service Kerberos ») sont déjà déployés. Contrairement au support d'origine, qui active la sécurité en deux temps, avec d'abord une exportation en clair, puis sa version sécurisée, il ne reste ici qu'à installer le paquet correspondant au serveur NFS et à écrire directement la version sécurisée du fichier /etc/exports.

5.1. Configurer l'exportation sur le serveur NFSv4

Q207.

Comment installer et valider les services communs au client et au serveur NFS ?

Recherchez et installer le paquet, puis contrôler la liste des processus et des numéros de port ouverts.

Reprenez ici les questions de la partie Gestion des paquets NFS.

  • Identifiez le paquet à installer.

    apt search --names-only ^nfs- | grep -Ev '(ganesh|^$)'
    En train de trier…
    Recherche en texte intégral…
    nfs-common/testing 1:2.9.2-1 amd64
      fichiers de prise en charge NFS communs au client et au serveur
      NFS server in User Space
    nfs-kernel-server/testing 1:2.9.2-1 amd64
    gestion du serveur NFS du noyau
  • Listez les processus actifs après avoir installé le paquet serveur.

    sudo apt -y install nfs-kernel-server
    pgrep -af nfs
    pgrep -af rpc

Q208.

Comment configurer l'exportation d'une arborescence avec le protocole NFS ?

Reprenez les questions de la partie Configuration du serveur NFS, mais on va directement à la syntaxe sécurisée déjà mise au point dans ce même support, puisque le royaume Kerberos et l'autorité de certification TLS communs à l'annuaire et au partage NFS ont déjà été déployés dans les parties Section 3.4, « Installer et initialiser le service Kerberos » et Section 3.3, « Installer les paquets TLS et générer les certificats ».

  • Créez l'arborescence d'exportation NFS.

    sudo mkdir -p /home/exports/home
  • Ajoutez les instructions d'exportation dans le fichier de configuration du serveur NFS : /etc/exports. Les réseaux IPv4 et IPv6 correspondent au plan d'adressage de la maquette (Tableau 2, « Plan d'adressage de la maquette « Association LDAP, NFSv4 et autofs » »).

    cat << EOF | sudo tee /etc/exports
    /home/exports           172.28.VVV.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check,sec=krb5p,xprtsec=tls:mtls)
    /home/exports/home      172.28.VVV.0/24(rw,sync,no_subtree_check,sec=krb5p,xprtsec=tls:mtls)
    
    /home/exports           2001:db8:VVVV::/64(rw,sync,fsid=0,crossmnt,no_subtree_check,sec=krb5p,xprtsec=tls:mtls)
    /home/exports/home      2001:db8:VVVV::/64(rw,sync,no_subtree_check,sec=krb5p,xprtsec=tls:mtls)
    EOF

    Les options entre parenthèses sont documentées dans les pages de manuels exports : man 5 exports. Les cinq premières reprennent exactement celles déjà étudiées dans le support Introduction au système de fichiers réseau NFSv4 :

    • rw : autorise les requêtes en lecture et en écriture sur le volume NFS. Le comportement par défaut consiste à interdire toute requête susceptible de modifier le système de fichiers.

    • sync : ne répondre aux requêtes qu'après l'exécution de tous les changements sur le support réel.

    • fsid=0 : avec NFSv4, un système de fichiers particulier est la racine de tous les systèmes de fichiers partagés. Il est défini par fsid=root ou fsid=0, qui signifient exactement la même chose.

    • crossmnt : cette option permet aux clients de se déplacer du système de fichiers marqué crossmnt vers les systèmes de fichiers partagés montés dessus. Voir l'option nohide.

    • no_subtree_check : cette option neutralise la vérification des sous-répertoires, ce qui a des implications subtiles en matière de sécurité, mais peut améliorer la fiabilité dans certains cas.

    Les deux dernières options imposent la sécurisation des échanges et réutilisent les ressources déjà déployées :

    • sec=krb5p : authentification et confidentialité complète (chiffrement des données et des métadonnées) à partir du principal nfs/nfs-srvr.lab.local@LAB.LOCAL extrait dans /etc/krb5.keytab.

    • xprtsec=tls:mtls : chiffrement de transport avec authentification mutuelle TLS, porté par tlshd à partir des certificats nfs-srvr.crt et nfs-srvr.key.

  • N'oubliez pas de redémarrer le service après avoir édité le fichier de configuration pour tenir compte des dernières modifications.

    sudo systemctl restart nfs-kernel-server.service
    systemctl status nfs-kernel-server.service

Q209.

Comment valider la configuration de l'exportation réalisée par le serveur NFS ?

Reprenez la question sur la la commande qui permet d'identifier l'arborescence disponible à l'exportation.

  • Côté client, utilisez la commande showmount suivie de l'option -e et de l'adresse ou du nom du serveur à interroger.

    sudo apt -y install nfs-common
    sudo showmount -e nfs-srvr.lab.local
    Export list for nfs-srvr.lab.local:
    /home/exports/home 2001:db8:VVVV::/64,172.28.VVV.0/24
    /home/exports      2001:db8:VVVV::/64,172.28.VVV.0/24
  • Côté serveur, on utilise la commande exportfs.

    sudo exportfs -v
    /home/exports   172.28.VVV.0/24(sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=krb5p,rw,secure,root_squash,no_all_squash,xprtsec=tls:mtls)
    /home/exports   2001:db8:VVVV::/64(sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=krb5p,rw,secure,root_squash,no_all_squash,xprtsec=tls:mtls)
    /home/exports/home    172.28.VVV.0/24(sync,wdelay,hide,no_subtree_check,sec=krb5p,rw,secure,root_squash,no_all_squash,xprtsec=tls:mtls)
    /home/exports/home    2001:db8:VVVV::/64(sync,wdelay,hide,no_subtree_check,sec=krb5p,rw,secure,root_squash,no_all_squash,xprtsec=tls:mtls)

5.2. Assurer la cohérence du schéma de nommage entre serveur et client

Du point de vue métier, l'opérateur du réseau de stockage doit respecter le schéma de nommage qui veut que l'arborescence soit identique entre serveur et client. Dans ce but, réaliser un montage local permet de faire pointer l'arborescence partagée sur un volume de stockage donné. Ce volume de stockage pourra changer au cours du temps tout en respectant le schéma de nommage.

Q210.

Quel est le montage local à mettre en place pour garantir la cohérence du schéma de nommage entre les postes serveur et client ?

Reprenez la question sur la distinction entre les versions 3 et 4 du protocole NFS et sur le contexte de nommage.

  • Créez, sur le serveur, la racine commune entre client et serveur.

    sudo mkdir /ahome
  • Créez un montage local entre la racine commune et l'arborescence exportée par le service NFS.

    cat << EOF | sudo tee -a /etc/fstab
    
    /home/exports/home     /ahome  none    defaults,bind    0    0
    EOF
    
    sudo mount -a

5.3. Créer automatiquement les répertoires utilisateurs

Cette section correspond aux traitements réalisés lors de la première utilisation du service par un nouvel utilisateur.

L'opération se déroule en trois étapes, car il est impossible de créer un répertoire utilisateur directement depuis le client : la création doit être provoquée sur le serveur lui-même.

  1. Configurer le serveur comme client de son propre annuaire LDAP, au même titre que le client NFSv4.

  2. Activer, sur le serveur, l'appel au module de création automatique des répertoires utilisateurs.

  3. Provoquer cette création en ouvrant une première connexion sur le serveur, via SSH depuis le client par exemple : toutes les connexions suivantes depuis un client NFSv4 réutiliseront l'arborescence créée lors de cette première connexion.

Q211.

Pourquoi la création du répertoire doit-elle être provoquée par une connexion sur le serveur, et non par une simple connexion sur le client ?

Un montage NFSv4, qu'il soit manuel ou déclenché par autofs, suppose que le répertoire distant existe déjà côté serveur : on ne monte jamais un chemin absent. Tant que /home/exports/home/anakin n'existe pas sur le serveur, toute tentative de montage de nfs-srvr.lab.local:/home/anakin depuis le client échoue, que cette tentative soit manuelle ou automatique. Une connexion sur le client ne peut donc rien créer côté serveur : c'est uniquement une connexion ouverte directement sur le serveur, via sa racine locale /ahome (Section 5.2, « Assurer la cohérence du schéma de nommage entre serveur et client »), qui permet au module mkhomedir de créer réellement l'arborescence sur le support physique.

[Attention] Attention

Le module mkhomedir ne doit être activé que sur le serveur. S'il l'était aussi sur le client, une connexion antérieure à la création réelle du répertoire créerait, sous /ahome, un répertoire local ordinaire au lieu de déclencher le montage NFSv4 attendu : ce répertoire local masquerait ensuite le partage réseau, sans jamais être visible depuis un autre client.

Q212.

Comment configurer le serveur comme client de son propre annuaire LDAP ?

Contrairement au client (Section 4.4, « Configurer l'accès transparent à l'annuaire depuis le client »), le serveur n'a encore reçu aucun paquet NSS/PAM LDAP : son installation se fait donc en une seule fois, debconf pré-rempli avant l'installation plutôt qu'après.

Le compte de service nslcd-proxy et son mot de passe ont déjà été créés directement sur le serveur (Section 4.4, « Configurer l'accès transparent à l'annuaire depuis le client ») : il suffit de les réutiliser, sans transfert préalable.

sudo install -m 400 ~/.ldap_nslcd-proxy_pass /root/
cat << 'SCRIPT_EOF' >configure-nslcd-server.sh
#!/usr/bin/env bash
set -euo pipefail

# 1. Vérification des privilèges
if [[ ${EUID} -ne 0 ]]; then
  echo "Erreur : ce script doit être exécuté par root (sudo $0)." >&2
  exit 1
fi

readonly PROXY_DN="uid=nslcd-proxy,ou=users,dc=lab,dc=local"
PASS_FILE="/root/.ldap_nslcd-proxy_pass"

if [[ ! -s "${PASS_FILE}" ]]; then
  echo "Erreur : secret introuvable dans ${PASS_FILE}." >&2
  exit 1
fi

PROXY_PASS=$(head -n 1 "${PASS_FILE}")
readonly PROXY_PASS

echo "=== 1. Pre-seeding debconf ==="
debconf-set-selections <<EOF
nslcd nslcd/ldap-uris string ldaps://ldap-srvr.lab.local
nslcd nslcd/ldap-base string dc=lab,dc=local
nslcd nslcd/ldap-auth-type select simple
nslcd nslcd/ldap-starttls boolean false
nslcd nslcd/ldap-reqcert select demand
nslcd nslcd/ldap-cacertfile string /etc/ssl/certs/labCA.crt
nslcd nslcd/ldap-binddn string ${PROXY_DN}
nslcd nslcd/ldap-bindpw password ${PROXY_PASS}
libnss-ldapd libnss-ldapd/nsswitch multiselect passwd, group, shadow
EOF

echo "=== 2. Installation des paquets ==="
apt update -qq
DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \
  nslcd libnss-ldapd libpam-ldapd nslcd-utils

echo "=== 3. Redémarrage du service ==="
systemctl restart nslcd

echo ""
echo "Succès : serveur configuré comme client LDAP."
SCRIPT_EOF
sudo bash configure-nslcd-server.sh

Vérifiez que la résolution des comptes fonctionne désormais aussi sur le serveur.

id anakin
uid=10001(anakin) gid=10001(anakin) groupes=10001(anakin),100(users)

Q213.

Comment activer, sur le serveur, l'appel au module de création automatique des répertoires utilisateurs ?

Recherchez les fonctions de création automatique des répertoires utilisateurs dans la liste des paquets de la distribution.

Sur le serveur, on complète le fichier commun de gestion de session : /etc/pam.d/common-session.

sudo pam-auth-update --package --enable mkhomedir

Vérifiez le résultat en recherchant la clé mkhomedir dans les fichiers du répertoire /etc/pam.d/.

grep mkhomedir /etc/pam.d/*
/etc/pam.d/common-session:session optional                        pam_mkhomedir.so

Q214.

Comment provoquer et valider cette création depuis le client, sans supposer que l'automontage autofs soit déjà effectif ?

Depuis le client clnt.lab.local, on ouvre une connexion SSH directe vers le serveur srvr.lab.local avec l'identité d'un compte qui n'existe que dans l'annuaire, par exemple anakin.

etu@clnt:~$ ssh -o StrictHostKeyChecking=accept-new anakin@srvr.lab.local
(anakin@srvr.lab.local) Password:
Linux srvr 7.1.12+deb14-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 7.1.12-1 (2026-08-28) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Creating directory '/ahome/anakin'.
anakin@srvr:~$ pwd
/ahome/anakin
anakin@srvr:~$ ls -l /home/exports/home/
total 4
drwx------ 2 anakin anakin 4096  6 sept. 17:22 anakin

Le chemin affiché confirme que le répertoire vient d'être créé sous la racine commune /ahome mise en place dans la sous-partie précédente (Section 5.2, « Assurer la cohérence du schéma de nommage entre serveur et client »), alors même qu'aucun montage NFSv4 n'est intervenu : la session SSH s'est ouverte directement sur le serveur.

Une seconde connexion permet de vérifier le caractère idempotent du traitement : le message de création ne doit plus apparaître.

etu@clnt:~$ ssh anakin@srvr.lab.local
(anakin@srvr.lab.local) Password:
Linux srvr 7.1.12+deb14-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 7.1.12-1 (2026-08-28) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
anakin@srvr:~$ pwd
/ahome/anakin
[Note] Note

Le test de l'automontage effectif du répertoire personnel depuis un client NFSv4, avec les options sec=krb5p et xprtsec=mtls, est traité séparément dans la partie Section 7.1, « Automontage NFS à partir de la configuration publiée par l'annuaire LDAP », une fois le service autofs configuré (Section 6, « Intégrer la configuration de l'automontage dans l'annuaire LDAP »).