【问题标题】:How to add user to LDAP group using Python?如何使用 Python 将用户添加到 LDAP 组?
【发布时间】:2018-07-13 15:17:25
【问题描述】:

我正在使用 Python-LDAP 与 Active Directory 进行交互,并且努力寻找需要编写哪些代码才能将用户添加到安全组中。

我已经编写了搜索用户和组的DN的代码,我只是不确定我需要使用什么函数来添加用户。我遇到了这个:

LDAPObject.add_s(dn, modlist)

所以我已经有了 DN,但是当我搜索 modlist 时,我得到了这个:

ldap.modlist.addModlist(entry[, ignore_attr_types=[]])

我不确定是否需要 modifyModlist 或 addModlist,也不确定需要发送给它的值。

我以为我可以将用户和组 DN 发送到一个函数,然后它将用户添加到组中……猜猜这不是那么简单吗?

【问题讨论】:

    标签: python ldap python-ldap


    【解决方案1】:

    模块ldap.modlist 仅包含用于生成修改列表的便利函数。您必须调用方法LDAPObject.modify_s() 才能实际修改组条目。

    假设您在变量 user_dn 中有用户条目的 DN,group_dn 是组条目的 DN,而 ldap_conn 是您的 LDAPObject实例。

    那么您只需使用:

    ldap_conn.modify_s(
        group_dn,
        [
            (ldap.MOD_ADD, 'member', [user_dn]),
        ],
    )
    

    当然,您也可以在一次修改操作中删除用户并添加其他用户:

    ldap_conn.modify_s(
        group_dn,
        [
            (ldap.MOD_ADD, 'member', [user1_dn, user2_dn]),
            (ldap.MOD_DELETE, 'member', [user3_dn, user4_dn]),
        ],
    )
    

    【讨论】:

      【解决方案2】:

      当我尝试应用 Michael Ströder 的 anwser 时,我收到了 TypeError Tuple_to_LDAPMod(): expected a tuple。要修复该错误,请将 modlist 内容包装到元组中:

      ldap_conn.modify_s(
          group_dn,
          [
              (ldap.MOD_ADD, 'member', [user_dn],)
          ],
      )
      

      另外,确保 user_dn 是一个字节串。

      【讨论】:

        【解决方案3】:

        我收到了ldap.OBJECT_CLASS_VIOLATION: {'info': u"attribute 'member' not allowed", 'desc': u'Object class violation'}

        在我们的环境中,每个组成员 (UID) 都被列为组中的 memberUid 属性,因此这对我们有用:

        ldap_conn.modify_s(
            group_dn,
            [
                (ldap.MOD_ADD, 'memberUid', [<uid>],)
            ],
        )
        

        【讨论】:

          【解决方案4】:
          import ldap
          
          conn = ldap.initialize('ldap://127.0.0.1')
          ldap_base = 'dc=example,dc=local'
          

          改变你的 DC
          组 dn 应该是一个字符串

          group_dn = 'CN=Group Policy Creator Owners,CN=Users,DC=example,DC=local'
          user_dn =  b'CN=test1,OU=Users,DC=example,DC=local'
          

          请注意,我们没有使用用于关键属性对的 modlist

          conn.modify_s(
            group_dn, [
              (ldap.MOD_ADD, 'member', [user_dn],)],
          )
          

          【讨论】:

            猜你喜欢
            • 2016-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多