見出し画像

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]#

参考文献


この記事が気に入ったらサポートをしてみませんか?