Windowsプログラムの中には,長年にわたってシステム管理者が愛用しているにも関わらず,なぜか「サポート・ツール」や「リソース・キット」にだけ入っていて,いつまでたっても正式なツールにならなかったものがあった。しかしWindows Vistaになって風向きが変わった。「Robocopy」や「SC」,「Whoami」といった便利なツールがようやく正式にサポートされたのだ。

 Whoamiコマンドは,Windows VistaのUAC(ユーザー・アカウント制御)とWIC(Windows Integrity Control)という2つのコンポーネントによって,これまで以上に便利なツールになった。今こそこの素晴らしいツールをもう一度見直すときが来たと言えるだろう。

Whoamiの動作の仕組み

 Whoamiの動作を確認するには,Windows Vistaマシンに管理者としてログオンし,コマンドプロンプトを開いて次のコマンドを入力する。

whoami /all

 これによって,これまでと同様に,ユーザー名やSID(セキュリティ記述子),所属するグループ名(とそのSID),アカウントに与えられたユーザー権限が表示される。管理者としてWindows Vistaマシンにログオンすると,管理グループのすべてのメンバーシップと権限を含む管理トークン(AT)と,管理者権限がすべてUACによって抑制されている標準ユーザー・トークン(SUT)の2つのトークンが,Windows VistaのUAC機能によって生成されることが分かるだろう。

 Windows Vistaでは,プログラムが実行されるたびに,いくつかの条件に基づいて,そのプログラムに高い権限を持つATと低い権限を持つSUTのどちらを付与するかが決定される。[続行]か[キャンセル]のどちらかの選択を要求するダイアログ・ボックスが表示されない場合は,実行したプログラムにSUTが割り当てられていると推測できる。そして,この時点でUACのダイアログ・ボックスが表示されていないということは,コマンドプロンプトにSUTが付与されていることを示している。このことを確認するには,管理者メンバーシップが拒否のためだけに使用されるグループである場合を除いて,グループ・メンバーシップに管理者が含まれていないことをチェックする。

 [コマンド プロンプト]アイコン([スタート]-[すべてのプログラム]-[アクセサリ])を右クリックして[管理者として実行]を選択し,コマンドプロンプトをもう1つ開いて同じWhoamiコマンドを実行すると,今度はすべてのグループ・メンバーシップが付与され,さらにSUTによって抑制されたコマンドプロンプトに比べてずっと多くの権限が付与されていることがわかる。

 ところで,標準のコマンドプロンプト・ウインドウに大量のデータが表示されて目が疲れてきた読者はいないだろうか。次のコマンドを実行すると,Whoamiの出力が簡潔になる。

whoami /all /fo list

 /foオプションの後には,「list」以外に「table」(元の大量のデータが表示される)または「csv」(インポート可能なコンマ区切りのCSV形式でデータが表示される)を指定できる。さらに表示されるデータ量を減らすには,「/all」の代わりに「/user」 (現在のユーザー名とSIDのデータだけが表示される),「/groups」(現在のグループ・メンバーシップだけが表示される),または「/priv」 (ユーザー権限だけが表示される)を指定する。

WICの動作の仕組み

 ATが付与されたコマンドプロンプト(ウインドウのタイトルバーにadministratorという単語が表示される)と,SUTが付与されたコマンドプロンプトの2つが開いているときに,次のコマンドを実行してみよう。

whoami /groups /fo list

 こうすると,グループ・メンバーシップが表示されるが,管理権限を持つコマンドプロンプトが,奇妙なグループのメンバーであることがわかる。このWhoamiの出力で,未知のSIDタイプ「S-1-16-12288」,グループ名「Mandatory Label\High Mandatory Level」と表示されているのが,かつてMIC(Mandatory Integrity Control)と呼ばれた,Windows VistaのWICメカニズムが動作していることを示すデータだ。

 Windows Vistaでは,ユーザー・アカウント,プロセス,オブジェクト(ファイルやフォルダなど)が,複数のレベルに区分けされる。この区分は信頼性区分と呼ぶこともできるが,Windows Vistaでは完全性(integrity)区分と呼んでいる。

 Mandatory Labelは,「Untrusted」「Low」「Medium」「High」「System」「Trusted Installer」の6段階に分かれている。このコラムにはこのトピックを説明するだけのスペースがないので,とりあえず,プロセスが「High」レベルのオブジェクトを変更しようとすると,たとえプロセスのトークンにそのオブジェクトに対するフルコントロール権限が含まれていても,その変更は異常終了するとだけ書いておこう。

 Windows Vistaのデフォルト設定では,標準ユーザーは「Medium」レベルに,管理者は「High」レベルに,それぞれ区分されている。前述の「High Mandatory Level」という表示は,管理権限を付与されたコマンドプロンプトのトークンが「High」レベルに区分されていることを示している。一方,SUTが付与されたコマンドプロンプトでWhoami /groups /fo listを実行すると,「Medium」レベルに区分されていることがわかる。

 Windows Vistaでは,新しいオプションこそ追加されなかったが,Whoamiが正式なツールとして認められた。それどころか,新機能も追加されている。是非使ってみてほしい。