Linux

如果在 LDAP 上,Linux 是否會保留組成員的記憶體?(組與 getent 組之間的差異))

  • October 3, 2018

我們的使用者和組 LDAP 配置正在執行。

我們的伺服器使用 LDAP 來儲存使用者和組。

# /etc/nsswitch.conf :
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

但是今天我們在 LDAP 中添加了一個新組,有 3 個使用者,然後添加了其他使用者。3 個使用者在組中,但其他使用者不在組中。

我們可以通過使用“groups”看到這一點:更準確地說,“getent group GROUPNAME”顯示組中的使用者,而“groups”不顯示該使用者的組……?!

因此我試圖理解:

  • 是否有某種組記憶體 - LDAP 列表?
  • 或者同步是否有可能失敗,如果是,如何手動重新啟動它?

抱歉,我的問題沒有更準確,但我真的不知道從哪裡開始……

PS 配置文件

# /etc/ldap/ldap.conf
URI     ldap://172.16.1.232
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt


# /etc/pam_ldap.conf
base dc=ourdomain,dc=ch
uri ldap://172.16.1.232/
ldap_version 3
rootbinddn cn=admin,dc=ourdomain,dc=ch
pam_password crypt

pam_ldap並且nsswitch沒有記憶體機制,但nscdsssd可能存在於實現記憶體的系統上。

nscd要使組記憶體無效/刷新,請使用:

sudo nscd --invalidate=group

sssd要使組記憶體無效/刷新,請使用:

sudo sss_cache -G

jopasserat 的評論引出了另一個可能的答案。

groups命令不報告使用者的組成員身份。它報告目前程序的組 ID 權限。它僅使用 NSS 將數字組 ID 轉換為名稱。

當使用者登錄時,從 NSS 獲得組成員身份,並使用setgidsetgroups系統呼叫為使用者的初始程序賦予正確的權限。從那裡繼承的所有程序都繼承相同的權限(執行 set-id 程序時除外)。

如果配置的權限發生更改,則在使用者登錄時,現有程序不受影響。您必須註銷並再次登錄才能獲得特權,如果您試圖撤銷特權,則必須殺死所有使用者的程序才能完成工作。

nscd這樣可以增加額外的記憶體層來擔心,但是預先存在的使用者程序實際上是所有配置中都存在的特權記憶體。

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