memberof 和 refint 在 openLdap 中不起作用
memberof and refint does not work in openLdap
我正在使用 CentOs 7.x 64 位版本来设置 openLdap。我想使用 memberof overlay 向用户显示他们所属的组。我的理解是,随着 memberof 和 refint 覆盖处于活动状态,Openldap 服务器会自动维护用户的 memberof 属性 并确保它与实际成员资格一致。但是,它根本没有这样做。我可以手动设置 memberof 属性,但它不必保持一致,也不会自动维护。
问题是:我对它应该如何工作以及如何让它工作的理解是否正确?
我的主要要求是准确显示会员资格。如果我可以通过 memberof 操纵成员资格,那会很好,但这不是必需的。
详情
我按照以下步骤完成的:
- 在人员组中创建一个人员,objectClass 'inetOrgPerson' 和 'person'。并命名为 'Joe'
- 创建一个名为 'agent' 的 'groupOfNames' 组。并且具有值 'uid=joe,ou=people,dc=company,dc=com'
的成员属性
现在,当我查看人 'Joe' 时,我找不到在 Apache ldap studio 中启用 'showing organisational attribute' 的 'memberOf' 属性。
而且用下面的命令行搜索,也找不到组。
ldapsearch -H ldap://localhost -x -b "dc=company,dc=com" '(uid=joe)' memberOf
以下是 slapcat 的片段:
dn: ou=people,dc=company,dc=com
objectClass: organizationalUnit
ou: people
description: Application users
structuralObjectClass: organizationalUnit
entryUUID: 82532aa8-f3e8-1039-9c72-6f4976491fc1
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200306112229Z
entryCSN: 20200306112229.195806Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200306112229Z
dn: uid=joe,ou=people,dc=company,dc=com
uid: joe
cn: joe.doe
sn: doe
objectClass: inetOrgPerson
objectClass: person
userPassword:
structuralObjectClass: inetOrgPerson
entryUUID: 079b9550-03b2-103a-89f5-811bd9f87026
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200326133249Z
entryCSN: 20200326133249.091679Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200326133249Z
dn: cn=a1,ou=agent,dc=company,dc=com
member: uid=joe,ou=people,dc=company,dc=com
cn: a1
objectClass: groupOfNames
structuralObjectClass: groupOfNames
entryUUID: 2c9df272-047e-103a-9203-eba7d52bfa3f
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200327135408Z
entryCSN: 20200402133540.270695Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200402133540Z
我正在使用 ansible 运行 配置。这是配置文件的片段
- name: Install memberof and refint overlays
include_tasks: "{{ role_path }}/tasks/add_module_to_ldap_conf.yml"
vars:
add_module_to_ldap: "{{ item }}"
loop:
- name: memberof overlay
module_file: 'memberof.la'
- name: refint overlay
module_file: 'refint.la'
- name: Activate overlays
include_tasks: "{{ role_path }}/tasks/put_ldap_admin_entry.yml"
vars:
put_ldap_entry:
dn: "olcOverlay={{ item.overlay }},'olcDatabase={2}hdb','cn=config'"
objectClass: "{{ item.objectClass }}"
attributes: "{{ item.attributes }}"
loop:
- overlay: memberof
objectClass:
- top
- olcConfig
- olcMemberOf
- olcOverlayConfig
attributes:
olcOverlay: memberof
olcMemberOfRefint: 'TRUE'
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
- overlay: refint
objectClass:
- top
- olcConfig
- olcRefintConfig
- olcOverlayConfig
attributes:
olcOverlay: refint
olcRefintAttribute: 'memberof member manager owner'
我尝试手动添加 memberOf 属性,搜索可以 return 群组。但是,当更新此人的组时,它不会维护该组。所以我怀疑refint也不起作用。
ldapsearch -H ldap://localhost -x -b "dc=company,dc=com" '(uid=joe)' memberOf
这是活动叠加层片段:
ldapsearch -LL -Y EXTERNAL -H ldapi:/// -b cn=Overlays,cn=Monitor -s base monitoredObject
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1
dn: cn=Overlays,cn=Monitor
objectClass: monitorContainer
cn: Overlays
description: This subsystem contains information about available overlays.
monitoredInfo: refint
monitoredInfo: memberof
monitoredInfo: glue
我们的初始配置缺少以下属性:
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
我为以下配置手动修改了 ldap
dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
然后会员工作。在我们删除丢失的属性并重新运行 Ansible 后,它似乎并没有取消修复。所以我们不确定哪里出了问题。
我正在使用 CentOs 7.x 64 位版本来设置 openLdap。我想使用 memberof overlay 向用户显示他们所属的组。我的理解是,随着 memberof 和 refint 覆盖处于活动状态,Openldap 服务器会自动维护用户的 memberof 属性 并确保它与实际成员资格一致。但是,它根本没有这样做。我可以手动设置 memberof 属性,但它不必保持一致,也不会自动维护。
问题是:我对它应该如何工作以及如何让它工作的理解是否正确?
我的主要要求是准确显示会员资格。如果我可以通过 memberof 操纵成员资格,那会很好,但这不是必需的。
详情
我按照以下步骤完成的:
- 在人员组中创建一个人员,objectClass 'inetOrgPerson' 和 'person'。并命名为 'Joe'
- 创建一个名为 'agent' 的 'groupOfNames' 组。并且具有值 'uid=joe,ou=people,dc=company,dc=com' 的成员属性
现在,当我查看人 'Joe' 时,我找不到在 Apache ldap studio 中启用 'showing organisational attribute' 的 'memberOf' 属性。 而且用下面的命令行搜索,也找不到组。
ldapsearch -H ldap://localhost -x -b "dc=company,dc=com" '(uid=joe)' memberOf
以下是 slapcat 的片段:
dn: ou=people,dc=company,dc=com
objectClass: organizationalUnit
ou: people
description: Application users
structuralObjectClass: organizationalUnit
entryUUID: 82532aa8-f3e8-1039-9c72-6f4976491fc1
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200306112229Z
entryCSN: 20200306112229.195806Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200306112229Z
dn: uid=joe,ou=people,dc=company,dc=com
uid: joe
cn: joe.doe
sn: doe
objectClass: inetOrgPerson
objectClass: person
userPassword:
structuralObjectClass: inetOrgPerson
entryUUID: 079b9550-03b2-103a-89f5-811bd9f87026
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200326133249Z
entryCSN: 20200326133249.091679Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200326133249Z
dn: cn=a1,ou=agent,dc=company,dc=com
member: uid=joe,ou=people,dc=company,dc=com
cn: a1
objectClass: groupOfNames
structuralObjectClass: groupOfNames
entryUUID: 2c9df272-047e-103a-9203-eba7d52bfa3f
creatorsName: cn=root,dc=company,dc=com
createTimestamp: 20200327135408Z
entryCSN: 20200402133540.270695Z#000000#000#000000
modifiersName: cn=root,dc=company,dc=com
modifyTimestamp: 20200402133540Z
我正在使用 ansible 运行 配置。这是配置文件的片段
- name: Install memberof and refint overlays
include_tasks: "{{ role_path }}/tasks/add_module_to_ldap_conf.yml"
vars:
add_module_to_ldap: "{{ item }}"
loop:
- name: memberof overlay
module_file: 'memberof.la'
- name: refint overlay
module_file: 'refint.la'
- name: Activate overlays
include_tasks: "{{ role_path }}/tasks/put_ldap_admin_entry.yml"
vars:
put_ldap_entry:
dn: "olcOverlay={{ item.overlay }},'olcDatabase={2}hdb','cn=config'"
objectClass: "{{ item.objectClass }}"
attributes: "{{ item.attributes }}"
loop:
- overlay: memberof
objectClass:
- top
- olcConfig
- olcMemberOf
- olcOverlayConfig
attributes:
olcOverlay: memberof
olcMemberOfRefint: 'TRUE'
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
- overlay: refint
objectClass:
- top
- olcConfig
- olcRefintConfig
- olcOverlayConfig
attributes:
olcOverlay: refint
olcRefintAttribute: 'memberof member manager owner'
我尝试手动添加 memberOf 属性,搜索可以 return 群组。但是,当更新此人的组时,它不会维护该组。所以我怀疑refint也不起作用。
ldapsearch -H ldap://localhost -x -b "dc=company,dc=com" '(uid=joe)' memberOf
这是活动叠加层片段:
ldapsearch -LL -Y EXTERNAL -H ldapi:/// -b cn=Overlays,cn=Monitor -s base monitoredObject
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1
dn: cn=Overlays,cn=Monitor
objectClass: monitorContainer
cn: Overlays
description: This subsystem contains information about available overlays.
monitoredInfo: refint
monitoredInfo: memberof
monitoredInfo: glue
我们的初始配置缺少以下属性:
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
我为以下配置手动修改了 ldap
dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
然后会员工作。在我们删除丢失的属性并重新运行 Ansible 后,它似乎并没有取消修复。所以我们不确定哪里出了问题。