【问题标题】:Cannot enable active directory user using net-ldap无法使用 net-ldap 启用活动目录用户
【发布时间】:2016-04-18 17:07:44
【问题描述】:

我们在尝试使用 net/ldap 库启用 Active Directory 用户 (windows server 2012 r2) 时遇到问题。

设置

首先,我们通过这个方法创建一个用户:

def create_user(attrs)
  dn = "cn=#{attrs[:cn]},cn=Users,#{@base}"
  cn = attrs[:cn]
  pass = ascii_convert(attrs[:pwd])
  updated_attrs = { cn: cn,
                    objectclass: ['user'],
                    samaccountname: cn,
                    userprincipalname: "#{attrs[:cn]}@#{@domain}",
                    unicodepwd: pass
  }

  @connection.add(dn: dn, attributes: updated_attrs)
  result = @connection.get_operation_result
  raise LdapError.new("Create AD user error: #{result}") if result.code   != 0
end

这会创建用户,并默认将其userAccountControl 属性设置为546(这是我们想要的),当在活动目录中检查时显示为:

0x222 (ACCOUNTDISABLE|PASSWD_NOTREQD|NORMAL_ACCOUNT).

问题

稍后我们要启用该用户,因此我们调用:

def enable_user!(dn, cn)
  u = search_query(find_user(cn)).try(:first)
  if u
    @connection.replace_attribute(dn, :useraccountcontrol, '512')
  else
    false
  end
end

但是,如果我打印 @connection.get_operation_result 我会得到:

<OpenStruct code=53, error_message="0000052D: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0\n\u0000", matched_dn="", message="Unwilling to perform">

使用这种方法,我们希望userAccountControl 等于512,相当于0x200 (NORMAL_ACCOUNT)

我尝试过的事情

注意:连接通过 SSL (LDAPS),并绑定到管理员 AD 帐户。

  • this answer
  • enable_user! 方法中使用#modify 而不是#replace_attribute
  • 传递十六进制值而不是整数表示。
  • 使用 apache directory studio 执行相同的修改。

我注意到一件有趣的事情,我可以将useraccountcontrol 修改为514,即:

0x202 (ACCOUNTDISABLE|NORMAL_ACCOUNT)

所以,看来我可以修改此属性,只要它保持禁用状态,只要我尝试更改为启用,就会看到错误。

【问题讨论】:

    标签: ruby active-directory windows-server-2012-r2 netldap


    【解决方案1】:

    错误0000052Dsystem error code。具体来说就是:

    ERROR_PASSWORD_RESTRICTION

    1325 (0x52D)

    无法更新密码。为新密码提供的值不符合域的长度、复杂性或历史记录要求。

    问题似乎是您启用的帐户应用了密码策略,因此启用它不会满足密码策略。

    我会首先弄清楚该帐户的密码策略是什么,然后将密码设置为符合该策略标准的密码,然后再启用它。

    但是,如果您确实希望用户无需密码即可登录,则应将密码设置为 null。但我不确定在什么情况下是可取的。

    【讨论】:

    • 谢谢,我还没有时间真正深入研究这个。但是,我认为你在正确的轨道上。我认为我在初始 create_user 方法中对密码进行编码的方式存在问题,因此不符合密码要求。
    • 可能是这样。 unicodePwd 需要一个非常具体的编码 (UTF-16LE),我不太确定你的 ascii_convert 在做什么。 This answer 可能对此有所帮助。
    • @treiff @ChadSikorra 我收到了不同的错误消息。 #<OpenStruct code=53, error_message="00000057: LdapErr: DSID-0C04256F, comment: Error in attribute conversion operation, data 0, v2580\x00", matched_dn="", message="Unwilling to perform"> 有没有人能够成功启用/禁用用户?
    • @SandeepM 我会用您正在使用的代码的细节和错误消息开始一个新问题。这与 OP 的错误代码不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多