Samba

創建新使用者時將雜湊密碼寫入 LDAP

  • April 8, 2014

我正在開發一個帶有中央使用者數據庫系統的項目。系統的要求之一是所有應用程序應該只有一組使用者。FreeRADIUS 和 Samba 是我的兩個應用程序,它們都使用 LDAP 作為後端。由於包含許多其他應用程序的整個系統的使用者必須相同,因此我必須從中央數據庫讀取使用者列表並在 Samba 和 FreeRADIUS 的 LDAP 目錄中重新創建它們。問題是使用者是從另一個實體發送給我的,我可以使用他們的雜湊密碼將它們保存在數據庫中。我無權訪問他們的明文密碼。我想知道是否可以使用我首選的雜湊機制直接為 LDAP 中的新使用者輸入雜湊密碼。如果沒有,誰能告訴我我必須使用什麼策略?

我在 UBUNTU 12.04 上執行我的伺服器,所有其他應用程序都是最新版本。我的數據庫系統是 PostgreSQL 9.2。

謝謝

由於您使用的是 OpenLDAP,如果您有兼容的散列格式(和此處),則可以將散列直接輸入到userPassword屬性中。請注意,某些 LDAP 客戶端可能會猜測修改userPassword並應用散列(類似於某些 LDAP 伺服器在寫入時自動修改或散列此屬性的方式)。ldapadd/ldapmodify將正確更新密碼而不重新解釋它(只要您沒有有效的伺服器密碼策略 ppolicy_hash_cleartext,這可能會使事情複雜化)。

您需要確定您擁有的格式,並在散列或散列+鹽格式前加上類型類型,例如{SHA}xxxxxx{SSHA}xxxxxx(其中 xxxxxx 分別是 base64 編碼散列或散列+鹽)。

如果它是crypt格式,您可以使用{crypt}前綴輸入它,但在 OpenLDAP 的情況下,您需要使用 配置建構--enable-crypt,因為它的使用已被棄用。OpenLDAP 將使用 C 庫crypt()函式,其輸出中可能存在特定於平台的變化。在 Linux 上有一個簡單的解決方法,crypt()在它自己的libcrypt庫中,您可以在編譯或執行時“調整”它。(另請注意crypt()不是可重入的,因此slapd使用互斥文本來保護對其的呼叫。)另請參閱password-crypt-salt-format以解決另一個方向的問題:使 OpenLDAP 以各種加密格式儲存密碼。

由於您使用的是 Samba,因此您還應該研究smbk5pwd覆蓋(自述文件更有用)。請注意,儘管這需要更改密碼才能使用正確的密碼修改操作,而不是直接修改userPassword.

使用 OpenLDAP,您還可以選擇通過 SASL將密碼驗證委託給外部系統(也需要非預設建構配置),這在遷移視窗期間可能就足夠了,直到所有使用者重置密碼。另一個選項(通常令人驚訝)是 OpenLDAP 還支持每個使用者的多個密碼,在身份驗證期間依次嘗試每個密碼。雖然有點脆弱(它要求userPassword屬性的所有編寫者都做正確的事情),但它可以幫助遷移,尤其是在合併多個系統時。

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