為什么要做這個事
公司打算做統一認證,由於LDAP支持radius,可以把網絡、安全設備集中在一個LDAP中認證;
OpenLDAP
OpenLDAP 是 LDAP 協議的一個開源實現。LDAP 服務器本質上是一個為只讀訪問而優化的非關系型數據庫。它主要用做地址簿查詢(如 email 客戶端)或對各種服務訪問做后台認證以及用戶數據權限管控。(例如,訪問 Samba 時,LDAP 可以起到域控制器的作用;或者 Linux 系統認證 時代替
/etc/passwd
的作用。)
環境
Centos 6.5 雙機:
10.65.0.38
10.65.0.39
安裝
centos6.4默認安裝了LDAP,但沒有裝ldap-server和ldap-client, yum安裝最簡單:
su root # yum install -y openldap openldap-servers openldap-clients
准備數據庫目錄,openldap配置文件
# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf # cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # mv /etc/openldap/slapd.d{,.bak}
為什么要將slapd.d目錄移動為.bak文件,如果這個文件存在,直接修改slapd.conf后還需要重新生成slapd.d目錄,因為官方 對於 OpenLDAP 2.4 ,不推薦使用
slapd.conf
作為配置文件。從這個版本開始所有配置數據都保存在/etc/openldap/slapd.d/
中。如果沒有以上第三步的操作,每次重新生成slapd.d的步驟為:# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/如果沒有將slapd.d改變名稱,意味着每次改變slapd.conf時,都需要運行以上命令,生成新的slapd.d目錄,接着要改變slapd.d的屬主:
# chown -R ldap:ldap /etc/openldap/slapd.d
# slapindex # chown ldap:ldap /var/lib/openldap/openldap-data/*最后,在將openLDAP服務重啟,保證配置文件變更生效,這里建議直接就吧slapd.d目錄做個備份,然后刪掉,這樣改變slapd.conf后,直接重啟服務就可生效。
# service slapd restart
配置
vim修改slapd.conf文件,步驟如下:
1、設置目錄樹后綴,一般以公司域名來設置
2、設置LDAP管理員DN
3、修改LDAP管理員口令
找到語句:
suffix "dc=my-domain,dc=com"rootdn "cn=Manager,dc=my-domain,dc=com"rootpw secret將其改為:
suffix "dc=example,dc=com"rootdn "cn=Manager,dc=example,dc=com"rootpw {SSHA}NXV9Fl28qCHMmA6P sjhVX0uejTKE6OYr
以上的密文值是通過以下命令生成的
# slappasswd -s your_secret_string配置文件修改之后分下權限
chown ldap.ldap /etc/openldap/* chown ldap.ldap /var/lib/ldap/*
重啟服務:
# service slapd restart
數據導入
新建文件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
通過命令導入:
/usr/bin/ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f example.ldif
配置基於TLS的OpenLDAP
如果要使用基於TLS的LDAPS安全協議來連接,必須先生成證書,可以使用自簽發的SSL證書。說到這個自簽發證書,被狠狠的坑了很久,查了無數文檔,直到看到wiki上的一句話才解決問題,把wiki上的官方文檔貼一下,讓大家少進坑為妙:
Warning: OpenLDAP cannot use a certificate that has a password associated to it.如果OpenLDAP要利用證書來使用LDAPS協議,證書必須不含密碼。
創建的步驟為:
$ openssl req -new -x509 -nodes -out slapdcert.pem -keyout slapdkey.pem -days 365
接下來將會要求輸入一些,證書創建的信息,包括省份,城市,之類的,按照實際的填即可,有些可以為空,值得注意的是,CN值必須為服務器主機名或者IP值
CN (Common Name):10.65.0.38
將生成的證書文件 slapdcert.pem及私鑰文件slapdkey.pem,移動到/etc/openldap/openldap/ssl目錄下(沒有的話可以先創建):
# mv slapdcert.pem slapdkey.pem /etc/openldap/ssl/ # chmod -R 755 /etc/openldap/ssl/ # chmod 400 /etc/openldap/ssl/slapdkey.pem # chmod 444 /etc/openldap/ssl/slapdcert.pem # chown ldap /etc/openldap/ssl/slapdkey.pem
配置基於SSL的slapd
修改配置文件(/etc/openldap/slapd.conf)
# Certificate/SSL Section TLSCipherSuite HIGH:MEDIUM:-SSLv2 TLSCertificateFile /etc/openldap/ssl/slapdcert.pem TLSCertificateKeyFile /etc/openldap/ssl/slapdkey.pem
關閉openldap,然后重新啟動基於SSL的slapd
/etc/init.d/slapd stopslapd -h "ldap:/// ldaps:///"
配置雙機主從復制 LDAP:
按照以上步驟安裝從OpenLDAP服務器,使用Syncrepl方式來同步主從服務器數據,該方式是slave服務器以拉的方式同步master的用戶數據, 該方式缺點:當你修改一個條目中的一個屬性值(or大批量的萬級別的某1屬性值),它不是簡單的同步過來這些屬性,而是把修改的條目一起同步更新來。
1、配置master LDAP , vim /etc/openldap/slapd.conf 加入以下
#replication index entryCSN,entryUUID eq overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100
2、配置 slave LDAP ,vim /etc/openldap/slapd.conf 加入以下
#replication index entryCSN,entryUUID eq syncrepl rid=123 provider=ldap://10.65.0.38 type=refreshOnly interval=00:00:00:00 searchbase="dc=example,dc=com" filter="(objectClass=inetOrgPerson)" scope=sub attrs="cn,sn,ou,mail,sambaNTPassword,sambaSID,uid,userPassword" schemachecking=off bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=your_secret
配置導入明文密碼是自動變為ssha hash值
vim /etc/openldap/slapd.conf ,將以下值加入(1、加入這個schema 2、啟動ppolicy模塊 3、啟用明文轉換SSHA)
#Include schema include /usr/local/etc/openldap/schema/ppolicy.schema # Load dynamic backend modules: moduleload ppolicy.la # After database definitions, You can add followings. overlay ppolicy ppolicy_hash_cleartext
重啟LDAP服務器
測試:
創建一個LDIF文件
dn: cn=john,ou=Users,dc=example,dc=com
objectClass: person
sn: doe
cn: john
userPassword: johnldap
使用ldapadd命令導入:
ldapadd -x -D "cn=asela,dc=example,dc=com" -W -f user.ldif
使用客戶端打開該dn值,將會看到密碼已經變為SSHA的密碼。
PS:推薦使用的客戶端LDAP administrator
這個直接去官網下載 http://www.ldapbrowser.com/download.htm
配置連接:
連接后的效果
參考的blog:
1、http://my.oschina.net/5lei/blog/193484
2、http://xacmlinfo.org/2015/06/25/enable-hash-passwords-in-openldap/
3、https://wiki.archlinux.org/index.php/OpenLDAP_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)