
我繼承了幾台 RHEL5 伺服器,這些伺服器被設定為透過 winbind 根據 AD 帳戶對使用者進行身份驗證。一切正常,直到我更新 AD 中的群組成員資格。對於某些使用者來說,變更永遠不會出現在「groups」命令的輸出中,儘管它們反映在「getent group <groupname>」的輸出中。
例如,請考慮以下情況:
[root@hcc1pl1 ~]# groups plubans
plubans : 網域使用者係統基礎設施開發
[root@hcc1pl1 ~]# getent group q1esb
q1esb:*:23136:q1qai,q1prodi
如果我將自己新增至 winbind 正在使用的 DC 上的 q1esb,您可以看到成員資格已更新:
[root@hcc1pl1 ~]# lsof -i | grep winbind
winbindd 31339 root 17u IPv4 63817934 TCP hcc1pl1:56541->hcnas01:microsoft-ds (已建立)
winbindd 31339 root 21uu4
638179701cc ]# ldapsearch -u -x -LLL -h hcnas01 -D "[電子郵件受保護]" -W -b "CN=Peter Lubans,OU=標準使用者帳號,OU=使用者,OU=XXX,DC=XXX,DC=XXX" "(sAMAccountName=*)" memberOf
輸入 LDAP 密碼:
...
memberOf: CN=q1esb,OU=安全群組,OU=群組,OU=XXX,DC=XXX,DC=XXX
...
請注意,winbind 運行時沒有快取(-n 標誌):
[root@hcc1pl1 ~]# ps -ef | grep winbind
root 31339 1 0 13:50 ? 00:00:00 winbindd -n
root 31340 31339 0 13:50 ? 00:00:00 winbindd -n
root 31351 31339 0 13:50 ? 00:00:00 winbindd -n
root 31352 31339 0 13:50 ? 00:00:00 winbindd -n
root 31353 31339 0 13:50 ? 00:00:00 winbindd -n
現在 getent 顯示該群組具有正確的成員:
[root@hcc1pl1 ~]# getent 群組 q1esb
q1esb:*:23136:q1qai,plubans,q1prodi
但更新後的會員資格並未反映在我的帳戶詳細資料中:
[root @hcc1pl1 ~]# groups plubans
plubans : 網域使用者係統基礎設施開發
[root@hcc1pl1 ~]#
這個問題真正令人煩惱的部分是,它對於這台電腦上的其他帳戶以及我從頭開始配置的電腦上的帳戶都運作得很好。
有任何想法嗎?
答案1
這似乎是由於登入時在 /var/cache/samba/netsamlogon_cache.tdb 中快取群組資訊造成的。我猜想雖然「-n」指示 winbind 不要快取它對 LDAP 的查詢,但該 TDB 檔案中成員資格資訊的存在足以把事情搞砸。
答案2
我設法找到了馬辛遺失的文章(https://marcinm.co.uk/group-membership-not-updating-in-winbind/)透過電子郵件詢問他。我確信這至少會對某些人有所幫助,所以這是他的整個部落格文章:
設想
檔案伺服器執行 smbd security=ads
(即充當網域成員),使用者連接到 Samba 共用並在第一次連接時正確捕獲群組成員身分 - 此後它永遠不會更新。
根本原因
Samba 在 AD 網域控制器計算群組成員身份時更新群組成員身份,並且僅當使用者登入執行 smbd 和 winbind 的伺服器時才計算群組成員身份。wbinfo -a
僅由 SMB 登入觸發或使用 Kerberos 登入。由於這是一個嚴重的限制,意味著在使用者從未登入的電腦上根本不知道任何群組成員資格,因此開發了後備群組成員資格代碼,該程式碼可以從AD 中提取使用者的群組成員資格,而無需使用者登錄,而是作為winbind 使用的電腦帳戶無權請求使用者群組成員資格,它被認為是不穩定的,其結果不可靠。因此 winbind 從不依賴它 - 當根本不知道組成員身份時它會調用它,但它永遠不會用於刷新快取的組成員身份。因此,在某些情況下,winbind 會擷取使用者群組成員身分一次,之後就不再更新它們。
無法停用群組成員資格的緩存,即無法通過在smb.conf
.請注意,這不是 Samba 問題,而是 AD 設計問題,這種行為與 Windows 的行為方式一致,這實際上是當使用者在登入期間進行身份驗證時更新 AD 群組成員身份。
如何強制使用者刷新群組成員身份
群組成員身分緩存在一個名為 的檔案中netsamlogon_cache.tdb
,可以透過 tdbtool(Samba 的所有版本)或net cache samlogon
(Samba 4.7 或更高版本)進行調查。從該檔案中刪除快取的條目會透過呼叫後備更新程式碼並將其結果放回中來觸發群組成員身分的一次性更新netsamlogon_cache.tdb
- 然後它們將再次永久快取。
tdb工具方式:
$ wbinfo -n user.name
S-1-5-21-3023451936-689652692-1079546996-40725 SID_USER (1)
附加\0
到 SID 並將其放在引號中:
$ tdbtool netsamlogon_cache.tdb delete "S-1-5-21-3023451936-689652692-1079546996-40725\0"
群組成員資格將在作業系統第一次需要時更新,等待幾分鐘以填充 tdb 文件,
net快取samlogon方式:
$ net cache samlogon list|head
SID Name When cached
---------------------------------------------------------------------------------------------------------------------------
S-1-5-21-3023451936-689652692-1079546996-40725 DOM\user.name Tue Apr 27 07:59:19 AM 2018 BST
S-1-5-21-3023451936-689652692-1079546996-41432 DOM\user.name2 Tue Apr 27 02:13:33 PM 2018 BST
$ net cache samlogon delete S-1-5-21-3023451936-689652692-1079546996-40725
與以前相同 - 群組成員資格將在作業系統第一次需要時更新,等待幾分鐘以填入 tdb 檔案。
答案3
我唯一的想法(這是一個非常模糊的想法)是,它可能與與基礎設施主機(負責跨網域更新群組成員資格)的通訊有關。
答案4
我有類似的事情。為了解決這個問題,我運行了「authconfig --disablecache --update」。當然,這會使登入速度變慢。