2012-04-03 22 views
5

現在、問題のユーザーはWindowsマシンにアクセスできないので、LDAPのActive Directory Envoirenmentでパスワードを変更しようとしています。 。 パスワードを変更するために、私は現在、ldapmodifyの使用方法を理解していません。異なるサイト/フォーラム/ニュースグループに読んだ多くの後、私はもっと混乱ししかしldapmodifyでADのパスワードを変更するとLDAPの制約違反が発生する

前より午前: 私はそうするために、次のコマンドを実行してください:

ldapmodify -f ldif.example -H ldaps://lab01-dc01.example.com -D 'CN=test,CN=users,DC=lab01,DC=example,DC=com' -x -W 

ldif.exampleの内容:

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com 
changetype: modify 
delete: unicodePwd 
unicodePwd:: V3VQdXV1STEyLg== 
- 
add: unicodePwd 
unicodePwd:: QmxhVVVraTEyLg== 
- 

(心配しないでください - これらのパスワードはどこにも使用されていないと、それは生産envoirenmentではありません)今

- 毎回I私は次のエラーを取得するコマンドを実行します。

modifying entry CN=test,CN=Users,DC=lab01,DC=example,DC=com" 
ldapmodify: Constraint violation (19) 
additional info: 0000216C: AtrErr: DSID-03190EB0, #1: 
0: 0000216C: DSID-03190EB0, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd) 

は今、私はこのエラーの理由を読んだ後には、パスワードがひどくフォーマットされているか、パスワードポリシーは、私が使用したパスワードを許可しないことのいずれかです。私はそのポリシーを何度もチェックしました。新しいパスワードは、すべての基準によってポリシーに確実に準拠しています。私がWindowsマシンを使ってパスワードを設定した場合、これもうまくいきます(以前のパスワードに変更することは許可されていないので、後で "oldpassword"と "newpassword"を変更しました)。 "-W"オプションをldapmodifyに渡した後に入力するパスワードも間違いなく正しいです。それ以外の場合、ldapmodifyで吐き出されるエラーは、制約違反の代わりに無効な資格情報を使用したことです。 私が考えることができる唯一の理由は実際には不正な形式のパスワードですが、パスワードをエンコードするために通常のbase64 algorythmを使用しているので、不正なフォーマットがどこから来るべきかわかりません。

何が起こっているのでしょうか? 誰かが正しい方向に私をプッシュできますか?

非常に助けていただきありがとうございます。

編集: 何かバグがありますか Base64でベースエンコードされた文字列を実行すると、「無効な入力」が表示され続けます。今、私は先に進んで、Linuxマシン上でbase64を使用してパスワードを再コーディングしましたが、生成された文字列をデコード関数で再度実行すると、Base64は "Invalid Input" windows-base64でエンコードされた文字列とlinuxでエンコードされた文字列の間で変更されました。しかし、base64は、私がそこに置いても「無効な入力」としか言いません。

Edit2: Nevermind - 機能の目的を読むパスワードのドットと感嘆符のためにこのエラーが発生することがわかります。

+0

エンコードを行う必要があるかどうかはわかりません。 LDAPサーバーはそれを行う必要があります。両方のパスワードをプレーンテキストで入力してみてください。 – EJP

+0

はい、確かに - パスワードをエンコードしないと正常に動作しているようです。私が言ったように:私はこのトピックについて多くを読んで、私が読んだことはすべて、コード化された文字列を使ってパスワードを変更することを提案しました。明らかに - これは事実ではありません。ありがとう! – henryford

答えて

3

パスワードを設定するときは、UTF-16LEとBase64エンコードが必要です。 Javaでは、それはで行うことができます。

String source = "\"car\""; 
String utf16base64 = new String(Base64.getEncoder().encode(source.getBytes("UTF-16LE"))); 

UTF-16 LEを使用する必要があり、UTF-16は十分ではありません。

LDAP上で 'unicodePwd'を変更するには、新しいパスワードが二重引用符で囲まれたUnicode文字列である必要があります。これは、新しいパスワード(Password01!)を設定するときに、二重引用符( "Password01!")でパスワードをBase64に変換することを意味します。

オンラインツール - http://www5.rptea.com/base64/(select UTF-16)を使用できます。

unicodePwdの詳細は - https://technet.microsoft.com/en-us/magazine/ff848710.aspxです。

1

存在する作業中のパスワードを別のユーザーから取得し、それを自分のldifに含めるとどうなりますか?

この方法で、パスワードが機能していることを確認できます。

第2に、ldifではdelete/add use replaceを使用しないでください。削除するとobjectclass違反errrorが発生する可能性があります。

第3に、印刷不可能な文字や特殊文字が含まれている場合は、属性をbase64でエンコードする必要があります。 ldifファイルの最後には空の行があります。 簡単な解決策:今後の参考のため

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com 
changetype: modify 
replace: unicodePwd 
unicodePwd: BlaUUki12. 

よろしく、

+0

あなたの答えをありがとう - 確かに正常に動作しますが、問題は私が置換機能を使用するために管理バインドを使用する必要があるということです。しかし、それはおそらく大丈夫です、私はちょうど別のアカウントを作成します。私はLDAPの代わりにsmbpasswdを使って解決したので、私はもはやそれを必要としません - しかし、私は現在LDAPを掘り下げているので、とにかくそれをやります。再度、感謝します! – henryford

+1

これは古い質問ですが、置き換えは管理者のみであり、ユーザーではない – Kevin

+0

示されているように、replaceはユーザーが自分のパスワードを置き換えることはできません。これは受け入れられた答えであってはなりません。 –

3

は、誰もが似問題が発生したかどう?単にパスワードを変更するためにldapの代わりにsmbpasswdを使用してください - それは完璧に動作します!私は本当に私が前にそれを考えていなかったことをgrumpedています: - :

~#yum install samba 
~#smbpasswd -r domaincontroller.example.com -U testuser1 
Old SMB password: 
New SMB password: 
Retype new SMB password: 
Password changed for user testuser1 on domaincontroller.example.com 

そして、あなたがログインすることができますしかし、D

(CentOSのを使用して)サンバを使用して、Active Directoryのパスワードを変更する方法を新しいパスワードを使用します。本当に簡単。

1

yum install sambaは、sambaバージョン3.6.9からsmbpasswdプログラムをインストールしたため、うまくいきませんでした。

yum install samba4-clientは有効でした。これはSamba 4用のsmbpasswdプログラムをインストールします。このバージョンのsmbpasswdはWindows Server 2008 R2ドメインコントローラのパスワードを変更できます。私はSambaサーバーを必要としないので、samba4クライアントを使用しました。クライアントユーティリティだけです。

のsmbpasswdコマンドの構文は同じです。

smbpasswd -r domaincontroller.example.com -U testuser1  

・ホープ、このことができます。

1

制約エラーは、たとえば、最後の24個のパスワードを使用できないというポリシーに準拠していない古いパスワードを使用している可能性があります。 今後の参照用: ADサーバー(バインド)に接続: 1.管理者として、すべてのユーザーのパスワードを変更してリセットすることができます。変更とリセットには違いがあります。 Change = ADはパスワードポリシーを適用します。リセット=はしません。 2.ユーザーとして:あなたはパスワードを変更することができますが、パスワードをリセットすることはできません。 Change = ADはパスワードポリシーを適用します。 少し遅れても助かりました!

関連する問題