web-dev-qa-db-fra.com

Mappage utilisateur NFSv4

Cette question semble avoir déjà été posée à plusieurs reprises, mais les autres réponses ne s'appliquent pas en quelque sorte à moi.

Fondamentalement, je viens de configurer un nouveau serveur NFSv4 et je suis confronté au problème classique où les UID et GID ne correspondent pas entre le serveur et le client. Cependant, la synchronisation de/etc/passwd et/etc/group n'est pas possible dans mon scénario. Notez que j'ai les mêmes utilisateurs sur les deux machines (par opposition à cette question ).

Par conséquent, je cherchais dans idmap: selon certaines sources, il semble que NFSv4 envoie des noms d'utilisateur (par opposition au comportement de NFSv3 pour envoyer UID/GID) et le rôle d'idmap serait de traduire ces noms d'utilisateur en UID/GID du serveur.

Cependant, cela ne semble pas fonctionner dans mon cas (détails de configuration ci-dessous), que je considère très standard (à peu près uniquement installé NFS à partir du repo).

Suis-je en train de manquer quelque chose? Existe-t-il un moyen de faire fonctionner cela sans configurer LDAP ou Kerberos?


Configuration du serveur

Le serveur a Ubuntu 16.04 installé et deux utilisateurs.

user1@server:~$ id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),27(Sudo)
user1@server:~$ id user2
uid=1001(user2) gid=1001(user2) groups=1001(user2)

NFS a été installé à partir du référentiel et configuré pour exporter un dossier de test.

user1@server:~$ Sudo apt-get install nfs-kernel-server

user1@server:~$ Sudo cat /proc/fs/nfsd/versions 
+2 +3 +4 +4.1 +4.2

user1@server:~$ ls -ld /srv/nfs/test/
drwxrwxrwx 2 nobody nogroup 4096 nov  2 17:34 /srv/nfs/test/

user1@server:~$ cat /etc/exports 
"/srv/nfs/test" 192.168.x.x(rw,sync,no_subtree_check)

Puisque le serveur et le client ont des noms d'hôtes différents, j'ai changé la valeur "Domaine" dans le fichier de configuration d'idmapd. Sinon, le fichier est identique à celui installé par le gestionnaire de packages. Veuillez noter que le contenu de ce fichier est identique sur le serveur et le client.

user1@server:~$ cat /etc/idmapd.conf
[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = mydomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Configuration du client

Le client dispose également de Ubuntu 16.04 et deux utilisateurs, qui ont cependant les mêmes noms d'utilisateur mais des UID/GID différents.

user1@client:~$ id user1
uid=1001(user1) gid=1002(user1) groups=1002(user1),27(Sudo)
user1@client:~$ id user2
uid=1000(user2) gid=1000(user2) groups=1000(user2),27(Sudo)

NFS a été installé à partir du référentiel et le partage de test a été monté.

user1@client:~$ Sudo apt-get install nfs-common

user1@client:~$ mkdir ./test
user1@client:~$ Sudo mount -t nfs4 192.168.x.x:/srv/nfs/test ./test

Test

Je crée d'abord un fichier sur le client, et cela semble correct:

user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov  2 17:24 testfile

Mais quand je regarde le fichier depuis le serveur, je constate que le propriétaire est le mauvais, alors que le groupe n'existe pas.

user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov  2 17:24 testfile

Expériences

Selon cette réponse à une question similaire, id-mapping devrait être activé comme suit, sur le serveur (notez les erreurs):

user1@server:~$ Sudo tee /sys/module/nfsd/parameters/nfs4_disable_idmapping <<< "N"
user1@server:~$ Sudo nfsidmap -c
nfsidmap: 'id_resolver' keyring was not found.
user1@server:~$ Sudo service rpcidmapd restart
Failed to restart rpcidmapd.service: Unit rpcidmapd.service not found.
user1@server:~$ Sudo service nfs-kernel-server restart

Sur le client (notez l'absence d'erreurs):

user1@client:~$ Sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ Sudo nfsidmap -c

Mais les résultats sont étranges:

user1@client:~$ touch test/testfile
user1@client:~$ ls -l test
total 0
-rw-rw-r-- 1 user2 4294967294 0 nov  2 19:16 testfile
user1@server:~$ ls -l /srv/nfs/project/
total 0
-rw-rw-r-- 1 user2 1002 0 nov  2 19:16 prova

ne autre réponse suggère de modifier la configuration idmapd comme suit (le contenu est le même sur les deux machines):

user1@server:~$ cat /etc/idmapd.conf 
[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = mydomain

[Translation]
   Method=static
[Static]
   user1@mydomain = user1

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Mais cela ne semble faire aucune différence.

12
matpen

NFSv4 ne traduira pas les UID et GID comme vous pourriez le penser lorsque vous n'utilisez pas Kerberos et la saveur de sécurité. Mais cela fonctionne exactement comme vous l'avez décrit. La raison en est que NFSv4 utilisera AUTH_SYS Sécurité. Une description plus détaillée peut être trouvée ici .

6
Thomas
0
JinnKo