Appendix OpenLDAP 同期レプリケーション
設定のポイント
プロバイダ側でsyncprovを有効化する。
コンシューマ側で同期に関連する設定をする。
プロバイダ側の設定:rocky9-ldap21
オーバーレイでsyncprovを有効化するだけ。
オーバーレイでsyncprovを追加する
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# vi setup-syncrepl-addsyncprov.ldif
dn: cn=module{0},cn=config
objectClass: olcModulelist
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f setup-syncrepl-addsyncprov.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"
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=module{0},cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
cn: module{0}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: {0}syncprov.la
[root@rocky9-ldap21 openldap]#
syncprovを有効化する
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# vi setup-syncrepl-enablesyncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 1000
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f setup-syncrepl-enablesyncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=syncprov,olcDatabase={2}mdb,cn=config"
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcOverlay={0}syncprov,olcDatabase={2}mdb,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcOverlay={0}syncprov,olcDatabase={2}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov
olcSpSessionlog: 1000
[root@rocky9-ldap21 openldap]#
コンシューマ側:rocky9-ldap22
同期レプリケーションに関わる設定をする。
typeでrefreshOnlyかrefreshAndPersistを指定する。
同期させるための設定をする
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# vi setup-syncrepl-enablesyncprov.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
provider=ldap://192.168.56.21:389/
bindmethod=simple
binddn="cn=Manager,dc=example,dc=co,dc=jp"
credentials=password
searchbase="dc=example,dc=co,dc=jp"
scope=sub
schemachecking=on
type=refreshAndPersist
retry="30 5 300 3"
interval=00:00:05:00
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f setup-syncrepl-enablesyncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}mdb,cn=config"
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={2}mdb,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=hwdo
main,dc=lan" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=example,dc=co,dc=jp" write by * read
olcRootDN: cn=Manager,dc=example,dc=co,dc=jp
olcRootPW: {SSHA}QBGJJEMP1rLuEqNTeoNH5oRINY+Nysph
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSyncrepl: {0}rid=001 provider=ldap://192.168.56.21:389/ bindmethod=simple b
inddn="cn=Manager,dc=example,dc=co,dc=jp" credentials={SSHA}QBGJJEMP1rLuEqNTe
oNH5oRINY+Nysph searchbase="dc=example,dc=co,dc=jp" scope=sub schemachecking=
on type=refreshAndPersist retry="30 5 300 3" interval=00:00:05:00
[root@rocky9-ldap22 openldap]#
動作確認
ネットワークの観点で確認
type=refreshAndPersistとしているのでコンシューマからプロバイダに対して常時TCPコネクションを張っている。
★ プロバイダ側のネットワーク状況 ★
[root@rocky9-ldap21 ~]#
[root@rocky9-ldap21 ~]# ss -ant
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:*
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:*
ESTAB 0 0 192.168.56.21:389 192.168.56.22:41646
[root@rocky9-ldap21 ~]#
★ コンシューマ側のネットワーク状況 ★
[root@rocky9-ldap22 ~]#
[root@rocky9-ldap22 ~]# ss -ant
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:*
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:*
ESTAB 0 0 192.168.56.22:41646 192.168.56.21:389
[root@rocky9-ldap22 ~]#
ユーザー追加
プロバイダ側でuser01を追加してみる。
★ ユーザー追加前 プロバイダ側★
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" uid=user01
Enter LDAP Password: ********
[root@rocky9-ldap21 openldap]#
★ ユーザー追加前 コンシューマ側★
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" uid=user01
Enter LDAP Password: ********
[root@rocky9-ldap22 openldap]#
★ プロバイダ側で追加するユーザー user01 ★
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# vi setup-adduser-user01.ldif
dn: uid=user01,ou=Users,dc=example,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user00
sn: example
userPassword: {SSHA}rE0zyJNP9W87MKHgicLCeYqW+ZFTeYhr
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/user01
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
dn: cn=user01,ou=Groups,dc=example,dc=co,dc=jp
objectClass: posixGroup
cn: user00
gidNumber: 1001
memberUid: user01
[root@rocky9-ldap21 openldap]#
★ プロバイダ側でユーザー追加 ★
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapadd -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -f setup-adduser-user01.ldif
Enter LDAP Password: ********
adding new entry "uid=user01,ou=Users,dc=example,dc=co,dc=jp"
adding new entry "cn=user01,ou=Groups,dc=example,dc=co,dc=jp"
[root@rocky9-ldap21 openldap]#
★ プロバイダ側で確認 ★
[root@rocky9-ldap21 openldap]#
[root@rocky9-ldap21 openldap]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" uid=user01
Enter LDAP Password: ********
dn: uid=user01,ou=Users,dc=example,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user00
sn: example
userPassword:: e1NTSEF9ckUwenlKTlA5Vzg3TUtIZ2ljTENlWXFXK1pGVGVZaHI=
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/user01
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
uid: user01
[root@rocky9-ldap21 openldap]#
★ コンシューマ側で確認 = 同期されている ★
[root@rocky9-ldap22 ~]#
[root@rocky9-ldap22 ~]# ldapsearch -LLL -x -W -D "cn=Manager,dc=example,dc=co,dc=jp" -b "dc=example,dc=co,dc=jp" uid=user01
Enter LDAP Password: ********
dn: uid=user01,ou=Users,dc=example,dc=co,dc=jp
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: user00
sn: example
userPassword:: e1NTSEF9ckUwenlKTlA5Vzg3TUtIZ2ljTENlWXFXK1pGVGVZaHI=
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/user01
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
uid: user01
[root@rocky9-ldap22 ~]#
補足
typeを変更するには、削除するLDIFファイルを使ってolcSyncreplの定義を削除してから、設定するLDIFファイルを使って再設定する。
以下操作例ではolcSyncreplの定義を削除している。
★ 削除する設定を確認する(ここでは「olcSyncrepl: {0}rid=001~」) ★
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={2}mdb,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=hwdo
main,dc=lan" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=example,dc=co,dc=jp" write by * read
olcRootDN: cn=Manager,dc=example,dc=co,dc=jp
olcRootPW: {SSHA}QBGJJEMP1rLuEqNTeoNH5oRINY+Nysph
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSyncrepl: {0}rid=001 provider=ldap://192.168.56.21:389/ bindmethod=simple b
inddn="cn=Manager,dc=example,dc=co,dc=jp" credentials=password searchbase="dc
=example,dc=co,dc=jp" scope=sub schemachecking=on type=refreshAndPersist retr
y="30 5 300 3" interval=00:00:05:00
[root@rocky9-ldap22 openldap]#
★ 削除用のLDIFを作成し削除する設定をコピー&ペーストする ★
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# vi setup-syncrepl-deletesyncprov.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
delete: olcSyncRepl <---★ deleteにして、次の行から削除する設定をコピー&ペーストする
olcSyncrepl: {0}rid=001 provider=ldap://192.168.56.21:389/ bindmethod=simple b
inddn="cn=Manager,dc=example,dc=co,dc=jp" credentials=password searchbase="dc
=example,dc=co,dc=jp" scope=sub schemachecking=on type=refreshAndPersist retr
y="30 5 300 3" interval=00:00:05:00
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# ldapmodify -Y EXTERNAL -H ldapi:/// -f setup-syncrepl-deletesyncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}mdb,cn=config"
[root@rocky9-ldap22 openldap]#
[root@rocky9-ldap22 openldap]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "olcDatabase={2}mdb,cn=config"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=hwdo
main,dc=lan" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=example,dc=co,dc=jp" write by * read
olcRootDN: cn=Manager,dc=example,dc=co,dc=jp
olcRootPW: {SSHA}QBGJJEMP1rLuEqNTeoNH5oRINY+Nysph
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
<---★ olcSyncreplが消えている
[root@rocky9-ldap22 openldap]#
参考文献
この記事が気に入ったらサポートをしてみませんか?