Comprendre NFS4 (serveur Linux)

26

J'ai été un peu gêné par NFS4 sous Linux. Certaines informations «là-bas» semblent entrer en conflit avec d'autres informations, et d'autres informations semblent difficiles à trouver. Voici donc deux ou trois choses qui ont attiré mon attention, j'espère que quelqu'un là-bas pourra nous éclairer à ce sujet.

Cette question se concentre exclusivement sur NFS4 sans Kerberos, etc.

1. Exportations

La exportspage de manuel contient des informations ambiguës sur la structure de / etc / exports.

Pour citer exports(5):

De plus, chaque ligne peut avoir une ou plusieurs spécifications pour les options par défaut après le nom du chemin, sous la forme d'un tiret ("-") suivi d'une liste d'options.

La liste d'options est utilisée pour toutes les exportations suivantes sur cette ligne uniquement.

Que signifie «exportations ultérieures sur cette ligne uniquement»?

1.2 fsid=0n'est plus requis?

Je cherchais fsid lorsque j'ai trouvé un commentaire sur la liste linux-nfs indiquant que fsid = 0 n'est plus requis. Maintenant je suis juste confus, en ai-je besoin avec nfs4 ou pas?!

2. Répertoire non exporté toujours montable

Disons que j'ai l'arborescence suivante:

/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian

Et j'ai les entrées suivantes dans cette entrée fstab:

/dev/disk/by-label/users  /mnt/users  ext4  defaults  0  0
/dev/disk/by-label/distr  /mnt/distr  ext4  defaults  0  0
/mnt/users                /exp/users  none  bind      0  0
/mnt/distr                /exp/distr  none  bind      0  0

Et mes exportations sont exactement ceci:

/exp       192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)

Et exportfs -arvmontre:

exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp

Alors pourquoi suis-je capable de faire cela et de ne pas obtenir d'erreur sur un client:

mount -t nfs4 server:/exp/users /tmp/test

Même si /exp/usersn'est pas exporté? Je n'ai pas exporté ce répertoire, et même si je ne vois pas le contenu de /dev/disk/by-label/userssauf indication contraire crossmnt, je suis toujours en mesure d'écrire dans le répertoire. Tout ce que j'écris là va dans le répertoire sous-jacent /exp/usersdont on peut voir quand je umount /exp/users; ls /exp/users..

3. Le cas étrange de showmount -d server

Comme indiqué par rpc.mountd(8), cette commande doit afficher les répertoires actuellement montés par les clients ou les entrées périmées /var/lib/nfs/rmtab, comme on peut le lire:

Le démon rpc.mountd enregistre chaque requête MNT réussie en ajoutant une entrée au fichier / var / lib / nfs / rmtab. Lors de la réception d'une demande UMNT d'un client NFS, rpc.mountd supprime simplement l'entrée correspondante de / var / lib / nfs / rmtab, tant que la liste de contrôle d'accès pour cette exportation permet à cet expéditeur d'accéder à l'exportation.

(...)

Notez cependant qu'il n'y a pas grand-chose pour garantir que le contenu de / var / lib / nfs / rmtab est exact. Un client peut continuer d'accéder à une exportation même après avoir appelé UMNT. Si le client redémarre sans envoyer de demande UMNT, les entrées périmées restent pour ce client dans / var / lib / nfs / rmtab.

Après avoir lu ceci, je me demande sûrement:

  1. N'est-il pas terriblement dangereux de simplement exposer ce type d'informations sur les clients;
  2. Les administrateurs de serveur ne sont pas ignorants liés à avoir un rmtab avec beaucoup de clients périmés;
  3. Est-ce la raison pour laquelle les clients qui montent les répertoires nfs4 avec mount -vget to see output comme "rien n'a été monté" même si quelque chose a été monté?

J'ai beaucoup d'autres questions concernant nfs4, mais je vais en rester là pour le moment .. :)

feu de tambour
la source
Peut-être que la liste d'exportation n'aime pas vos étranges systèmes de fichiers montés sur bind. Essayez d'abord avec / mnt / users ...
jirib
Il s'agit de nfs4, qui nécessite un "pseudo système de fichiers", c'est-à-dire une hiérarchie de système de fichiers à une arborescence. Pouvez-vous clarifier ce que vous voulez dire, s'il vous plaît?
drumfire
Cette page wiki affirme également que fsid = 0 n'est plus requis: wiki.linux-nfs.org/wiki/index.php/… , mais 'man exports' implique toujours qu'il est requis
SystemParadox
1
Je voudrais dire que je soutiens cette question. Comme vous, j'ai observé plusieurs des mêmes choses, et j'ai la même question et plus encore. Cela ressemble à un gâchis f * ing.
Cyclone du
1
Trop de questions dans un seul post. @drumfire, pourriez-vous s'il vous plaît le décomposer en plusieurs questions-messages plus simples?
Victor Yarema

Réponses:

7

Grandes questions, met en évidence un point plus important avec la documentation IMO. Voici une tentative de réponse complète:

Que signifie «exportations ultérieures sur cette ligne uniquement»?

Un exemple est probablement le plus simple ici:

/export/stuff -rw 10.0.0.54 10.0.0.55

est équivalent à:

/export/stuff 10.0.0.54(rw) 10.0.0.55(rw)

N'est fsid=0plus nécessaire?

Cela dépend de votre cas d'utilisation. Il semble que vous exportiez des systèmes de fichiers sur disque standard à partir du reste de votre requête, dans ce cas, il est préférable de supprimer fsid=0(ce qui dans nfsv4 modifie le comportement pour référencer le système de fichiers racine de l'exportation).

Pour modifier ce comportement, supprimez l'option no_subtree_check


rmtabdes trucs liés

  • La gestion d' rmtabun risque de sécurité est-elle?
    Je suppose que cela dépend de votre cas d'utilisation pour répondre à cela, sur mon réseau, il ne présente pas de fuite d'informations crédible, mais je peux voir des cas où cela pourrait potentiellement.
  • Vous ne rmtabserez pas plein d'entrées périmées?
    Potentiellement oui, toujours en fonction de votre scénario de déploiement / cas d'utilisation.
  • Est-ce la raison pour laquelle certains clients exécutant par mount -verreur voient "rien n'a été monté"?
    Je ne l'ai pas encore rencontré
CraigJPerry
la source