Bu soru zaten birçok kez sorulmuş gibi görünüyor, ancak diğer cevaplar bir şekilde benim için geçerli değildi.
Temelde yeni bir NFSv4 sunucusu kurdum ve UID'lerin ve GID'lerin sunucu ve istemci arasında eşleşmediği klasik bir sorunla karşılaşıyorum. Ancak, / etc / passwd ve / etc / group'u senkronize etmek senaryomda mümkün değil. Her iki makinede de aynı kullanıcılara sahip olduğumu unutmayın ( bu sorunun aksine ).
Bu nedenle idmap'i araştırıyordum: bazı kaynaklara göre, NFSv4'ün kullanıcı adlarını (NFSv3'ün UID / GID göndermek için davranışının aksine) gönderdiği ve idmap'in rolü bu kullanıcı adlarını sunucu UID / GID'lerine çevirmek gibi görünüyor.
Ancak, bu benim durumumda çalışmıyor gibi görünüyor (aşağıda kurulum detayları), ki bu çok standart (neredeyse sadece repo'dan kurulu NFS).
Bir şey mi kaçırıyorum? LDAP veya Kerberos kurmadan bu çalışmanın bir yolu var mı?
Sunucu kurulumu
Sunucu Ubuntu 16.04
yüklendi ve iki kullanıcı var.
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'dan yüklenmiş ve bir test klasörünü dışa aktarmak üzere yapılandırılmıştır.
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)
Sunucu ve istemci farklı ana bilgisayar adlarına sahip olduğundan, idmapd'nin yapılandırma dosyasındaki "Domain" değerini değiştirdim. Aksi takdirde, dosya paket yöneticisi tarafından kurulan dosya ile aynıdır. Lütfen bu dosyanın içeriğinin hem sunucuda hem de istemcide aynı olduğunu unutmayın.
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
İstemci kurulumu
İstemcide ayrıca, Ubuntu 16.04
aynı kullanıcı adlarına ancak farklı UID / GID'lere sahip iki kullanıcı vardır .
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 repodan kuruldu ve test payı takıldı.
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
Test yapmak
İlk önce istemci üzerinde bir dosya oluşturmak ve bu iyi görünüyor:
user1@client:~$ touch test/testfile
user1@client:~$ ls -l ./test
total 0
-rw-rw-r-- 1 user1 user1 0 nov 2 17:24 testfile
Ancak dosyayı sunucudan görüntülediğimde, grup yokken sahibin yanlış olduğunu fark ettim.
user1@server:~$ ls -l /srv/nfs/test
total 0
-rw-rw-r-- 1 user2 1002 0 nov 2 17:24 testfile
Deneyler
Benzer bir soruya verilen bu cevaba göre , kimlik eşleme sunucuda aşağıdaki gibi etkinleştirilmelidir (hatalara dikkat edin):
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
İstemcideyken (hataların olmadığına dikkat edin):
user1@client:~$ sudo tee /sys/module/nfs/parameters/nfs4_disable_idmapping <<< "N"
user1@client:~$ sudo nfsidmap -c
Ancak sonuçlar tuhaf:
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
Başka bir yanıt , idmapd yapılandırmasının aşağıdaki gibi değiştirilmesini önermektedir (içerik her iki makinede de aynıdır):
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
Ancak bu herhangi bir fark yaratmıyor gibi görünüyor.