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 NFS installé à 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 est 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)
Comme 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 a également 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
Essai
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 remarque 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, l'id-mapping doit ê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
Une 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.
AUTH_SYS
par cette question: unix.stackexchange.com/q/438939/111905idmap
avecAUTH_SYS
ne traduire correctement les UID et GID. Mais les droits effectifs ne sont pas traduits et même sils
vous affichez vos propres répertoires ou fichiers, vous ne pourrez pas apporter de modifications car les ID numériques ne correspondent pas et avecAUTH_SYS
les ID numériques sont utilisés pour les droits d'accès.sec=sys
, les fichiers apparaissent selon le mappage d'ID, mais l'écriture fonctionne comme s'il n'y avait aucun mappage d'ID. Autre référence : "Bien que les numéros uid / gid ne soient plus utilisés dans le protocole NFSv4, sauf éventuellement dans les chaînes ci-dessus, ils seront toujours dans les champs d'authentification RPC lors de l'utilisation de AUTH_SYS (sec = sys), qui est la valeur par défaut. En tant que tel, dans ce cas, le nom d' utilisateur / groupe et les espaces numériques doivent être cohérents entre le client et le serveur. "