次の方法で共有


NewSID v4.10

作成者: Mark Russinovich

公開日: 2006 年 11 月 1 日

注: NewSID は廃止され、ダウンロードできなくなっています。 Mark Russinovich のブログ記事「NewSID の廃止とマシン SID 重複の神話」を参照してください

重要

SID については、Microsoft は NewSID を使用して準備されたイメージをサポートしていません。SysPrep を使用して準備されたイメージのみをサポートしています。 Microsoft では、すべてのデプロイ複製オプションについて NewSID をテストしていません。

Microsoft の公式ポリシーの詳細については、次のサポート技術情報の記事を参照してください。

はじめに

多くの組織では、ディスク イメージの複製を使用して Windows の一括ロールアウトを実行しています。 この手法では、完全にインストールおよび構成された Windows コンピューターのディスクを、他のコンピューターのディスク ドライブにコピーする必要があります。 これらの他のコンピューターは、インストール プロセスを経たコンピューターと実質的に同等であり、すぐに使用できます。

この方法では、他のロールアウト アプローチよりも作業の時間と手間を節約できますが、大きな問題は、複製されたすべてのシステムが同一のコンピューター セキュリティ識別子 (SID) を持つということです。 この事実により、ワークグループ環境でのセキュリティが侵害され、複数の同一のコンピューター SID があるネットワークでのリムーバブル メディアのセキュリティが侵害される可能性もあります。

Windows コミュニティからの要望により、いくつかの企業が、システムの複製後にコンピューターの SID を変更できるプログラムを開発しています。 ただし、Symantec の SID Changer と Symantec の Ghost Walker は、各企業のハイエンド製品の一部としてのみ販売されています。 さらに、両方とも DOS コマンド プロンプトから実行されます (Altiris のチェンジャーは NewSID に似ています)。

NewSID は、コンピューターの SID を変更するために開発されたプログラムです。 これは無料の Win32 プログラムです。つまり、以前に複製されたシステム上で簡単に実行できます。

"このプログラムを使用する前に、この記事全体をお読みください。"

"バージョン情報:"

  • バージョン 4.0 では、Windows XP と .NET Server のサポートが導入されました。ウィザードスタイルのインターフェイスでは、適用する SID を指定でき、レジストリを圧縮でき、コンピューターの名前を変更するオプションも使用できます (これにより、NetBIOS 名と DNS 名の両方が変更されます)。
  • バージョン 3.02 では、古い SID を含むキーの名前を新しい SID に変更するときに、無効な値型を持つ既定値を NewSID が正しくコピーしないバグが修正されました。 NT は、SAM の特定の時点で、このような無効な値を実際に使用します。 このバグの症状は、承認されたユーザーによってアカウント情報が更新されたときにアクセスが拒否されたことを報告するエラー メッセージでした。
  • バージョン 3.01 では、Microsoft Transaction Server によって作成されたがアクセスできないレジストリ キーのための回避策が追加されました。 この回避策をとらないと、NewSID は途中で終了します。
  • バージョン 3.0 では、適用する SID を別のコンピューターから取得するように NewSID に指示する SID 同期機能が導入されました。
  • バージョン 2.0 には、自動モード オプションがあり、コンピューター名を変更することもできます。
  • バージョン 1.2 では、1.1 で発生していた、一部のファイル システム セキュリティ記述子が更新されなかったバグが修正されました。
  • バージョン 1.1 では、特定のインストールのみに影響を与えた比較的軽微なバグが修正されました。 また、ファイル共有とプリンター共有のアクセス許可設定に関連付けられている SID を変更するように更新されました。

複製と代替ロールアウト方法

企業環境で (通常は数百台のコンピューターに対して) 一括 Windows ロールアウトを実行する最も一般的な方法の 1 つは、ディスク複製の手法に基づいています。 システム管理者は、会社で使用されている基本オペレーティング システムとアドオン ソフトウェアを、テンプレート コンピューターにインストールします。 会社のネットワークで動作するようにマシンを構成した後で、ディスクまたはシステムの自動複製ツール (SymantecGhostPowerQuestImage DriveAltirisRapiDeploy など) を使用して、テンプレート コンピューターのドライブを、数十台または数百台のコンピューターにコピーします。 これらの複製は、一意の名前の割り当てなどの最終的な調整が行われた後で、会社の従業員によって使用されます。

ロールアウトのもう 1 つの一般的な方法は、Microsoft sysdiff ユーティリティ (Windows リソース キットの一部) を使用することです。 このツールを使用するには、システム管理者が各コンピューター上でフル インストール (通常はスクリプト化された無人インストール) を実行する必要があります。その後、sysdiff によって、アドオン ソフトウェア インストール イメージの適用が自動化されます。

複製ベースのロールアウトでは、インストールはスキップされ、ディスク セクターのコピーはファイルのコピーよりも効率的であるため、同等の sysdiff インストールよりも数十時間を節約できます。 さらに、システム管理者は、無人インストールまたは sysdiff の使用方法や、インストール スクリプトの作成とデバッグの方法を学習する必要はありません。 これだけで作業の時間を節約できます。

SID 重複の問題

複製に関する問題は、非常に限られた意味でしか Microsoft によってサポートされないことです。 Microsoft は、システムの複製は、Windows セットアップの GUI 部分に到達する前に複製が実行された場合にのみサポートされると表明しています。 インストールがこの段階に到達すると、コンピューターには名前と一意のコンピューター SID が割り当てられます。 この手順の後にシステムが複製された場合、複製されたマシンはすべて、同一のコンピューター SID を持ちます。 コンピューター名を変更したり、コンピューターを別のドメインに追加したりするだけでは、コンピューター SID は変更されないことに注意してください。 名前またはドメインを変更しても、コンピューターが以前にドメインに関連付けられていた場合にドメイン SID が変更されるだけです。

複製が引き起こす可能性がある問題を理解するには、最初に、コンピューター上の個々のローカル アカウントに SID が割り当てられる方法を理解する必要があります。 ローカル アカウントの SID は、コンピューターの SID と追加された RID (相対識別子) で構成されます。 RID は、固定値から始まり、アカウントが作成されるごとに 1 ずつ増加します。 つまり、たとえば、あるコンピューター上の 2 番目のアカウントには、複製上の 2 番目のアカウントと同じ RID が与えられます。 その結果、両方のアカウントの SID が同じになります。

ドメインベースの環境では、ドメイン アカウントにはドメイン SID に基づく SID があるため、重複する SID は問題になりません。 しかし、Microsoft サポート技術情報の記事 Q162001「Windows NT のインストール済みバージョンをディスク複製しないでください」によると、ワークグループ環境では、セキュリティはローカル アカウント SID に基づいています。 したがって、2 台のコンピューターに同じ SID を持つユーザーが存在する場合、ワークグループはユーザーを区別できません。 一方のユーザーがアクセスできるファイルやレジストリ キーを含むすべてのリソースに、もう一方のユーザーもアクセスできます。

重複する SID が問題を引き起こす可能性があるもう 1 つの例は、NTFS でフォーマットされたリムーバブル メディアがあり、ローカル アカウントのセキュリティ属性がファイルとディレクトリに適用される場合です。 このようなメディアが、同じ SID を持つ別のコンピューターに移動された場合は、それ以外の場合はファイルにアクセスできないローカル アカウントであっても、そのアカウント ID がセキュリティ属性内の ID と一致していれば、ファイルにアクセスできる可能性があります。 コンピューターの SID が異なる場合、これは不可能です。

Mark が執筆した「NT ロールアウト オプション」というタイトルの記事が Windows NT Magazine の 6 月号に掲載されています。 ここでは、重複する SID の問題について詳しく説明し、複製に関する Microsoft の公式の立場を表明しています。 ネットワーク上に重複する SID の問題があるかどうかを確認するには、PsGetSid を使用してマシン SID を表示します。

NewSID

NewSID は、コンピューターの SID を変更するために開発されたプログラムです。 最初に、そのコンピューター用にランダムな SID を生成し、次に、レジストリとファイル セキュリティ記述子で見つかった既存のコンピューター SID のインスタンスを更新して、出現箇所を新しい SID に置き換えます。 NewSID を実行するには、管理特権が必要です。 SID の変更とコンピューター名の変更という 2 つの機能があります。

NewSID の自動実行オプションを使用するには、コマンド ラインで "/a" を指定します。 "/a" スイッチの後に新しい名前を含めることで、コンピューターの名前を自動的に変更するように指示することもできます。 次に例を示します。

newsid /a [newname]

プロンプトを表示せずに NewSID を実行し、コンピューター名を "newname" に変更し、問題がなければコンピューターを再起動させます。

注:NewSID を実行するシステムで IISAdmin が実行されている場合は、NewSID を実行する前に IISAdmin サービスを停止する必要があります。 IISAdmin サービスを停止するには、次のコマンドを使用します。net stop iisadmin /y

NewSID の SID 同期機能を使用すると、SID をランダムに生成するのではなく、別のコンピューターから新しい SID を取得するように指定できます。 この機能により、バックアップ ドメイン コントローラー (BDC) を新しいドメインに移動できるようになります。他のドメイン コントローラー (DC) と同じコンピューター SID を持っていることで、BDC とドメインの関係が識別されるためです。 [Synchronize SID](SID の同期) ボタンを選択し、ターゲット コンピューターの名前を入力するだけです。 ターゲット コンピューターのレジストリ キーのセキュリティ設定を変更するためのアクセス許可が必要です。これは、通常、この機能を使用するにはドメイン管理者としてログインする必要があることを意味します。

NewSID を実行すると、レジストリのサイズが大きくなることに注意してください。そのため、レジストリの最大サイズが増加に対応していることを確認してください。 この増加はシステムのパフォーマンスに顕著な影響を与えないことが確認されています。 レジストリが大きくなる理由は、NewSID によって一時的なセキュリティ設定が適用されると、レジストリが断片化されるためです。 設定が削除されても、レジストリは圧縮されません。

重要:NewSID は十分なテストを経ていますが、ご自身の責任で使用する必要があります。 ファイルとレジストリの設定を変更する他のソフトウェアの場合と同様に、NewSID を実行する前にコンピューターを完全にバックアップすることを強くお勧めします。

BDC の移動

BDC をあるドメインから別のドメインに移動する場合に従う必要がある手順を次に示します。

  1. 移動する BDC を起動し、ログインします。 NewSID を使用して、BDC の SID を、BDC を移動する先のドメインの PDC と同期します。
  2. SID を変更したシステム (BDC) を再起動します。 BDC が現在関連付けられているドメインには、既にアクティブな PDC があるため、新しいドメインでは BDC として起動されます。
  3. BDC はサーバー マネージャーにワークステーションとして表示されるため、[Add to Domain](ドメインに追加) ボタンを使用して BDC を新しいドメインに追加します。 追加するときには、必ず BDC ラジオ ボタンを指定してください。

機能

最初に、NewSID は、既存のコンピューター SID を読み取ります。 コンピューターの SID は、レジストリの SECURITY ハイブの SECURITY\SAM\Domains\Account の下に格納されています。 このキーには、F という名前の値と V という名前の値があります。V 値は、データの末尾にコンピューター SID が埋め込まれたバイナリ値です。 NewSID は、この SID が標準形式 (3 つの 32 ビットのサブ認証の前に 3 つの 32 ビットの認証フィールドがある) であることを確認します。

次に、NewSID は、そのコンピューター用に新しいランダムな SID を生成します。 NewSID の生成では、完全にランダムな 96 ビット値を作成するために多大な手間がかかります。この値は、コンピューター SID を構成する 3 つのサブ認証値の 96 ビットを置き換えます。

続いて、コンピューター SID を置き換える 3 つのフェーズが実行されます。 最初のフェーズでは、SECURITY レジストリ ハイブと SAM レジストリ ハイブをスキャンして、キーの値とキーの名前に古いコンピューター SID が出現する箇所を見つけます。 SID が値で見つかると、新しいコンピューター SID に置き換えられます。SID が名前で見つかると、キーとそのサブキーが新しいサブキーにコピーされます。新しいサブキーは、同じ名前ですが、古い SID が新しい SID に置き換えられています。

最後の 2 つのフェーズでは、セキュリティ記述子を更新する必要があります。 レジストリ キーと NTFS ファイルには、セキュリティが関連付けられています。 セキュリティ記述子は、次の要素で構成されます。どのアカウントがリソースを所有するかを識別するエントリ。どのグループがプライマリ グループ所有者であるかを識別するエントリ。ユーザーまたはグループごとに許可されるアクションを指定するエントリの省略可能なリスト (随意アクセス制御リスト - DACL と呼ばれます)。特定のユーザーまたはグループによって実行されるどのアクションがシステム イベント ログにエントリを生成するかを指定するエントリの省略可能なリスト (システム アクセス制御リスト - SACL)。 ユーザーまたはグループは、これらのセキュリティ記述子でその SID によって識別されます。前述のように、ローカル ユーザー アカウント (Administrator や Guest などの組み込みアカウントを除く) には、コンピューター SID と RID で構成される SID があります。

セキュリティ記述子の更新の最初の部分は、コンピューター上のすべての NTFS ファイル システム ファイルで行われます。 すべてのセキュリティ記述子をスキャンして、コンピューター SID の出現箇所を見つけます。 NewSID は、出現箇所を見つけると、新しいコンピューター SID に置き換えます。

セキュリティ記述子の更新の 2 番目の部分は、レジストリで実行されます。 最初に、NewSID は、読み込まれたハイブだけでなく、すべてのハイブを確実にスキャンする必要があります。 すべてのユーザー アカウントには、レジストリ ハイブがあります。これは、ユーザーがログインしているときには HKEY_CURRENT_USER として読み込まれていますが、ログインしていないときにはディスク上のユーザーのプロファイル ディレクトリ内に格納されたままです。 NewSID は、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList キーを列挙することによって、すべてのユーザー ハイブの場所を識別します。このキーは、ユーザー ハイブが格納されているディレクトリを指します。 次に、HKEY_LOCAL_MACHINE の下で RegLoadKey を使用してユーザー ハイブをレジストリに読み込み、レジストリ全体をスキャンして、各セキュリティ記述子を調べることにより、古いコンピューター SID を検索します。 更新はファイルの場合と同じように実行され、完了すると、NewSID は、読み込まれたユーザー ハイブをアンロードします。 最後の手順として、NewSID は、HKEY_USERS キーをスキャンします。このキーには、現在ログインしているユーザーのハイブと .Default ハイブが含まれています。 これが必要になるのは、1 つのハイブを 2 回読み込むことはできないためです。そのため、NewSID が他のユーザー ハイブを読み込んでいるときには、ログインしているユーザーのハイブは HKEY_LOCAL_MACHINE に読み込まれません。

最後に、NewSID は、新しいアカウント SID を参照するために ProfileList サブキーを更新する必要があります。 この手順が必要になるのは、新しいコンピューター SID を反映するようにアカウント SID が変更された後で、Windows NT がプロファイルをユーザー アカウントに正しく関連付けるようにするためです。

NewSID は、システム、バックアップ、復元、および所有権の取得の特権をそれ自体に与えることで、システム内のすべてのファイルとレジストリ キーにアクセスしてそれらを変更できるようになります。