Hebikuzure's Tech Memo

2008年6月22日

Windows Script Host の RegWrite メソッドでキー名に を使用することができない

Filed under: Windows トラブル — hebikuzure @ 9:55 AM

MSKB 281309
PRB: Unable to Use a “” in the Key Name with the RegWrite Method of Windows Script Host
http://support.microsoft.com/kb/281309/en-us


レジストリを編集する方法にはレジストリ エディタを使用する方法、登録エントリ ファイル (.reg ファイル) を使用する方法、reg.exe を使用する方法などさまざまにあるが、Active Directory ドメインでスタートアップ スクリプト、ログオン スクリプトなどで実行するため Windows Script Host を使用する事も少なくない。

例えば以下のコードでは、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer に NoDrives 値 “8” を書き込む。

Set ws = WScript.CreateObject("WScript.Shell")
key = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
ws.RegWrite key & "NoDrives","8", "REG_DWORD"
Set WshShell = Nothing

ところがこの方法には一つ問題があって、キー名の値に”\” 文字 が使用できない。
このため UNC パスのようなキー名を必要とする設定を、RegWrite メソッドで行うことができない。
この現象と回避策が、サポート技術情報 281309 で解説されている。

– 回避策 1
WSH から WMI (Windows Management Instrumentation) を使用してキー名を書き込む。

– 回避策 2
RegObj.Registry オブジェクト (実体は RegObj.dll) を呼び出してキー名を書き込む。

いずれの回避策も技術情報にサンプル コードが記載されている。

2008年6月8日

セキュリティ設定をデフォルトに戻す方法

Filed under: Windows Tips — hebikuzure @ 7:15 AM

MSKB 313222
セキュリティ設定をデフォルトに戻す方法
http://support.microsoft.com/kb/313222/ja


Windows ではインストール時にデフォルトのセキュリティ設定が構成される。
例えばビルトイン アカウントやグループ (Administrator や Administrators、Usersなど) に対する権限や、既定のフォルダやレジストリ キーに対するアクセス権の設定などが行われる。

こうした設定を何らかの理由で変更する場合、念のため以前の状態にロールバックできるようバックアップを取っておく事が推奨されるが、トラブルが起きるときに限ってバックアップをしていないというのが良くあるパターンだ。
また種々のツールやユーティリティ、あるいはマルウェアなどによって意図せずセキュリティ設定が変更されてしまう場合もある。

不適切な変更の結果、特定のサービスやプログラムが起動できない、設定の変更が出来ないか変更しても有効にならない、また更新プログラムなどのインストールが完了できない、などなどの問題が生じる可能性がある。

そうした場合、バックアップなどによってロールバックができない場合の手段として、セキュリティ設定をリセットしてデフォルトに戻す方法がある。
ただしリセットされるのは Windows のインストール時点で構成されていた設定のみであり、例えば後から作成したユーザーやグループに対する設定が復元される訳では無い。
また技術情報にも記載があるようにこの方法でもセットアップ時に適用されるすべてのセキュリティ設定が復元できる訳では無い。

このような制限もあるが、トラブルシュートの結果、セキュリティ設定 (特権やアクセス権など) が不正になっている事が問題の原因と考えられ、他の方法では回復が困難な場合の手段としてこの方法が利用できる。
当然この方法を試す前に、できる限りのバックアップを取って不慮の自体に備えるべきである。

– 手順
コマンドプロンプトを開き、以下のコマンドを実行する。

  • Windows XP の場合
      secedit /configure /cfg %windir%repairsecsetup.inf /db secsetup.sdb /verbose
  • Windows Vista の場合
      secedit /configure /cfg %windir%infdefltbase.inf /db defltbase.sdb /verbose

成功のメッセージと実行できないという警告のメッセージが表示されるが、これは正常な動作なので無視してよい。
実行の結果は %windir%SecurityLogsScesrv.log に記録される。

前述のようにリセットされるのはビルトインのユーザーやグループに対する物なので、リセット後に通常のユーザーで現象が改善しない場合でも、Administrator でログオンする、あるいは新規の Administrators グループのユーザーを作成するなどで改善する場合も考えられる。

Windows 2000 で同様のリセットを行う方法、およびドメイン GPO のセキュリティ設定やドメインのユーザー権利のリセットを行う方法については、以下の技術情報を参照のこと。

(参考情報)
MSKB 266118
Windows 2000 でデフォルトの NTFS アクセス許可を復元する方法
http://support.microsoft.com/kb/266118/ja

MSKB 226243
Windows 2000 でデフォルトのドメイン GPO のセキュリティ設定をリセットする方法
http://support.microsoft.com/kb/226243/ja

MSKB 267553
デフォルト ドメイン コントローラのグループ ポリシー オブジェクトでユーザー権利をリセットする方法
http://support.microsoft.com/kb/267553/


2009/05/04 追記
MSKB 313222 が更新されて、リセットの操作を自動化するプログラムが提供されているため、「セキュリティ設定をデフォルトに戻す方法 – 改定版」を新たに投稿した。

2008年6月1日

自動的なコンピュータアカウントパスワード変更を無効にする方法

Filed under: Windows Tips — hebikuzure @ 6:28 AM

MSKB 154501
自動的なコンピュータアカウントパスワード変更を無効にする方法
http://support.microsoft.com/kb/154501/JA/


知られているように、Windows の NT ドメインや Active Directory ドメインに参加しているクライアントでは、ドメイン ユーザー アカウントとは別にコンピュータのドメイン アカウントが作成されており、このアカウントでもコンピュータとドメイン コントローラとの個別の通信チャネルに使用されるパスワードが存在する。
このパスワードはドメインに参加する際に自動的に生成され、一定の期間ごとに自動的に変更される。変更されるサイクルはクライアントの Windows によって異なり、Windows NT では 7 日、Windows 2000、Windows XP、および Windows Server 2003 では 30 日である。

しかし様々な理由でこの自動的なパスワード変更を抑止したい場合がある。
例えば、以下のような状況が考えられる。

  • パスワードの変更に伴うドメイン コントローラ間のレプリケーションの発生が問題になるような場合 (DC 間のネットワーク経路が狭いなど)
  • デュアル ブート構成で、同じコンピュータ アカウントを共有したい場合
  • モバイル コンピュータなどでドメイン コントローラと長期間通信できない可能性がある場合

こうした場合には、自動的なコンピュータ アカウントのパスワード変更を無効にする事ができる。

参考情報

– 手順
以下のレジストリ値を構成する。
Net Logon サービスのパラメータなので、Netlogon サービスを停止して再起動すると有効になる。

キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters
名前 : DisablePasswordChange
種類 : REG_DWORD
データ : 1 (既定値は 0 )

この設定が有効になると、それ以降自動的なコンピュータ アカウントのパスワードの変更は行われなくなる。

またドメイン コントローラ側でクライアントからのパスワード変更要求を拒否する (結果としてパスワード変更が行われない) ように構成する事もできる。
その場合は次のレジストリ値をすべてのドメイン コントローラで構成する。

キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters
名前 : RefusePasswordChange
種類 : REG_DWORD
データ : 1(既定値は 0 )

Windows XP や Windows Server 2003 では、同様の設定をグループ ポリシーでも行える。
ポリシーは以下の場所で設定する。

[ローカル コンピュータ ポリシー]
    - [コンピュータの構成]
        - [Windows の設定]
            - [セキュリティの設定]
                - [ローカル ポリシー]
                    - [セキュリティ オプション]

設定する項目は以下の通り

  • ドメイン メンバ : コンピュータ アカウント パスワード : 定期的な変更を無効にする (DisablePasswordChange)
  • ドメイン メンバ : 最大コンピュータ アカウントのパスワードの有効期間 (MaximumPasswordAge)
  • ドメイン コントローラ : コンピュータ アカウントのパスワードの変更を拒否する (RefusePasswordChange)

なおレジストリの MaximumPasswordAge 値によりコンピュータ アカウントのパスワード有効期間を変更する事もできる。

キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters
名前 : MaximumPasswordAge
種類 : REG_DWORD
データ : 10進で有効期間日数 (既定値は Windows NT で 7、 Windows 2000、Windows XP、および Windows Server 2003 では 30)

MaximumPasswordAge
http://technet2.microsoft.com/windowsserver/en/library/0825816c-94e5-4a7f-be42-cbad6be4be501033.mspx?mfr=true

WordPress.com で無料サイトやブログを作成.

%d人のブロガーが「いいね」をつけました。