Sur mon serveur NFS, j'ai l'exportation suivante définie:
#NFS exports Database
/shared -alldirs -network=192.168.1 -mask=255.255.255.0
Sur mon client NFS:
192.168.1.7:/shared /shared nfs rw 0 0
Évidemment, en tant que root sur le serveur, je peux faire ce que je veux. Cependant, sur le client, mon utilisateur habituel 'gabe' peut apporter des modifications à la monture NFS (en supposant que j'ai des autorisations), mais la racine ne peut pas.
Comme mon utilisateur ordinaire:
gabe@client$ cd /shared
gabe@client$ ls -l
total 8
drwxrwxrwx 4 gabe wheel 512 Mar 20 19:20 tmp
gabe@client$ cd tmp
gabe@client$ touch test.txt
gabe@client$ rm test.txt
Comme root:
# cd /shared/tmp
# touch test.txt
touch: test.txt: Permission denied
Encore une fois, tout cela est sur le côté NFS client des choses, et je soupçonne peut-être que cela a quelque chose à voir avec l'option -Maproot. C'est la première fois que je crée NFS et je viens de remarquer cette particularité. Je vais faire de la lecture maintenant, pour voir si je peux comprendre cela, mais si quelqu'un a une idée, je l'apprécierais.
NFS a été conçu avec l'idée que l'utilisateur et les identifiants de groupe seraient les mêmes sur toutes les machines du réseau. Pour les utilisateurs ordinaires, cela fonctionne bien. Mais l'UID de la racine est toujours 0, et juste parce que vous avez une racine sur une boîte, cela ne signifie pas que vous devez avoir un accès root à chaque machine du réseau.
Par conséquent, NFS traite la racine spécialement. Par défaut, la racine est mappée sur l'utilisateur nobody
, qui n'a normalement aucun accès en écriture. Le -maproot
Option vous permet de modifier la manière dont la racine est traitée. BSD -maproot=root
correspond à la Linux no_root_squash
option.
C'est un comportement commun avec les implémentations NFS traditionnelles. Les mappages utilisateur NFS sont effectués quel que soit le contexte, de sorte que tous les accès par la racine du client doivent être mappés sur un utilisateur particulier (généralement nobody
par défaut). D'où ce comportement étrange, où la racine du client ne peut pas accéder directement à vos fichiers, mais peut su gabe
Pour y accéder.
(Les versions "récentes" de NFS, c'est-à-dire NFSV4 et peut-être NFSV3, permettent le comportement de SANER s'ils sont pris en charge des deux côtés, mais je ne connais pas les détails.)