一、编译 openldap 源码
yum install -y wget git libtool libdb-devel libtool-ltdl-devel krb5-devel
wget https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.57.tgz
tar zxvf openldap-2.4.57.tgz
cd openldap-2.4.57
./configure --libdir=/usr/lib64 --enable-modules
make depend
make
二、编译 bcrypt 模块
cd contrib/slapd-modules/passwd
git clone https://github.com/wclarie/openldap-bcrypt.git bcrypt
cd bcrypt
make
mv pw-bcrypt.la /usr/lib64/openldap/
mv .libs/pw-bcrypt.so /usr/lib64/openldap/
mv .libs/pw-bcrypt.so.0 /usr/lib64/openldap/
mv .libs/pw-bcrypt.so.0.0.0 /usr/lib64/openldap/
三、安装 bcrypt 模块
ldapadd -Y EXTERNAL -H ldapi:/// <<EOF
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: pw-bcrypt.la
EOF
slappasswd -o module-load=pw-bcrypt -h {BCRYPT} -s 123456
{BCRYPT}$2b$08$kpeiai4iNHg9zVl1/Lze8u48NBoboQRfHrSbvr9oEZFa9N18nVpFe
四、测试 bcrypt 密码
这里的 userPassword 里包含 $ 特殊字符,所以我们必须给 EOF 加一对双引号。
ldapadd -D "cn=admin,dc=wuweixin,dc=com" -W <<"EOF"
dn: uid=user,dc=wuweixin,dc=com
objectClass: top
objectClass: account
objectClass: simpleSecurityObject
uid: user
userPassword: {BCRYPT}$2b$08$kpeiai4iNHg9zVl1/Lze8u48NBoboQRfHrSbvr9oEZFa9N18nVpFe
EOF
使用 ldapwhoami 测试 uid=user,dc=wuweixin,dc=com BCRYPT 密码能否正常
ldapwhoami -x -D "uid=user,dc=wuweixin,dc=com" -w123456