LDAP添加 memberOf 模块
ldap的group是一种单独的类型objectClass: groupOfNames, 有个字段叫做member, value就是entry的dn。如此,实现了group-user的映射关系。
- group添加member的时候会自动给对应的entry添加memberof字段
- 当删除entry的时候,也会从group里删除member字段
注意:
- cn=module 的名称请查看ls -l /etc/ldap/slapd.d/cn=config/ |grep module 如果没有直接写module ,Docker中默认为module{0};
- olcDatabase={2}hdb 请确认ls -l /etc/ldap/slapd.d/cn=config/ |grep olcDatabase 的名称,docker中默认的为{1}mdb,Centos rpm 安装默认为{2}hdb。
- /usr/lib/ldap 为ldap 模块路径,不同系统的路径不同,Centos 的默认路径为/usr/lib64/openldap ,Ubuntu 系统下的默认路径为/var/lib/ldap
添加 memberOf 模块(每个节点都要添加)
添加 add_module_group.ldif 文件 (在不知道memberof.la文件在什么位置时:find / -name memberof.la)
cat >add_module_group.ldif << EOF
# Load memberof module
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib/ldap
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof.la
EOF
应用ldap 配置
# master 节点
docker cp add_module_group.ldif ldap-master01:/
docker exec ldap-master01 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /add_module_group.ldif
# slave 节点
docker cp add_module_group.ldif ldap-slave01:/
docker exec ldap-slave01 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /add_module_group.ldif
adding new entry "cn=module,cn=config"
modifying entry "cn=module{0},cn=config"
修改配置
ldapmodify -c -Q -Y EXTERNAL -H ldapi:/// -f /add_module_group.ldif
然后使用以下命令验证是否添加成功。
$ docker exec ldap-master01 slapcat -b cn=config | grep olcModuleLoad
olcModuleLoad: {0}back_mdb
olcModuleLoad: {1}memberof
olcModuleLoad: {2}refint
olcModuleLoad: {3}syncprov
olcModuleLoad: {4}syncprov.la
olcModuleLoad: {5}memberof.la
$ docker exec ldap-master01 slapcat -b cn=config | grep olcModulePath
olcModulePath: /usr/lib/ldap
olcModulePath: /usr/lib64/openldap
olcModulePath: /usr/lib64/openldap
olcModulePath: /usr/lib64/openldap
olcModulePath: /var/lib/ldap
olcModulePath: /var/lib/ldap
olcModulePath: /var/lib/ldap
olcModulePath: /usr/lib/ldap
olcModulePath: /usr/lib/ldap
增加 objectClass 支持
添加 add_group_objectClass.ldif 文件,增加 objectClass 支持
cat >add_group_objectClass.ldif << EOF
dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: cn eq,sub
EOF
# Backend memberOf overlay
dn: olcOverlay={0}memberof,olcDatabase={1},cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: {0}memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
应用 ldap 配置
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_group_objectClass.ldif Docker
# master 节点
docker cp add_group_objectClass.ldif ldap-master01:/
docker exec ldap-master01 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /add_group_objectClass.ldif
# slave 节点
docker cp add_group_objectClass.ldif ldap-slave01:/
docker exec ldap-slave01 ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /add_group_objectClass.ldif
adding new entry "olcOverlay=memberof,olcDatabase={1}mdb,cn=config"
modifying entry "olcDatabase={1}mdb,cn=config"