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.04
installiert 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.04
zwei 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.
AUTH_SYS
diese Frage verwendet wird: unix.stackexchange.com/q/438939/111905idmap
mitAUTH_SYS
dem UIDs und GIDs korrekt übersetzt werden. Die effektiven Rechte werden jedoch nicht übersetzt, und selbst wennls
Sie eigene Verzeichnisse oder Dateien anzeigen, können Sie keine Änderungen vornehmen, da numerische IDs nicht übereinstimmen undAUTH_SYS
numerische IDs für Zugriffsrechte verwendet werden.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. "