Q.現在、Windows NT Server 4.0でファイルサーバを構築しています。ファイルサーバはドメインのメンバサーバであり、アクセス権は、マイクロソフト社のAGLPポリシーに従って割り当てています。
このファイルサーバを、Active Directoryへの移行に伴いWindows 2000 Serverにリプレースしようと考えていますが、ローカルグループに割り当てたアクセス権(ACL(Access Control List))の移行ができずに苦慮しています。
Windows 2000 Server側のxcopy /EコマンドやWindows NT Server 4.0のリソースキットにあるscopyコマンドでファイルのコピーを行ってみたり、一度ファイルをバックアップして新しいサーバにリストアしてみたりもしたのですが、ローカルグループに割り当てたアクセス権(ACL)を見ると、数字を羅列したアカウントが表示され、きちんとアクセス権が移行されていません(右図)。うまく移行する方法はないでしょうか。
A.残念ながら標準のコマンドで目的を実現する方法はありません。
目的を達成するには、あまりスマートな方法ではないのですが、リソースキットなどに付属のsubinaclというコマンドを用いるか、同等のプログラムを作成して、ACLに記録いされたSIDを直接修正することが必要となります。
以下、この問題の説明も兼ねて、Windows NT系OSのアクセス権付与の仕組みについて簡単に説明しておきましょう。
AGLPポリシーとは、マイクロソフトが推奨しているNTドメインのアクセス権の設定方法のことです。右図のようなポリシーに従って設定します。おのおのの頭文字を順に並べるとAGLPとなるため、AGLPポリシーと呼んでいます。
このAGLPポリシーに従うことで、ドメインのアカウント管理者は、個別のリソースへのアクセス権割り当てを意識せずにグループの管理が行えます。一方、個別のリソースの管理者も、実際にアクセス権を割り当てるアカウントを意識することなく、設定したいアクセス権を付与したローカル・グループを構成することが可能です。
最終的なリソースへのアクセス権の割り当ては、グローバル・グループをローカル・グループのメンバーとすることによって行います。これにより、個別のアカウントを意識することなく一括して設定できます。また、アクセス権自体はローカル・グループに付与されているため、グローバル・グループをローカル・グループのメンバーから除外することで、アクセス権の削除が簡単に行えることも特徴として挙げられます。
このように、AGLPポリシーに従った運用をすることで、NTドメインの各グループの特徴を最大限生かした柔軟な管理が可能となっています。ActiveDirectoryでは、ユニバーサル・グループなどが追加されたことにより多少このポリシーは拡張されていますが、基本的な考え方は同じです。
AGLPポリシーに従った場合、ファイル、フォルダなどの個別のリソースへのアクセス権は、ローカル・グループに対して割り当てられます。従って、ファイル・サーバをリプレースする場合は、ローカル・グループに割り当てられたアクセス権の移行も考慮する必要がありますが、前述したように残念ながら標準のコマンドでは移行させることができません。
この問題を解決するには、SIDという一意な識別子について理解する必要があります。WindowsNT系OSの場合、各マシン上に作成されたグループやアカウントなどのオブジェクトには、すべてSIDが付与されます。SIDはマシンやドメイン固有の識別子とマシン上で一意な数値からなる識別子です。
通常われわれが目にするアカウント名やグループ名などは、われわれが見やすいように名前が付けられていますが、内部的にはすべてSIDで情報の保存や識別が行われています。従って、移行先のサーバsw同じ名前のローカル・グループを作成しても、マシンごとの識別子が異なるため、SIDも必ず異なるものとなります。
質問にあったxcopy /Eコマンドを用いた場合、アクセス権の情報を保持したままコピーされますが、そのままでは移行先のマシンに本来依存し得ないSIDを持ったACL情報が作成されてしまいます。(右図)。そのため、質問中にあるように、SIDがそのまま表示されている、あるいは「不明なアカウント」として表示されるといった現象が発生してしまうわけです。
以上のことから、アクセス権を移行するためには、
@ACL中のSID情報を保持したまま移行先のマシンにファイルをコピーする
A移行先マシン上で、ACLに保存された古いマシン上のローカル・グループのSIDを、新しいマシン上に新規作成した対応するローカル・グループのSIDに置換する
という作業が必要になります。
移行するすべてのファイル、ディレクトリのすべてのACLに対して、この作業を実施するという力作業が必要となります。質問にも会ったように、@の作業についてはxcopy /Eコマンドやバックアップとリスとアノ組み合わせで実施可能ですが、Aの作業についてはOSのコマンドでは実現できません。独自にプログラムを作成する場合は、かなり高度なプログラミングが必要となりますが、幸いなことにNT系OSのリソース・キットに添付するsubinaclというコマンド・ライン・ツールを用いることでこの処理を一括して出来ます(右図)。
subinaclは、既存のACLの表示や所有権の以降など、アクセス権に関する様様な処理を行うことが可能なコマンドです。詳細はマイクロソフトのサポート技術情報「250267,Cannot Resolve Local Groups When You Migrate Files Between WindowsNT 4.0 Member Servers」(英語)を参照してください。
●マイクロソフト サポート技術情報 - 250267: [英文]
http://support.microsoft.com/default.aspx?scid=kb;ja;Q250267
●「Windows Server 2003完全技術解説」の主な内容:
http://bpstore.nikkeibp.co.jp/item/contents/m_4822281744.html
●Solution Title: Windows 2000 active directory security questions: [英文]
http://www-tcsn.experts-exchange.com/Operating_Systems/Win2000/Q_20741567.html
http://www.zdnet.co.jp/help/howto/win/win2000/0007special/tokusyu/2000_04_1/21.html
http://www.samba.gr.jp/ml/article/samba-jp/msg10924.html