NFSv4-Benutzerzuordnung

12

Diese Frage scheint schon oft gestellt worden zu sein, aber die anderen Antworten trafen irgendwie nicht auf mich zu.

Grundsätzlich habe ich gerade einen neuen NFSv4-Server eingerichtet und stehe vor dem klassischen Problem, dass UIDs und GIDs nicht zwischen Server und Client übereinstimmen. Das Synchronisieren von / etc / passwd und / etc / group ist in meinem Szenario jedoch nicht möglich. Beachten Sie, dass ich auf beiden Computern dieselben Benutzer habe (im Gegensatz zu dieser Frage ).

Daher habe ich mich mit idmap befasst: Laut einigen Quellen scheint NFSv4 Benutzernamen zu senden (im Gegensatz zum Verhalten von NFSv3 beim Senden von UID / GID), und die Rolle von idmap besteht darin, diese Benutzernamen in die Server-UID / GIDs zu übersetzen.

Dies scheint jedoch in meinem Fall nicht zu funktionieren (Setup-Details unten), was ich als sehr Standard betrachte (so ziemlich nur NFS von Repo installiert).

Vermisse ich etwas Gibt es eine Möglichkeit, dies zu erreichen, ohne LDAP oder Kerberos einzurichten?


Server-Setup

Der Server ist Ubuntu 16.04installiert und zwei Benutzer.

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 wurde von Repo installiert und zum Exportieren eines Testordners konfiguriert.

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)

Da der Server und der Client unterschiedliche Hostnamen haben, habe ich den Wert "Domain" in der Konfigurationsdatei von idmapd geändert. Ansonsten ist die Datei identisch mit der vom Paketmanager installierten. Bitte beachten Sie, dass der Inhalt dieser Datei auf Server und Client identisch ist.

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

Client-Setup

Der Client hat auch Ubuntu 16.04zwei Benutzer, die jedoch dieselben Benutzernamen, aber unterschiedliche UIDs / GIDs haben .

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 wurde von Repo installiert und die Testfreigabe wurde bereitgestellt.

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

Testen

Zuerst erstelle ich eine Datei auf dem Client, und das scheint in Ordnung zu sein:

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

Wenn ich die Datei vom Server aus ansehe, stelle ich fest, dass der Eigentümer der falsche ist, während die Gruppe nicht vorhanden ist.

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

Experimente

Entsprechend dieser Antwort auf eine ähnliche Frage sollte die ID-Zuordnung auf dem Server wie folgt aktiviert werden (beachten Sie die Fehler):

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

Während Sie auf dem Client sind (beachten Sie das Fehlen von Fehlern):

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

Aber die Ergebnisse sind seltsam:

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

Eine andere Antwort schlägt vor, die idmapd-Konfiguration wie folgt zu ändern (der Inhalt ist auf beiden Computern gleich):

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

Das scheint aber keinen Unterschied zu machen.

Matpen
quelle

Antworten:

6

NFSv4 übersetzt die UIDs und GIDs nicht so, wie Sie vielleicht denken, wenn Sie Kerberos und die Sicherheitsvariante nicht verwenden. Aber es verhält sich genau so, wie Sie es beschrieben haben. Der Grund ist, dass NFSv4 AUTH_SYSSicherheit verwendet. Eine ausführlichere Beschreibung finden Sie hier .

Thomas
quelle
2
Vielen Dank für Ihre Antwort und den Link, sehr informativ. Kann es aber immer noch nicht in den Kontext einpassen ... also, was ist der Zweck von Idmapping? Warum heißt es "rpcidmapd", wenn es mit rpc nicht funktioniert? Und wie wirken sich diese Befehle aus?
Matpen
FWIW, es scheint möglich zu sein, die NFSv4-ID-Zuordnung zu aktivieren, selbst wenn AUTH_SYSdiese Frage verwendet wird: unix.stackexchange.com/q/438939/111905
sxc731
@ sxc731: Aus meiner Erfahrung, und ich habe heute einen Test durchgeführt, idmapmit AUTH_SYSdem UIDs und GIDs korrekt übersetzt werden. Die effektiven Rechte werden jedoch nicht übersetzt, und selbst wenn lsSie eigene Verzeichnisse oder Dateien anzeigen, können Sie keine Änderungen vornehmen, da numerische IDs nicht übereinstimmen und AUTH_SYSnumerische IDs für Zugriffsrechte verwendet werden.
Thomas
1
@ Thomas richtig. Wenn die ID-Zuordnung mit aktiviert ist sec=sys, werden die Dateien gemäß der ID-Zuordnung angezeigt, aber das Schreiben funktioniert so, als ob überhaupt keine ID-Zuordnung stattfindet. Eine weitere Referenz : "Obwohl UID / GID-Nummern im NFSv4-Protokoll nicht mehr verwendet werden, außer optional in den obigen Zeichenfolgen, befinden sie sich weiterhin in den RPC-Authentifizierungsfeldern, wenn AUTH_SYS (sec = sys) verwendet wird. Dies ist die Standardeinstellung. In diesem Fall müssen sowohl der Benutzer- / Gruppenname als auch die Nummernräume zwischen Client und Server konsistent sein. "
Irfan Latif