当前位置: 首页 > wzjs >正文

永久免费自助建站系统网站建设经费保障

永久免费自助建站系统,网站建设经费保障,深圳建设交易信息网站,建站公司用的服务器memberOf 反向属性丢失 最近的主旋律是降本增效,每隔一段时间就送走一批同事和服务器,也是没谁了。 历史包袱,有两套 openldap 服务,需要做腾退。 简单说就是把一台中的数据导出,然后导入到另一台中去。 导出导入本…

在这里插入图片描述

memberOf 反向属性丢失

最近的主旋律是降本增效,每隔一段时间就送走一批同事和服务器,也是没谁了。

历史包袱,有两套 openldap 服务,需要做腾退。

简单说就是把一台中的数据导出,然后导入到另一台中去。

导出导入本身很简单没什么可说的。

但是导入之后同事反馈查不到用户所在的组了。

这怎么可能的呢,我测过是好用的呀?

一番探究,同事用了 openldap memberof反向属性的能力。

memberOf 是一个 自动反向关联属性,当你把用户加入某个组(如 groupOfNames.member),OpenLDAP 自动在用户条目上加上 memberOf —— 但前提是:

  • 你启用了 memberof overlay
  • 并在 启用 overlay 后 添加的 member 才会触发,memberOf 属性不会自动补历史数据,你需要更新成员才会触发。这是关键。

启用 memberof overlay

# memberof_overlay.ldif
dn: olcOverlay=memberof,olcDatabase={6}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcMemberOfConfig
olcOverlay: memberof
olcMemberOfRefInt: TRUE
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
ldapadd -Y EXTERNAL -H ldapi:/// -f memberof_overlay.ldif
systemctl restart slapd
systemctl status slapd

批量删除并重新添加组内成员

import ldapTEMP_MEMBER_DN = b"cn=temp,ou=people,dc=x,dc=com"def list_group_dns():ldap_uri = "ldap://ldap.x.com"bind_dn = "cn=ladm,dc=x,dc=com"bind_pw = "your_bind_pw"  # 替换成实际密码conn = ldap.initialize(ldap_uri)conn.simple_bind_s(bind_dn, bind_pw)# 搜索所有 groupOfNames 组group_results = conn.search_s("dc=x,dc=com",ldap.SCOPE_SUBTREE,"(objectClass=groupOfNames)",["member"])for dn, attrs in group_results:print(f"- {dn}")members = attrs.get("member", [])for member_dn in members:# 删除(如果不是唯一成员)if len(members) > 1:print(f"{dn} 成员数: {len(members)}")try:conn.modify_s(dn, [(ldap.MOD_DELETE, "member", member_dn)])# print(f"[OK] 删除成员: {member_dn.decode()}")try:print(f"重新添加成员: {member_dn.decode()} -> {dn}")# 添加conn.modify_s(dn, [(ldap.MOD_ADD, "member", member_dn)])except ldap.TYPE_OR_VALUE_EXISTS:print(f"[INFO] 已存在成员: {member_dn.decode()},跳过添加")except ldap.LDAPError as e:print(f"[ERROR] 添加成员失败: group={dn}, member={member_dn}, 错误: {e}")except ldap.NO_SUCH_ATTRIBUTE:print(f"[INFO] 成员不存在: {member_dn.decode()},跳过删除")except ldap.LDAPError as e:print(f"[ERROR] 删除成员失败: group={dn}, member={member_dn}, 错误: {e}")else:print(f"{dn} 仅剩一个成员,插入临时成员")conn.modify_s(dn, [(ldap.MOD_ADD, "member", TEMP_MEMBER_DN)])try:conn.modify_s(dn, [(ldap.MOD_DELETE, "member", member_dn)])try:print(f"重新添加成员: {member_dn.decode()} -> {dn}")# 添加conn.modify_s(dn, [(ldap.MOD_ADD, "member", member_dn)])except ldap.TYPE_OR_VALUE_EXISTS:print(f"[INFO] 已存在成员: {member_dn.decode()},跳过添加")except ldap.LDAPError as e:print(f"[ERROR] 添加成员失败: group={dn}, member={member_dn}, 错误: {e}")except ldap.NO_SUCH_ATTRIBUTE:print(f"[INFO] 成员不存在: {member_dn.decode()},跳过删除")except ldap.LDAPError as e:print(f"[ERROR] 删除成员失败: group={dn}, member={member_dn}, 错误: {e}")print(f"{dn} 删除临时成员")conn.modify_s(dn, [(ldap.MOD_DELETE, "member", TEMP_MEMBER_DN)])conn.unbind_s()def main():list_group_dns()if __name__ == "__main__":main()

测试验证

ldapsearch -x -H ldap://ldap.x.com -D "cn=adm,dc=x,dc=com" -W \-b "cn=alice,ou=people,dc=x,dc=com" "(objectClass=person)"dn: cn=alice,ou=people,dc=x,dc=com
memberOf: cn=enabled,ou=abc,ou=group,dc=x,dc=com
http://www.dtcms.com/wzjs/653973.html

相关文章:

  • 服装商务网站建设策划书适合seo优化的网站
  • 做问卷哪个网站好2018网站做外链
  • 太原网站建设开发公司提交百度收录
  • jsp网站制作天津建设工程信息网官网平台
  • 请人做网站注意事项淘宝的网站建设怎么建
  • 英文专业的网站建设织梦dedecms官网
  • 本地网站搭建网站建设的风格
  • 怎么让自己的网站常州做网站包括哪些
  • vip影视建设网站官网网络推广优化工具
  • 领动做的网站怎么样网站建设方面存在的问题
  • 做网站开发没有人带深圳有哪些公司的总部
  • 网站建设石家庄小公司网站建设费用
  • 贵阳网站建设托管注册公司名称查询系统官网
  • 残疾人无障碍网站怎么做丽江网站开发
  • 校园网站设计描述开阿里巴巴网站建设流程
  • 荷塘网站建设在深圳市做一个网站多少钱
  • jq插件网站视频直播app开发公司
  • 建设网站的申请信用卡营销团队外包
  • ftp如何修改网站备案号wordpress花园破解小彬子
  • 中国网站推广黄页名录江苏 建设 招标有限公司网站
  • 设计公司是建筑企业吗想学做网站seo 在哪学 电话多少
  • h5如何做多页面网站外贸必看网站
  • 电子产品网站建设策划书秦皇岛网站建设系统推荐
  • html5 网站开发语言西安市建设工程信息网平台官网
  • 专做动漫的网站功能型网站建设时间
  • 做软测的网站在线域名查询网站
  • 深圳市做物流网站济南腾飞网络网站建设
  • 给期货交易类做网站违法吗怎么把平台推广出去
  • 网站优化seo方案网站开发跟软件开发
  • 长沙网站提升排名特产网站源码