Ldap

kerberized NFSv4 自動掛載的主目錄中的錯誤使用者映射

  • August 21, 2015

簡短的問題描述

這個問題是關於 NFSv4 中的 id 映射出錯。

NFS 伺服器:帶有 DSM 5.2 的 Synology DS。

客戶端:一台普通的 FC22 機器,它自動掛載為 /home 從上面導出的文件夾之一。

兩台機器都是 freeIPA 域的註冊客戶端,因此使用 freeIPA 伺服器作為 DNS 和 LDAP 伺服器。

當 LDAP 使用者登錄客戶端時,它會找到已安裝的文件夾。所以安裝工作。但是,文件的所有權映射為nobody:nobody. 我知道這個“沒人的問題”並不新鮮,但到目前為止我發現的解決方案都沒有解決這個問題。

LDAP 使用者登錄和文件觸摸

$ ssh ldapuser1@client1
ldapuser1@client1's password: 

-bash-4.3$ id
uid=1172000004(ldapuser1) gid=1172000004(ldapuser1) groups=1172000004(ldapuser1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

ldapuser1可以正確登錄並擁有 uid 1172000004。

-bash-4.3$ pwd
/home/ldapuser1

-bash-4.3$ ls -lan
total 8
drwxrwxrwx. 2 1172000004 1172000004 4096 18 aug 17:34 .
drwxr-xr-x. 3          0          0    0 18 aug 18:33 ..

LDAP 使用者正確地登錄到其主目錄中,該目錄是預先創建並分配給他的。但是任何新文件都獲得了錯誤的所有權:

-bash-4.3$ touch a

-bash-4.3$ ls -lan
total 8
drwxrwxrwx. 2 1172000004 1172000004 4096 18 aug 18:41 .
drwxr-xr-x. 3          0          0    0 18 aug 18:33 ..
-rwxrwxrwx. 1         99        100    0 18 aug 18:42 a

請注意,99:100guest:users在伺服器上。伺服器上的文件idmapd.conf告訴映射nobody:nobodyguest:users.

伺服器配置

$ exportfs -v   
/volume1/shared_homes xxx.xxx.0.0/24(rw,async,no_root_squash,no_subtree_check,insecure_locks,anonuid=1025,anongid=100,sec=krb5,rw,no_root_squash,no_all_squash)


$ klist -k /etc/nfs/krb5.keytab 
Keytab name: FILE:/etc/nfs/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
  5 nfs/nfs-server.hq.example.com@HQ.EXAMPLE.COM
  5 nfs/nfs-server.hq.example.com@HQ.EXAMPLE.COM
  5 nfs/nfs-server.hq.example.com@HQ.EXAMPLE.COM
  5 nfs/nfs-server.hq.example.com@HQ.EXAMPLE.COM

$ cat /etc/idmapd.conf 
[General]
Domain=hq.example.com
Verbosity=10
[Mapping]
Nobody-User=guest
Nobody-Group=users
[Translation]
Method=nsswitch
GSS-Methods=static,synomap
[Static]

$ cat /etc/nsswitch.conf
passwd:     files ldap winbind
shadow:     files ldap winbind
group:      files ldap winbind
osts:      files dns wins
bootparams: files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files
netgroup:   files
publickey:  nisplus
automount:  files
aliases:    files

客戶端配置

$ automount -s
Mount point: /home
source(s):
 instance type(s): sss 
 map: auto.home
 * | -fstype=nfs4,rw,sec=krb5,soft,rsize=8192,wsize=8192 nfs-server.hq.example.com:/volume1/shared_homes/&

$ df
nfs-server.hq.example.com:/volume1/shared_homes/ldapuser1 11609721368 2208608120 9400994464  20% /home/ldapuser1

$ cat /etc/idmapd.conf
[General]
Domain=hq.example.com


$ cat /etc/nsswitch.conf
passwd:     files sss
shadow:     files sss
group:      files sss
hosts:      files dns myhostname
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss
netgroup:   files sss
publickey:  nisplus
automount:  files sss
aliases:    files nisplus
sudoers: files sss

$ cat /etc/sysconfig/nfs | egrep -v "^#"
RPCNFSDARGS=""
RPCMOUNTDOPTS=""
STATDARG=""
SMNOTIFYARGS=""
RPCIDMAPDARGS=""
RPCGSSDARGS="-vvv"
GSS_USE_PROXY="yes"
RPCSVCGSSDARGS="-vvv"
BLKMAPDARGS=""
SECURE_NFS=yes

日誌伺服器

Aug 18 18:50:59 nfs-server idmapd[14622]: nfsdcb: authbuf=gss/krb5 authtype=user
Aug 18 18:50:59 nfs-server idmapd[14622]: nfs4_uid_to_name: calling nsswitch->uid_to_name
Aug 18 18:50:59 nfs-server idmapd[14622]: nfs4_uid_to_name: nsswitch->uid_to_name returned 0
Aug 18 18:50:59 nfs-server idmapd[14622]: nfs4_uid_to_name: final return value is 0
Aug 18 18:50:59 nfs-server idmapd[14622]: Server : (user) id "1173000004" -> name "ldapuser1@hq.example.com"
Aug 18 18:50:59 nfs-server idmapd[14622]: nfsdcb: authbuf=gss/krb5 authtype=group
Aug 18 18:50:59 nfs-server idmapd[14622]: nfs4_gid_to_name: calling nsswitch->gid_to_name
Aug 18 18:51:00 nfs-server idmapd[14622]: nfs4_gid_to_name: nsswitch->gid_to_name returned 0
Aug 18 18:51:00 nfs-server idmapd[14622]: nfs4_gid_to_name: final return value is 0
Aug 18 18:51:00 nfs-server idmapd[14622]: Server : (group) id "1173000004" -> name "ldapuser1@hq.example.com"

請注意,似乎為正確的使用者/域請求了映射。root@hq.example.com然而,在日誌中,我還發現了許多對和的映射的引用guest@hq.example.com

日誌客戶端

aug 18 18:50:59 client1.hq.example.com nfsidmap[2118]: key: 0x274d13a5 type: uid value: ldapuser1@hq.example.com timeout 600
aug 18 18:50:59 client1.hq.example.com nfsidmap[2118]: nfs4_name_to_uid: calling nsswitch->name_to_uid
aug 18 18:50:59 client1.hq.example.com nfsidmap[2118]: nss_getpwnam: name 'ldapuser1@hq.example.com' domain 'hq.example.com': resulting localname 'ldapuser1'
aug 18 18:50:59 client1.hq.example.com nfsidmap[2118]: nfs4_name_to_uid: nsswitch->name_to_uid returned 0
aug 18 18:50:59 client1.hq.example.com nfsidmap[2118]: nfs4_name_to_uid: final return value is 0
aug 18 18:50:59 client1.hq.example.com nfsidmap[2120]: key: 0x3e28949 type: gid value: ldapuser1@hq.example.com timeout 600
aug 18 18:50:59 client1.hq.example.com nfsidmap[2120]: nfs4_name_to_gid: calling nsswitch->name_to_gid
aug 18 18:50:59 client1.hq.example.com nfsidmap[2120]: nfs4_name_to_gid: nsswitch->name_to_gid returned 0
aug 18 18:50:59 client1.hq.example.com nfsidmap[2120]: nfs4_name_to_gid: final return value is 0

備註和問題

  • 在這些情況下,錯誤映射的最常見原因似乎是雙方的Domain設置缺失或不一致。idmapd.conf這裡兩邊都正確設置了
  • 如果我使用靜態映射,它就可以工作,即 1)ldapuser1在伺服器上創建本地 2)在下面添加一個條目$$ Static $$在idmapd.conf,其中說ldapuser1@HQ.EXAMPLE.COM=ldapuser1。然而,這不是目標。
  • Synology 伺服器顯然不是 Fedora/RedHat,因此它不是完美的 freeIPA 伴侶。特別是,它錯過了SSSD. 不過,我認為它應該工作。

我完全被困在這一點上。我什至不知道去哪裡尋求幫助。Synology 支持聲稱這應該有效。根據 freeIPA 開發人員的說法,這甚至是題外話,因為不是 freeIPA 特定的,而是“只是”NFS & co 問題。這是有爭議的,因為所有這些技術的連接和使用方式都是 freeIPA 特定的。

無論如何,我不知道該看什麼了。這就是為什麼我在這裡問,希望有人能讓我至少向前邁出一步。任何猜測都非常受歡迎!

在與 Synology 支持進行會話後,我終於明白,由於 DSM 5.2 的限制,目前這無法正常工作。

問題是 DSM 假定 LDAP 伺服器使用UMich 模式,這是特定於 NFS 的,因此在 GSS 請求進入時尋找屬性GSSAuthName。相反,FreeIpa 將 Kerberos 主體儲存在 LDAP 中,並且對於每個 Kerberos 主體總是有krbPrincipalName屬性可用的。

沒有找到GSSAuthName,DSM 將每個請求映射到nobody.

我已向 Synology 提出功能請求,以使用 SSSD 正確處理 id 映射。

在那之前,我求助於sec=sys. 注意:確保未選中 Synology LDAP 配置中的“啟用 UID/GID 轉換”!

引用自:https://serverfault.com/questions/715066