执行ldapadd 命令时报错:ldap_bind: Invalid credentials (49)
轉載自:http://www.linuxfly.org/post/671/
某項目,需要在Asianux 4.0上配置LDAP服務。參考以前的[原]操作ldap 數據庫一文,在執行ldapadd 命令時報錯:
引用
ldap_bind: Invalid credentials (49)
經分析及查詢相關資料,原來該版本的OpenLDAP已改用其他格式保存配置數據,原來的slapd.conf 僅作為模板使用。
一、軟件版本
先來看看具體的版本信息:
引用
# cat /etc/asianux-release
Asianux Server 4 (Hiranya)
# rpm -qa|grep openldap
openldap-2.4.19-15.AXS4.x86_64
openldap-servers-2.4.19-15.AXS4.x86_64
openldap-devel-2.4.19-15.AXS4.x86_64
openldap-clients-2.4.19-15.AXS4.x86_64
compat-openldap-2.4.19_2.3.43-15.AXS4.x86_64
二、配置LDAP
1.修改配置文件
這里假設系統是新安裝好的,沒有遺留數據。若非如此,請參考附錄。
在/etc/openldap目錄下,有一個slapd.conf.bak文件,拷貝一份為slapd.conf。
# cd /etc/openldap
# cp slapd.conf.bak slapd.conf
(為什么這里會沒有slapd.conf,第一次配置時已覺得有點問題,后來才知道,因為該文件現僅作為模板使用,服務真正讀取的配置數據不在這里)
然后,使用slappasswd命令創建一個密碼:
引用
# slappasswd
New password:
Re-enter new password:
{SSHA}3c6DQ4xIKU/7Qz22Y2S2MgOoHhQkasR/
接著,參考以前的文檔,修改slapd.conf中相關的信息,例如:
引用
database????????bdb
suffix??????????"dc=example,dc=com"
checkpoint??????1024 15
rootdn??????????"cn=Manager,dc=example,dc=com"
#rootpw??????????secret
rootpw?{SSHA}3c6DQ4xIKU/7Qz22Y2S2MgOoHhQkasR/
access to *
????????by dn.exact="cn=Manager,dc=example,dc=com"?read
????????by * none
藍色標注的是密碼,默認是注釋的或為明文的“secret”,這里直接使用slappasswd命令生成的密碼。
2.生成配置數據
正如前面所說的,服務運行時并不會讀取slapd.conf 文件,而是從/etc/openldap/slapd.d目錄中讀取相關信息。
我們打開slapd.d/cn=config/olcDatabase={1}bdb.ldif 文件會看到以slapd.conf.bak生成的信息:
引用
# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}bdb.ldif
olcDatabase: {1}bdb
olcSuffix:?dc=my-domain,dc=com
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN:?cn=Manager,dc=my-domain,dc=com
所以,接下來要做的,就是先把這些數據刪掉:
# rm -rf /etc/openldap/slapd.d/*
然后重新生成新配置數據:
引用
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
看看新生成的配置數據是否匹配:
引用
# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}bdb.ldif
dn: olcDatabase={1}bdb
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {1}bdb
olcSuffix:?dc=example,dc=com
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN:?cn=Manager,dc=example,dc=com
不錯吧。但為了便于slapd服務讀取,需要改一下宿主:
引用
# chown -R ldap.ldap slapd.d/
# ll slapd.d/
drwxr-x---. 3 ldap ldap 4096 10月 18 05:17 cn=config
-rw-------. 1 ldap ldap 1007 10月 18 05:17 cn=config.ldif
默認權限是沒問題的,不需修改。
3.生成bdb數據
配置文件中,默認指定把數據存放在/var/lib/ldap目錄下。啟動LDAP服務前,還需要拷貝一個DB_CONFIG文件:
# cp /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap.ldap /var/lib/ldap/DB_CONFIG
若不拷貝該文件,會報錯,請見附錄。啟動slapd服務:
引用
# service slapd start
正在啟動 slapd:?????????????????????????????????????????? [確定]
4.導入數據
為了可正確訪問LDAP數據庫,還需要導入初始數據。使用vi 創建一個ldif文件,內容如下:
引用
# cat example.ldif
dn:dc=example,dc=com
objectclass:dcObject
objectclass:organization
o:Example,Inc.
dc:example
dn:cn=Manager,dc=example,dc=com
objectclass:organizationalRole
cn:Manager
執行ldapadd命令導入:
引用
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"
adding new entry "cn=Manager,dc=example,dc=com"
提示輸入密碼時,輸入開始由slappasswd生成,并寫入slapd.conf 配置模板rootpw部分后面的密碼。
至此,LDAP配置已完成。
5.備份配置模板
為免出現誤會,通常建議把配置文件sladp.conf 拷貝為.bak 文件,作為模板保存:
引用
# mv slapd.conf slapd.conf.bak
mv:是否覆蓋"slapd.conf.bak"? y
三、使用phpLDAPadmin訪問
phpLDAPadmin是使用php編寫的,易于訪問LDAP數據庫的Web工具。從官網下載后,解壓到/var/www/html 目錄下,并改名、賦予合適的屬主。
引用
# ll /var/www/html/phpldapadmin/ -d
drwxr-xr-x. 11 apache apache 4096 10月 18 03:45 /var/www/html/phpldapadmin/
然后,拷貝一個配置文件:
# cd /var/www/html/phpldapadmin/config
# mv config.php.example config.php
即可配置完成。
訪問http://ip/phpladpadmin:
輸入slapd.conf 配置模板中的rootdn 部分作為登陸DN,rootpw 部分為密碼。
登錄成功
四、附錄
1.若系統存在遺留數據,可刪除相關數據后重新配置
# rm -rf /var/lib/ldap/*
# rm -rf /etc/openldap/slapd.d/*
2.執行ldapadd 命令時報錯
引用
ldap_bind: Invalid credentials (49)
這是由于/etc/openldap/slapd.d 目錄中使用的數據與執行導入命令時設置的DN 路徑不符。
解決辦法是,修改ldapadd 中-D 參數后面指定的DN值,或使用slapd.conf 配置模板生成新的配置數據。方法可見上面。
3.執行ldap_add命令時報錯
引用
Invalid syntax (21)
這通常的原因是導入的ldif 中存在不合法的Class,與Schema 中定義不符。例如:objectclass:organizationalRole 寫成 objectclass:organizational 等等。
解決方法是,修改Schema文件,或使用正確的Class定義。
4.重啟slapd服務或執行slaptest 時報錯
引用
bdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).
原因是/var/lib/ldap目錄中缺少DB_CONFIG文件,參考上面的方法從openldap-servers 包中拷貝一份,并賦予合適的屬主即可。
五、參考資料
Red Hat 6: How to resolve ldapadd ldap_bind: Invalid credentials (49)
centos 簡單安裝 openldap
相關日志
[原]操作ldap 數據庫
[原]LDAP服務介紹
轉載于:https://blog.51cto.com/wjcaiyf/1601204
總結
以上是生活随笔為你收集整理的执行ldapadd 命令时报错:ldap_bind: Invalid credentials (49)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超全局变量
- 下一篇: paramiko在windows上的安装