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:/