close

因為某位神秘同事發現, 我們目前使用的網頁認證 (apache mod_auth_ldap + openldap) 有奇怪的狀況, 研究之後發現, 因為我們在 openldap 裡面用的 userPassword 是 Crypt 編碼, 而 Crypt 編碼只處理前八個字元, 也就是說如果密碼長度超過八碼, 也只有前八碼有效. 為了解決這個問題, 我們改用 md5 編碼, 但是利用 perl 的 Digest::MD5 裡的 md5_base64 發現會有問題, 研究了一下前人的腳步發現, 要用以下的方法:

use Digest::MD5 qw(md5);

use MIME::Base64;

my $encrypted_password = mime_encode(md5($clear_password));

產生出來的編碼才是對的, 直接使用 Digest::MD5 的 md5_base64 產生出來的會有問題.  (當然要餵入 openldap 之前, 前面要加上 {MD5} )

 

但是改成 md5 之後, 原本有台機器透過 pam_ldap/nss_ldap 做認證的卻失敗, 我猜測是需要更改原本的 crypt, 但是改了 /etc/ldap.conf 裡的 pam_password 卻還是不行, 研究了半天, 發現其實 Fedora 本來就有一個 authconfig 的程式可以用, 所以執行 authconfig 設定一下就可以了.

稍微研究一下, 我想應該是 authconfig 更改了 /etc/pam.d/system-auth.

 

附記, 雖然 openldap 支援 crypt, md5, ssha 等等編碼方式, 但是如果要跟 pam_ldap/nss_ldap 整合, 就只有 crypt/md5 兩種選擇.


全站熱搜
創作者介紹
創作者 anakinsean 的頭像
anakinsean

anakinsean

anakinsean 發表在 痞客邦 留言(3) 人氣()