NFSv4 ne fonctionne plus comme NFSv3. Il n’exporte pas des répertoires indépendants, mais un pseudo‑filesystem unique, avec une racine logique obligatoire : le répertoire exporté avec fsid=0.
Le client monte toujours :
server:/
Puis navigue dans l’arborescence construite par le serveur.
Le pseudo‑root (fsid=0)
Le pseudo‑root :
  • sert de racine logique du namespace NFSv4

  • doit être le parent de tous les sous‑exports

  • doit être exporté avec fsid=0

  • contrôle la visibilité et la traversée (avec crossmnt et nohide)

❗ Ce que fsid=0 ne fait PAS
Contrairement à NFSv3, le pseudo‑root n’impose pas ses permissions :
  • son ro n’empêche pas un sous‑export rw

  • son root_squash n’empêche pas un sous‑export no_root_squash

  • ses options ne sont pas héritées par les sous‑répertoires

Le pseudo‑root est un conteneur logique, pas un ACL global.
 
Les sous‑exports
Chaque sous‑répertoire exporté possède ses propres propriétés effectives, qui priment sur celles du pseudo‑root.
Exemple :
/var/nfs/toto *.titi.com(rw,no_root_squash,nohide)
Règle fondamentale

Les permissions appliquées au client sont celles du sous‑export réel, pas celles du fsid=0.

Donc un sous‑export rw reste rw, même si le pseudo‑root est ro.
Traversée et visibilité : crossmnt et nohide
crossmnt
Permet au client de traverser les sous‑exports depuis le pseudo‑root.
nohide
Affiche automatiquement les sous‑exports dans l’arborescence du pseudo‑filesystem.
Sans nohide, le client doit monter explicitement le sous‑export.
 
Vérification côté client
Commande :
nfsstat -m
Elle affiche les options réellement appliquées au point de montage.
 
Bonnes pratiques
✔️ Le pseudo‑root doit être permissif
Exemple recommandé :
/var/nfs *(fsid=0,rw,no_root_squash,crossmnt,sync,no_subtree_check)
Les sous‑exports peuvent ensuite restreindre (ro, root_squash…).
✔️ Les sous‑exports définissent les permissions réelles
Exemple :
/var/nfs/certificats *.tech.pra.rip(ro,root_squash,nohide)
✔️ Rechargement propre
Serveur :
exportfs -rav
systemctl reload nfs-server
Client :
umount /mnt
mount -a
Schéma ASCII du pseudo‑filesystem NFSv4

                NFSv4 pseudo-filesystem
                ====================

                       server:/
                            |
                            |
                 +-------+------------+
                 | fsid=0 export |
                 | /var/nfs           |
                 +-------+------------+
                            |
     -------------------------------------------------
     |                 |                 |           |
     |                 |                 |           |
     titi/            toto/          tata/   autres...
 (rw,nohide)  (rw,nohide)       (ro,nohide)
     |                 |                 |
     |                 |                 |
  [clients]       [clients]         [clients]
  options rw   options rw    options ro
  effectives     effectives      effectives

Lecture du schéma
  • Le pseudo‑root (fsid=0) est juste la racine logique.

  • Chaque sous‑répertoire exporté possède ses propres options effectives.

  • Le client applique les options du sous‑export, pas celles du pseudo‑root.

                            Serveur NFSv4 - Namespace
                            =========================

                                 server:/
                                      |
                                      |
                        +----------+--------------------+
                        |  Pseudo-root export  |
                        |  /var/nfs  [fsid=0]       |
                        |  opts: rw,crossmnt    |
                        +----------+-------------------+
                                      |
      |-------------------------------------------------------------------------
      |                            |                               |                       |
      |                            |                               |                       |
+---+----------+        +---+---------+           +---+-------+           +---+---------+
|  titi/          |        |   toto/     |           |   tata/      |         |   tutu/     |
| /var/nfs/  |       | /var/nfs/ |           | /var/nfs/ |         | /var/nfs/ |
| opts:         |       | opts:       |           | opts:        |         | opts:       |
| rw,nohide|       | rw           |           | ro,nohide|         | rw           |
+---+-----------+       +---+---------+           +---+---------+         +---+---------+
      |                             |                              |                            |
      |                             |                              |                            |
      |                             |                              |                            |
      |                             |                              |                            |
      |                             |                              |                            |
      |                             |                              |                            |
      |                             |                              |                            |
      |                             |                              |                            |
      +-----------------------+-------------------------+----------------------+
                                   |
                          Navigation côté client
                          =======================

Exemples de montages clients et options effectives

Client A (monte la racine NFSv4)
--------------------------------
mount -t nfs4 server:/ /mnt/nfs
=> Accède à /var/nfs/titi via pseudo-root traversal
   Chemin client: /mnt/nfs/var/nfs/titi
   Options effectives pour /mnt/nfs/var/nfs/titi : rw (selon /var/nfs/titi)

Client B (monte le sous-export explicitement)
---------------------------------------------
mount -t nfs4 server:/var/nfs/titi /home/virtual
=> Chemin client: /home/virtual
   Options effectives : rw (selon /var/nfs/titi)

Client C (monte un sous-export en lecture seule)
-----------------------------------------------
mount -t nfs4 server:/var/nfs/tata /srv/tata
=> Chemin client: /srv/tata
   Options effectives : ro (selon /var/nfs/tata)

Client D (monte la racine sans crossmnt côté serveur)
----------------------------------------------------
Si /var/nfs export fsid=0 sans crossmnt, la traversée vers sous-exports peut échouer.
mount -t nfs4 server:/ /mnt/nfs
=> /mnt/nfs/var/nfs/titi peut être inaccessible ou nécessiter montage explicite.

Notes pratiques
---------------
- **fsid=0** : point d’entrée logique, **ne fixe pas** les permissions des sous‑exports.
- **Sous‑export rw** reste **rw** même si fsid=0 est marqué ro.
- Pour visibilité via la racine, exporter fsid=0 avec **crossmnt** et/ou utiliser **nohide** sur les sous‑exports.
- Vérifier côté client avec `nfsstat -m` pour voir les options réellement appliquées.

server:/
server:/