3

windows server 2012 r2ライブラリを使用して Active Directory ユーザー ( ) を有効にしようとすると、問題が発生しnet/ldapます。

設定

まず、次のメソッドでユーザーを作成します。

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 アカウントにバインドされています。

  • この答え
  • #modifyメソッドの代わりに#replace_attribute使用しenable_user!ます。
  • 整数表現の代わりに 16 進値を渡します。
  • apache directory studio を使用して同じ変更を実行します。

私が気づいた興味深いことの1つは、次のように変更できることuseraccountcontrolです514

0x202 (ACCOUNTDISABLE|NORMAL_ACCOUNT)

したがって、この属性が無効になっている限り、有効に変更しようとするとすぐにエラーが表示されるので、この属性を変更できるようです。

4

1 に答える 1

1

エラー0000052Dシステム エラー コードです。具体的には、次のことを意味します。

ERROR_PASSWORD_RESTRICTION

1325 (0x52D)

パスワードを更新できません。新しいパスワードに指定された値が、ドメインの長さ、複雑さ、または履歴の要件を満たしていません。

問題は、有効にしているアカウントにパスワード ポリシーが適用されているため、そのパスワード ポリシーを有効にできないことです。

最初にアカウントのパスワード ポリシーが何であるかを把握し、次にパスワードをそのポリシー基準を満たすものに設定してから、ビットを反転して有効にします。

ただし、ユーザーがパスワードなしでログインできるようにしたい場合は、パスワードを null に設定する必要があります。しかし、どのような状況でそれが望ましいかはわかりません。

于 2016-04-18T21:06:54.190 に答える