Centos 7 下安裝LDAP 雙主同步
標簽(空格分隔): LDAP
安裝說明:
從OpenLDAP2.4.23版本開始所有配置數據都保存在slapd.d目錄下的cn=config文件夾中,不再使用slapd.conf作為配置文件
有兩種配置方式,一種是通過修改舊版配置文件slapd.conf,再用slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/導入到數據庫中,這種方式非常麻煩,不建議使用。
一種是通過編輯ldif文件,再用ldapadd命令導入到數據庫中,這種方式是動態配置,不需要重新啟動服務端slapd進程。
本文采用第二種方式,這種方式網上文檔比較少,不好弄,本人花了10幾天才算搞了個半懂,在這記錄下來,希望能給有需要的人一些幫助
如果非要使用第一種方法,centos7系統yum安裝后沒有slapd.conf.obsolete文件,可以選擇從centos6上復制過來
官方文檔: https://www.openldap.org/doc/admin24/slapdconf2.html
安裝環境
centos 7.5
ldap主1服務器:VECS05855 10.111.30.24
ldap主2服務器:VECS05856 10.111.30.25
OpenLDAP2.4.44
root賬號下執行所有命令
一,安裝步驟(兩台機器均執行)
1,安裝ldap
yum install -y openldap openldap-servers openldap-clients compat-openldap
備注(僅僅說明,不需要執行):
#可以通過rpm -ql <package name>,來查看每個安裝包都有哪些文件
openldap: #OpenLDAP配置文件、庫和文檔
openldap-servers: #服務器進程及相關命令、遷移腳本和相關文件
openldap-clients: #客戶端進程及相關命令,用來訪問和修改 OpenLDAP 目錄
compat-openldap: #與主從配置相關
安裝過程中會自動創建ldap用戶和ldap組(確認安裝完畢)
root@VECS05855:~# grep ldap /etc/passwd
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
root@VECS05855:~# grep ldap /etc/group
ldap:x:55:
root@VECS05855:~#
2、 復制數據庫模板並更改權限
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
3、啟動ldap,並設置為開機啟動。 ldap服務端進程名稱為slapd
systemctl enable slapd && systemctl start slapd && systemctl status slapd
驗證已經啟動
root@VECS05855:~# netstat -tunlp |grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 19473/slapd
tcp6 0 0 :::389 :::* LISTEN 19473/slapd
4、使用 slappasswd 命令生成密碼
這一步生成管理員密碼,注意兩台機器的上明文密碼一樣,密文密碼不一樣。
root@VECS05855:~# slappasswd
New password:
Re-enter new password:
{SSHA}csl6iL5aVUWP1+UUnN/FhTkUKilET2+J
編寫 LDIF(一種LDAP 專用的數據交換格式)文件,並通過ldapadd命令將管理員密碼導入到 LDAP配置文件中。
root@VECS05855:~# vim chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}csl6iL5aVUWP1+UUnN/FhTkUKilET2+J
導入
root@VECS05855:~# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
5、導入基本數據結構
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
6、配置 LDAP 的根域(以 dc=hellobike,dc=com 為例)及其管理域:
root@VECS05855:~# vim chdomain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
by dn.base="cn=admin,dc=hellobike,dc=com" read
by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=hellobike,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=hellobike,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}csl6iL5aVUWP1+UUnN/FhTkUKilET2+J
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=hellobike,dc=com" write
by anonymous auth
by self write
by * none
olcAccess: {1}to dn.base=""
by * read
olcAccess: {2}to *
by dn="cn=admin,dc=hellobike,dc=com" write
by * read
導入
root@VECS05855:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
7、在上述基礎上,我們來創建一個叫做 hellobike company 的組織
root@VECS05855:~# vim basedomain.ldif
dn: dc=hellobike,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: hellobike Company
dc: hellobike
dn: cn=admin,dc=hellobike,dc=com
objectClass: organizationalRole
cn: admin
dn: ou=People,dc=hellobike,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=hellobike,dc=com
objectClass: organizationalRole
cn: Group
導入
[root@test1] ~$ ldapadd -x -D cn=admin,dc=hellobike,dc=com -W -f basedomain.ldif
Enter LDAP Password: #輸入上面設置的管理員密碼(明文)
adding new entry "dc=hellobike,dc=com"
adding new entry "cn=admin,dc=hellobike,dc=com"
adding new entry "ou=People,dc=hellobike,dc=com"
adding new entry "ou=Group,dc=hellobike,dc=com"
通過以上的所有步驟,我們就設置好了一個 LDAP 目錄樹:其中基准 dc=hellobike,dc=com 是該樹的根節點,其下有一個管理域 cn=admin,dc=hellobike,dc=com 和兩個組織單元 ou=People,dc=hellobike,dc=com 及 ou=Group,dc=hellobike,dc=com。
二、配置雙主復制功能,在主1和主2上執行均下面的步驟
1. 啟用 syncprov 模塊
root@VECS05855:~# vim syncprov_mod.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
導入執行該文件
root@VECS05855:~# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"
2,啟用 OpenLDAP 的雙主同步
創建 configrep.ldif 文件。
configrep.ldif
root@VECS05855:~# vim configrep.ldif
### Update Server ID with LDAP URL ###
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://VECS05855
olcServerID: 2 ldap://VECS05856
### Enable replication ###
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
### Adding details for replication ###
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl:
rid=001
provider=ldap://VECS05855
binddn="cn=admin,dc=hellobike,dc=com"
bindmethod=simple
credentials=Bi@#admin
searchbase="dc=hellobike,dc=com"
type=refreshAndPersist
retry="5 5 300 5"
timeout=1
olcSyncRepl:
rid=002
provider=ldap://VECS05856
binddn="cn=admin,dc=hellobike,dc=com"
bindmethod=simple
credentials=Bi@#admin
searchbase="dc=hellobike,dc=com"
type=refreshAndPersist
retry="5 5 300 5"
timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE
然后在兩台服務器上分別執行這個 ldap_sync.ldif 文件即可。
ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif
至此,dc=hellobike,dc=com 下的內容便可以在兩個服務器上同步了。
如果其他需要ldap 的客戶端為centos6 :
authconfig --enableldap --ldapserver=ldap://VECS08934 --ldapbasedn=dc=hellobike,dc=com --updateall --enablemkhomedir --enablesssd --enablesssdauth
測試可以啟動sssd 進程。
如果其他需要ldap 的客戶端為centos7:
則只需要安裝sssd(yum install -y sssd)
[domain/default]
cache_credentials = True
ldap_search_base =dc=hellobike,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://VECS08934
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/certs
[sssd]
config_file_version = 2
services = nss, pam
domains = default
debug_level = 5
[pam]
[nss]
homedir_substring = /home
參考:https://blog.csdn.net/fanren224/article/details/79707206
http://v.colinlee.fish/posts/openldap-speedy-tutorial-replication.html