ดูเหมือนว่าคำถามนี้จะถูกถามหลายครั้งแล้ว แต่คำตอบอื่น ๆ ไม่ได้ใช้กับฉัน
โดยทั่วไปฉันเพิ่งตั้งค่าเซิร์ฟเวอร์ NFSv4 ใหม่และฉันกำลังเผชิญกับปัญหาแบบคลาสสิกที่ UID และ GID ไม่ตรงกันระหว่างเซิร์ฟเวอร์และไคลเอนต์ อย่างไรก็ตาม syncronizing / etc / passwd และ / etc / group ไม่สามารถทำได้ในสถานการณ์ของฉัน โปรดทราบว่าฉันมีผู้ใช้งานเหมือนกันทั้งสองเครื่อง (ตรงข้ามกับคำถามนี้ )
ดังนั้นฉันจึงค้นหา idmap: ตามแหล่งข้อมูลบางแหล่งดูเหมือนว่า NFSv4 จะส่งชื่อผู้ใช้ (ตรงข้ามกับพฤติกรรมของ NFSv3 เพื่อส่ง UID / GID) และบทบาทของ idmap จะแปลชื่อผู้ใช้เหล่านี้เป็นเซิร์ฟเวอร์ UID / GID
อย่างไรก็ตามดูเหมือนว่าจะไม่ทำงานในกรณีของฉัน (รายละเอียดการตั้งค่าด้านล่าง) ซึ่งฉันพิจารณาว่าเป็นมาตรฐานมาก
ฉันพลาดอะไรไปรึเปล่า? มีวิธีทำให้งานนี้โดยไม่ตั้งค่า LDAP หรือ Kerberos หรือไม่?
การตั้งค่าเซิร์ฟเวอร์
มีการUbuntu 16.04
ติดตั้งเซิร์ฟเวอร์และผู้ใช้สองคน
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 ถูกติดตั้งจาก repo และกำหนดค่าให้ส่งออกโฟลเดอร์ทดสอบ
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)
เนื่องจากเซิร์ฟเวอร์และไคลเอนต์มีชื่อโฮสต์ที่แตกต่างกันฉันจึงเปลี่ยนค่า "โดเมน" ในไฟล์ config ของ idmapd มิฉะนั้นไฟล์จะเหมือนกับไฟล์ที่ติดตั้งโดยผู้จัดการแพ็คเกจ โปรดสังเกตว่าเนื้อหาของไฟล์นี้เหมือนกันทั้งบนเซิร์ฟเวอร์และไคลเอนต์
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
การตั้งค่าไคลเอนต์
ลูกค้ายังมีUbuntu 16.04
และผู้ใช้สองคนซึ่ง แต่มีชื่อผู้ใช้เดียวกันแต่โพสต์ที่แตกต่างกัน / GIDs
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 ถูกติดตั้งจาก repo และส่วนแบ่งการทดสอบถูกเมาท์
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
การทดสอบ
ก่อนอื่นฉันสร้างไฟล์บนไคลเอนต์และมันก็ใช้ได้ดี:
user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov 2 17:24 testfile
แต่เมื่อฉันดูไฟล์จากเซิร์ฟเวอร์ฉันสังเกตว่าเจ้าของนั้นผิดในขณะที่กลุ่มไม่มีอยู่
user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov 2 17:24 testfile
การทดลอง
ตามคำตอบของคำถามที่คล้ายกันนี้การแมปรหัสควรเปิดใช้งานดังต่อไปนี้บนเซิร์ฟเวอร์ (สังเกตเห็นข้อผิดพลาด):
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
ในขณะที่ลูกค้า (สังเกตเห็นการขาดงานของข้อผิดพลาด):
user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c
แต่ผลลัพธ์นั้นแปลก:
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
คำตอบอีกข้อเสนอแนะให้แก้ไขการกำหนดค่า idmapd ดังต่อไปนี้ (เนื้อหาเหมือนกันในทั้งสองเครื่อง):
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
แต่นั่นไม่ได้สร้างความแตกต่างใด ๆ