トップ回答者
net user コマンドでパスワード変更時のポリシー(パスワード履歴の記録)が適用されていない

質問
-
タイトルにある通りなのですが、Windows10でローカルセキュリティーポリシーからパスワードのポリシーを設定し、パスワードポリシーの確認をしていたのですが、net user コマンド(net user [ユーザー名] [Password] )でパスワードを変更すると、パスワードポリシーの「パスワードの履歴を記録する」が適用されていないようで、何度も同じパスワードを設定できてしまいます。
ユーザー数が多いので、効率上CUIでパスワード変更を行いたいのですが、この原因と対策をご教示いただけないでしょうか。
- 編集済み atu120 2019年8月8日 13:02
回答
-
試してみたところ、GUI でパスワードを変更しようとした場合には、長さ、複雑性、履歴の 3 つがチェックされますが、「NET USER ユーザー名 *」でパスワードを変更する場合、パスワードの長さ、パスワードの複雑性はチェックが入っているようですが、確かにパスワードの履歴は無視されますね。
「パスワードの変更禁止期間」ポリシーの説明に”[パスワードの履歴を記録する] を有効にする場合は、パスワードの変更禁止期間を 1 以上に設定してください。”と書いていますが、この設定が 0 であるか 1 であるかによって、上記の挙動(GUI も CUI も)が変化することはありませんでした。
NET USERコマンドによるパスワードの変更は、ユーザーによるパスワード変更ではなく、管理者によるパスワード設定って感じなのでではないでしょうか?(コマンドプロンプトを管理者として開く必要がありますし)
PowerShell を使ってパスワードを設定する場合も似たようなことがあるようです。以下が参考になるかもしれません。
【PowerShell】パスワード変更時にローカルセキュリティポリシーが反映されない
https://social.technet.microsoft.com/Forums/ja-JP/78fd6286-2d6b-4b32-9969-4f08bd325e34/12304powershell12305124971247312527125401248922793263562617812395- 編集済み Yamauchi KazuoMVP 2019年8月9日 3:55 追記
- 回答としてマーク atu120 2019年8月9日 8:59
-
チャブーンです。
この件ですが、すでにYamauchiさんが答えていらっしゃいますが、質問者さんの希望通りの動作というのは、直接的にはムリかと思います。パスワード変更には「SetPassword」と「ChangePassword」という2つのメソッドがあり、SetPasswordでは履歴や変更禁止期間の設定は無視されます。net userでのパスワード設定はSetPasswordにあたるため、仕様は変えられないのではないでしょうか。したに関連する過去ログがあるので、ご覧になってみてください。
https://social.technet.microsoft.com/Forums/windows/ja-JP/e69c4371-89b5-4442-a3aa-f65f75a67dfd/
どうしてもおっしゃる動作をさせたいというなら、ChangePasswordメソッドを使ってパスワード変更をすれば、技術的には叶うと思いますが、「変更以前の(現)パスワード」を管理者が知っている必要があるので、現時的ではないと思います。以下の過去ログのスクリプトの「 $objUser.SetPassword(<実態は新パスワード文字列>)」を「 $objUser.ChangePassword(<現パスワード文字列>, <新パスワード文字列>)」に変えてもらうことで、実現可能かとは思います。このスクリプトはcsvファイルを読み込む内容になっているので、ご自身で読み替えていただかないと、すぐには直せないと思います。
https://social.technet.microsoft.com/Forums/ja-JP/e2c433b0-20f4-4257-9a5e-cda5fffa6eb8/
簡単なスクリプトということなら、したのページの「Change the Password for a User」が参考になると思います。
https://www.activexperts.com/admin/vbscript-collection/activedirectory/user/passwords/
追記:同じ質問をしている方がいらっしゃるようなので、したのページを参考にしてください。
https://teratail.com/questions/140159
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
すべての返信
-
試してみたところ、GUI でパスワードを変更しようとした場合には、長さ、複雑性、履歴の 3 つがチェックされますが、「NET USER ユーザー名 *」でパスワードを変更する場合、パスワードの長さ、パスワードの複雑性はチェックが入っているようですが、確かにパスワードの履歴は無視されますね。
「パスワードの変更禁止期間」ポリシーの説明に”[パスワードの履歴を記録する] を有効にする場合は、パスワードの変更禁止期間を 1 以上に設定してください。”と書いていますが、この設定が 0 であるか 1 であるかによって、上記の挙動(GUI も CUI も)が変化することはありませんでした。
NET USERコマンドによるパスワードの変更は、ユーザーによるパスワード変更ではなく、管理者によるパスワード設定って感じなのでではないでしょうか?(コマンドプロンプトを管理者として開く必要がありますし)
PowerShell を使ってパスワードを設定する場合も似たようなことがあるようです。以下が参考になるかもしれません。
【PowerShell】パスワード変更時にローカルセキュリティポリシーが反映されない
https://social.technet.microsoft.com/Forums/ja-JP/78fd6286-2d6b-4b32-9969-4f08bd325e34/12304powershell12305124971247312527125401248922793263562617812395- 編集済み Yamauchi KazuoMVP 2019年8月9日 3:55 追記
- 回答としてマーク atu120 2019年8月9日 8:59
-
チャブーンです。
この件ですが、すでにYamauchiさんが答えていらっしゃいますが、質問者さんの希望通りの動作というのは、直接的にはムリかと思います。パスワード変更には「SetPassword」と「ChangePassword」という2つのメソッドがあり、SetPasswordでは履歴や変更禁止期間の設定は無視されます。net userでのパスワード設定はSetPasswordにあたるため、仕様は変えられないのではないでしょうか。したに関連する過去ログがあるので、ご覧になってみてください。
https://social.technet.microsoft.com/Forums/windows/ja-JP/e69c4371-89b5-4442-a3aa-f65f75a67dfd/
どうしてもおっしゃる動作をさせたいというなら、ChangePasswordメソッドを使ってパスワード変更をすれば、技術的には叶うと思いますが、「変更以前の(現)パスワード」を管理者が知っている必要があるので、現時的ではないと思います。以下の過去ログのスクリプトの「 $objUser.SetPassword(<実態は新パスワード文字列>)」を「 $objUser.ChangePassword(<現パスワード文字列>, <新パスワード文字列>)」に変えてもらうことで、実現可能かとは思います。このスクリプトはcsvファイルを読み込む内容になっているので、ご自身で読み替えていただかないと、すぐには直せないと思います。
https://social.technet.microsoft.com/Forums/ja-JP/e2c433b0-20f4-4257-9a5e-cda5fffa6eb8/
簡単なスクリプトということなら、したのページの「Change the Password for a User」が参考になると思います。
https://www.activexperts.com/admin/vbscript-collection/activedirectory/user/passwords/
追記:同じ質問をしている方がいらっしゃるようなので、したのページを参考にしてください。
https://teratail.com/questions/140159
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。