NFSv4 Kullanıcı Eşlemesi


12

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.04yü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.04aynı 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.

Yanıtlar:


6

NFSv4, Kerberos ve güvenlik aroması kullanmadığınızda düşündüğünüz gibi UID'leri ve GID'leri çevirmez. Ama tam olarak sizin tanımladığınız gibi hareket ediyor. Bunun nedeni, NFSv4'ün AUTH_SYSgüvenliği kullanmasıdır . Daha ayrıntılı bir açıklama burada bulunabilir .


2
Cevabınız ve bağlantı için teşekkür ederiz, çok bilgilendirici. Ama yine de bağlama uymuyor ... peki idma yapmanın amacı nedir? Rpc ile çalışmazsa neden "rpcidmapd" olarak adlandırılır? Ve bu komutların etkisi nedir?
14'te matpen

FWIW, AUTH_SYSbu soru başına bile kullanıldığında NFSv4 kimlik eşlemesini etkinleştirmek mümkün görünüyor : unix.stackexchange.com/q/438939/111905
sxc731

@ sxc731: benim deneyim, ben kullanılarak bugün bi test idmapile AUTH_SYSdoğru UID'leri ve Gids çevirmek yok. Ancak geçerli haklar çevrilmez ve lskendi dizinlerinizi veya dosyalarınızı gösterse bile, AUTH_SYSsayısal kimlikler eşleşmediği ve sayısal kimliklerle erişim hakları için kullanıldığı için değişiklik yapamazsınız .
Thomas

1
@Tamlar doğru. Kimlik eşleme AÇIK sec=sysolarak ayarlandığında, dosyalar kimlik eşlemesi başına görünür, ancak yazma hiç kimlik eşlemesi yokmuş gibi çalışır. Başka bir başvuru : "uid / gid numaraları, isteğe bağlı olarak yukarıdaki dizeler dışında, NFSv4 protokolünde artık kullanılmasa da, varsayılan olan AUTH_SYS (sec = sys) kullanıldığında yine de RPC kimlik doğrulama alanlarında olacaktır. bu durumda, kullanıcı ve grup adı ve sayı boşluklarının istemci ve sunucu arasında tutarlı olması gerekir. "
Irfan Latif
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.