Pertanyaan ini sepertinya sudah ditanyakan berkali-kali, tetapi jawaban yang lain entah bagaimana tidak berlaku untuk saya.
Pada dasarnya saya hanya menyiapkan server NFSv4 baru dan saya menghadapi masalah klasik di mana UID dan GID tidak cocok antara server dan klien. Namun, sinkronisasi / etc / passwd dan / etc / group tidak layak dalam skenario saya. Perhatikan bahwa saya memiliki pengguna yang sama di kedua mesin (yang bertentangan dengan pertanyaan ini ).
Karena itu saya mencari idmap: menurut beberapa sumber, sepertinya NFSv4 mengirimkan nama pengguna (berbeda dengan perilaku NFSv3 untuk mengirim UID / GID) dan peran idmap adalah menerjemahkan nama pengguna ini ke server UID / GID.
Namun, ini tampaknya tidak berfungsi dalam kasus saya (detail pengaturan di bawah), yang saya anggap sangat standar (cukup banyak hanya menginstal NFS dari repo).
Apakah saya melewatkan sesuatu? Apakah ada cara untuk membuat ini berfungsi tanpa mengatur LDAP atau Kerberos?
Pengaturan server
Server telah Ubuntu 16.04
diinstal dan dua pengguna.
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 diinstal dari repo dan dikonfigurasikan untuk mengekspor folder uji.
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)
Karena server dan klien memiliki nama host yang berbeda, saya mengubah nilai "Domain" di file konfigurasi idmapd. Kalau tidak, file tersebut identik dengan yang diinstal oleh manajer paket. Harap perhatikan bahwa konten file ini identik pada server dan klien.
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
Pengaturan klien
Klien juga memiliki Ubuntu 16.04
dan dua pengguna, yang bagaimanapun memiliki nama pengguna yang sama tetapi UID / GID yang berbeda .
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 diinstal dari repo dan bagian uji dipasang.
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
Pengujian
Pertama-tama saya membuat file pada klien, dan ini tampaknya baik-baik saja:
user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov 2 17:24 testfile
Tetapi ketika saya melihat file dari server, saya perhatikan bahwa pemiliknya salah, sedangkan grup tidak ada.
user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov 2 17:24 testfile
Eksperimen
Menurut jawaban untuk pertanyaan serupa, pemetaan id harus diaktifkan sebagai berikut, di server (perhatikan kesalahannya):
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
Saat berada di klien (perhatikan tidak adanya kesalahan):
user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c
Tetapi hasilnya aneh:
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
Jawaban lain menyarankan untuk mengubah konfigurasi idmapd sebagai berikut (kontennya sama di kedua mesin):
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
Tapi itu tampaknya tidak membuat perbedaan.