Pam

LDAP 每使用者覆蓋

  • March 29, 2019

我正在使用openldap+nslcd連接到 LDAP 伺服器以對某些使用者進行身份驗證(這些使用者希望他們的密碼和大部分配置在許多設備上共享)。我不控制 LDAP 伺服器。

但是,同步是在使用者已經擁有雙帳戶之後進行的,因此主文件夾的名稱不匹配(由於腳本中可能存在硬編碼路徑,因此移動它們是不明智的)。我正在考慮一個硬連結目錄,但我想知道是否有辦法為特定使用者覆蓋主文件夾,這看起來更乾淨,聽起來應該是一個常見的案例。

我很驚訝nslcd.conf似乎只接受一個過濾器(每個 map= passwd),並且map指令將簡單地立即替換所有使用者的首頁。

有沒有辦法在 LDAP 查找後優雅地“修復”單個條目?我的搜尋大多遇到了替換所有使用者模式的答案,或者給出了無用的答案(例如這個簡單地覆蓋了以前的過濾器的答案)。

我認為我需要什麼:

filter passwd (&(objectClass=inetOrgPerson)(<redacted>))
# the last part is wishful thinking, not actual syntax
map passwd homeDirectory "<redacted>" if (uid=<redacted>)

我是 LDAP 的新手,所以我可能不完全理解事務發生的順序以及應該執行此操作的是 PAM 還是 nslcd。我意識到這不是正確處理這種情況的最佳方法,但我仍然想知道是否可以做到。

我認為您不能在nslcd.conf(5)中使用map指令實現單獨的覆蓋。這種映射應用於整個 passwd 映射。但是,根據模組名稱的順序,您可以設置具有不同主目錄的本地passwd條目,該主目錄在文件**/etc/passwd中具有更高的優先級。/etc/nsswitch.conf

範例行/etc/nsswitch.conf

passwd: files ldap

確保其餘屬性保持一致!

IIRC 較新版本的sssd有一個 CLI 工具sss_override(8),它允許為某些使用者設置單獨的值。

但問問你自己:你真的想維持這個爛攤子嗎?

作為您,我首先要與使用者交談,他們寧願$HOME在腳本中使用 env var。

引用自:https://unix.stackexchange.com/questions/508619