セキュリティ

Windows Vista 用の新しい昇格 PowerToy

Michael Murgolo

 

概要:

  • 管理者としてサードパーティ製のスクリプト ツールを実行する
  • 別のユーザーとして実行する
  • システムとしてコマンド プロンプトと PowerShell プロンプトを開く
  • ドラッグ アンド ドロップで操作できる昇格ガジェット

この記事で使用しているコードのダウンロード: Elevation2008_06.exe (197KB)

Windows Vista 用の "昇格 PowerToy" についての新しい記事へようこそ。2007 年 6 月号の TechNet Magazine では、"昇格 PowerToy" について詳しく説明しました。あれから 1 年がたちました。今回は、"管理者として実行" 機能を私が気に入っているサードパーティ製の

スクリプト ツールでも使用できるように拡張した方法を説明し、この機能を Windows Vista® で廃止された Windows® XP の優れた機能の代わりに使用する方法を説明して、"昇格 PowerToy" で提供している便利なツールをいくつか紹介します。

管理者としてサードパティ製のスクリプト ツールを実行する

前回の記事 (technet.microsoft.com/magazine/cc162321.aspx) で説明したトピックの 1 つは、Windows 付属のスクリプト ツールで [管理者として実行] コマンドを利用できるようにすることでした。今回の記事では、以下のサードパーティ製のスクリプト ツール用に、"管理者として実行 PowerToy" を作成しました。

これらのツールのコードはすべて technetmagazine.com で公開されているこの記事のダウンロードに含まれています。実際のファイルは、それぞれ ElevateAutoIt3.inf、ElevateAutoHotKey.inf、ElevatePerlScript.inf、および ElevateKiXtart.inf という名前です。AutoIt v3、AutoHotkey、および ActivePerl については、セットアップは非常に簡単で、必要な作業は該当アプリケーションをダウンロードして既定の場所にインストールするだけです。必要なアプリケーションをインストールしたら、後は、当該ツール用の "管理者として実行 PowerToy" をインストールするだけです。

残念ながら、KiXtart 2010 にはインストーラが用意されていません。そこで、PowerToy が適切に機能するように KiXtart を標準的な場所にインストールするために、KiXtart 2010 (バージョン 4.60) を Program Files\KiXtart にインストールし、.kix ファイル拡張子を登録する INF ファイルを用意しました。

www.kixtart.org/?p=downloads にアクセスし、KiX2010_460.zip をダウンロードして展開します。Install_KiXtart.inf ファイルを同じフォルダにコピーします (.inf ファイルは、この記事のダウンロードに含まれています)。次に Install_KiXtart.inf ファイルを右クリックし、[インストール] をクリックします。その後は、このツール用の PowerToy (ElevateKiXtart.inf) をインストールするだけです。

別のユーザーとして実行する PowerToy

ユーザー アカウント制御 (UAC) は、ユーザーが管理者の場合でも、ほとんどのアプリケーションを標準ユーザー特権で実行するようにして、オペレーション システムがマルウェアの攻撃を受けにくくすることを目的に作成されました。UAC には、管理タスクやアプリケーションの機能を実行する際に、権限を昇格するオプションが用意されています。この権限の昇格は、実行可能ファイルを右クリックすると表示される [管理者として実行] コマンドを使用して行えます。2007 年 6 月号の記事で紹介した "昇格 PowerToy" では、この機能を拡張して、他のファイルやオブジェクトの種類でも権限を昇格できるようにしました。

Windows Vista に組み込まれている機能は、多くの管理タスクで問題なく動作します。しかし、1 つの重要なシナリオが抜け落ちていました。多くの IT 部門では、ネットワーク管理者は日常的なタスク (電子メールの使用、文書の作成など) に使用するアカウントと、ネットワーク管理 (またはローカル コンピュータの管理) に使用する別のアカウントの 2 つを使用する方針をとっています。

これは、ネットワーク管理者が日常的なタスクを行う際に誤ってマルウェアを実行した場合に、システム全体 (具体的には管理者がログオンしているドメイン) に悪影響が及ぶリスクを抑えるための対策です。Windows XP では右クリックしたときに表示される [別のユーザーとして実行] コマンドを使用して、この操作を実行していましたが、Windows Vista では、このコマンドは [管理者として実行] コマンドに置き換えられたので存在しなくなりました。

ただし、runas コマンド ライン ツールは、まだ Windows Vista に存在しています。残念ながら、このコマンド ライン ツールは、アカウントを 2 つ使用する一般的なタスクの大半 (つまり Microsoft® 管理コンソール (MMC)) では使用できません。たとえば、Active Directory® のアカウント管理タスクを委任されているとします。日常的なタスクは標準ユーザーとして実行しており、必要なときにネットワーク管理ツールをインストールできるように、ネットワーク管理用のアカウントも、UAC が有効になっている Windows Vista コンピュータのローカル Administrators グループのメンバになっています。このような場合に、Active Directory ユーザーとコンピュータ (ADU&C) を Active Directory の管理アカウントで起動する必要が生じて、次のような runas コマンドを実行したとします。

runas /user:mydomain\admin
"mmc.exe %windir%\system32\dsa.msc"

残念ながら、上記のコマンドを実行しても ADU&C は起動されず、"要求された操作には管理者特権が必要です" という runas のエラー メッセージが表示されます。この現象は、MMC の実行可能ファイルが highestAvailable 特権レベルで実行されるようにマークされていることが原因で発生しています。ネットワーク管理用アカウントの highestAvailable レベルは管理者として実行することなので、この方法で ADU&C を起動するには権限の昇格が必要ですが、runas では権限の昇格の確認が行われないので、エラーが発生します。

Windows Vista では、[別のユーザーとして実行] に相当するショートカット メニューのコマンドが用意されておらず、昇格が必要なプロセスを別のユーザーとして実行する組み込みの手段もないので、このシナリオが難しくなっています。

この問題の解決策がなければ、この記事はストレスのたまる記事になったでしょう。しかし幸運にも、前回の記事で紹介した "昇格 PowerToy" の 1 つから 2 つ目の問題を解決する鍵が得られたので、私は別の PowerToy を作成して 1 つ目の問題を解決しました (私が昇格の問題の解決策を思い付いたと主張できればよかったのですが、これを思い付いたのは Windows アプリケーション互換性チームの Gov Maharaj でした)。

"昇格コマンド PowerToy" は runas コマンドと共に使用できることがわかりました。上記のコマンドでは権限の昇格の確認が行われませんでしたが、次のコマンドでは確認が行われます。

runas /user:mydomain\admin
"elevate mmc.exe%windir%\system32\dsa.msc"

このコマンドを実行すると elevate.cmd が他のユーザーとして起動し (厳密には、起動されるプロセスは cmd.exe です)、elevate コマンド スクリプトによって権限の昇格の確認が行われ、mmc.exe が起動されます。

右クリックしたときに [Run as Another User] (別のユーザーとして実行) コマンドを提示する PowerToy を作成するために、.exe ファイルと .msc ファイルのファイルの関連付けと組み合わせて、HTML アプリケーションの UI を使用するという裏技を使用しました。[Run as Another User] (別のユーザーとして実行) をクリックすると、図 1 のような HTML アプリケーションが表示されます。

図 1 別のユーザーとして実行するツール

図 1** 別のユーザーとして実行するツール **(画像を拡大するには、ここをクリックします)

ここで必要な作業は、ローカル コンピュータのアカウントのユーザー名とドメインを入力し、[Use Local Account] (ローカル アカウントを使用する) チェック ボックスをオンにするだけです。[Run] (実行) をクリックするとアプリケーションが標準ユーザーで起動し、[Run as Admin] (管理者として実行) をクリックするとアプリケーションが昇格された権限で起動します。どちらかのボタンをクリックすると、runas.exe が実行され、パスワードまたはスマート カードの PIN を入力するように要求されます。

この PowerToy では "昇格コマンド PowerToy" を使用しているので、まず "昇格コマンド PowerToy" をインストールする必要があります。RunAs.inf を右クリックし、[インストール] をクリックして、権限の昇格を承認します。この PowerToy をアンインストールするには、コントロール パネルのプログラムと機能を使用します。

一部の管理ツールの .msc ファイルへのショートカット (コンピュータの管理など) は、この PowerToy と連動しています。しかし、adminpak.msi を使用して Windows Server® 2003 管理ツールをインストールした場合、作成されたショートカットは .msc ファイルへの標準的なショートカットではないことに注意してください。これらのショートカットは Windows インストーラのショートカットなので、右クリックしても [Run as Another User] (別のユーザーとして実行) コマンドは表示されません。

このようなショートカットについては、実際の .msc ファイルを探して右クリックするか、.msc ファイルへの新しいショートカットを作成する必要があります。また、Windows Vista で Internet Explorer® のアーキテクチャが保護モード用に変更されたことが原因で、runas は Internet Explorer と連動しません (この問題の詳細については、support.microsoft.com/?id=922980 を参照してください)。

注 : 前回の記事で紹介した PowerToy が完成してから、この記事を公開するまでの間に、Windows Sysinternals から、"別のユーザーとして実行 PowerToy" と非常によく似た機能を持つ新しいツールがリリースされました。このツールは ShellRunas という名前で、Windows Sysinternals のサイト (technet.microsoft.com/sysinternals/cc300361) から入手できます。

Sysinternals の開発者は実際に業務で本物のコードを記述しているので、皆さんが使用する場合は、こちらのツールを使用することをお勧めします。私が作成したツールについては、スクリプト コードと HTML アプリケーションを使用して、具体的にはこのタスクが、また一般的にはシェル拡張が実行される例として、この記事に残すことにしました。

システムとしてコマンド プロンプトと PowerShell プロンプトを開く

プログラムをローカル システム コンテキストで実行しなければならないことがあります。たとえば、System Center Configuration Manager (SCCM) など、多くのソフトウェア配布ツールでは、ローカル システムとして実行されるクライアント エージェントを使用して作業を実行します。

ローカル システムとして実行されるソフトウェア インストール プログラムを、SCCM などの製品で配布する前に、プログラムの動作を確認するには、ローカル システムとして実行したコマンド プロンプトを使用してインストーラを起動すると便利です。そのため、"システムとしてコマンド プロンプトを開く PowerToy" と "システムとして PowerShell プロンプトを開く PowerToy" を作成しました。

Windows XP を使用していたときは、このような機能は、コマンド シェル スクリプトを使用して次のように実行していました。

@echo off
sc create CmdAsSystem type= own type= interact
binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^& 
title ***** SYSTEM *****)"
net start CmdAsSystem
sc delete CmdAsSystem

しかし、このスクリプトを Windows Vista で管理者特権で起動したコマンド プロンプトから実行すると、次のようなエラー メッセージが表示され、システムとして実行されるコマンド プロンプトは表示されません。

警告 : サービス CmdAsSystem は対話型として構成されていますが、対話型の構成は推奨されていません。サービスは正しく機能しない可能性があります。

問題は、このスクリプトでは対話型サービスを作成して起動しようとしている点です。Windows Vista では、対話型サービスは Session 0 分離のために正しく機能しません (Session 0 分離の詳細については、「Windows Vista のサービス」ホワイト ペーパー (microsoft.com/whdc/system/vista/Vista_Services.mspx) を参照してください)。

この制約に対処するため、私は Sysinternals によって開発された PsExec というツールを使用しました (このツールの詳細については、technet.microsoft.com/sysinternals/bb897553.aspx を参照してください)。このツールを使用すると、プロセスをシステム コンテキストで起動できます。残念ながら、ほとんどの Sysinternals ツールにはインストーラが用意されていません。そこで、Sysinternals Suite 全体 (PsExec を含む) を Program Files\Sysinternals Suite にインストールする INF ファイルを用意しました (このファイルはダウンロードに含まれています)。さらにおまけとして、この INF ファイルを使用すると、[スタート] メニューに Sysinternals Suite のグラフィカル ツールのショートカットが作成されます。

Sysinternals Suite をインストールするには、まず SysinternalsSuite.zip を technet.microsoft.com/sysinternals/bb842062.aspx からダウンロードして展開します。Sysinternals Suite を展開したフォルダに、私が作成した INF ファイル (Install_SysinternalsSuite.inf) をコピーし、Install_SysinternalsSuite.inf ファイルを右クリックして、[インストール] をクリックします。この新しい PowerToy では "昇格コマンド PowerToy" を使用しているので、"昇格コマンド PowerToy" をインストールします。ここまでの作業が終わったら、CmdHereAsSystem.inf と PowerShellHereAsSystem.inf をインストールできます。これらの PowerToy をインストールすると、Windows エクスプローラのフォルダやドライブを右クリックしたときに、[CMD Prompt Here as System] (システムとしてコマンド プロンプトを開く) および [PowerShell Prompt Here as System] (システムとして PowerShell プロンプトを開く) コマンドが表示されるようになります (図 2 参照)。

図 2 [CMD Prompt Here as System] (システムとしてコマンド プロンプトを開く) と [PowerShell Prompt Here as System] (システムとして PowerShell プロンプトを開く)

図 2** [CMD Prompt Here as System] (システムとしてコマンド プロンプトを開く) と [PowerShell Prompt Here as System] (システムとして PowerShell プロンプトを開く)  **

図 3 は、システムとして実行されているコマンド プロンプトを示しています。このプロンプトがシステムとして実行され、間違ったコマンドを入力するとシステムに予期しない (損害が発生する) 影響を与える可能性があることを示すために、鮮やかな色を採用しました。

図 3 システムとして実行されるコマンド プロンプトは責任を持って使用する必要がある

図 3** システムとして実行されるコマンド プロンプトは責任を持って使用する必要がある **

最後に、これらの PowerToy では、これらのコマンドがシステム コマンドに追加されるので、上記のコマンド プロンプトは [ファイル名を指定して実行] ダイアログ ボックスまたはコマンド プロンプトから起動できます。たとえば、以下のコマンドを [ファイル名を指定して実行] ダイアログ ボックスで実行すると、コマンド プロンプトがシステムとして実行され、Windows フォルダがカレント ディレクトリになります。

cmdassystem "c:\windows"

Windows PowerShellTM の対応するコマンドは、psassystem です。また、"管理者としてコマンド プロンプトを開く PowerToy" と "管理者として PowerShell プロンプトを開く PowerToy" も変更して、それぞれ cmdasadmin と psasadmin という同様のコマンドがインストールされるようにしました。

昇格ガジェット

私が作成した PowerToy の大半では、マウスの右ボタンをクリックする必要があります。しかし、今回の更新のおまけとして、もう少しおもしろい機能も含めました。これは、私が "昇格ガジェット" と呼んでいる Windows サイドバー ガジェットです (図 4 参照)。このガジェットはドラッグ アンド ドロップで操作できます。Windows エクスプローラから、runas コマンドが定義されている実行可能ファイルまたはスクリプトをドラッグするだけで、ファイルが昇格された権限で起動されます。

図 4 ドラッグ アンド ドロップで操作できる昇格ガジェット

図 4** ドラッグ アンド ドロップで操作できる昇格ガジェット **

前回の記事で紹介した "昇格 PowerToy" をインストールしている場合、この PowerToy は Windows スクリプト ホスト スクリプト、Windows PowerShell スクリプト、HTML アプリケーション、および Windows インストーラ パッケージと修正プログラムに使用できます (もちろん Windows Vista で runas コマンドが既定で定義されている実行可能ファイルとコマンド シェル スクリプトにも使用できます)。さらに、一度に複数の項目をドラッグすることもできます (フォルダをガジェットにドラッグして、結果を確認してみてください)。

ガジェットをインストールするには、Elevation.gadget をダブルクリックします (このファイルもダウンロードに含まれています)。ガジェットのコードを確認するには、ファイル名に .cab 拡張子を追加します。その後、CAB ファイルから内容を展開できます。

まとめ

この記事のダウンロードには、新しい PowerToy と、前回の記事で紹介した PowerToy の両方が含まれています。前回の記事で紹介した PowerToy の一部には少し変更を加えました。たとえば、以前のバージョンの "管理者として Windows PowerShell Prompt を開く PowerToy" と "WSH スクリプトの昇格 PowerToy" では、どちらも専用の elevate.cmd と elevate.vbs のコピーをインストールしていました。いくつかの新しい PowerToy は、これらのファイルに依存しているので、このような PowerToy では、"昇格コマンド PowerToy" のインストールを要求するようにしました (インストール後は、同じファイルを共有します)。ある特定の PowerToy に "昇格コマンド PowerToy" のインストールが必要かどうかを判断するには、INF ファイルのヘッダーを確認してください。

その他の以前のバージョンの PowerToy の一部にも、機能に関係ないちょっとした変更を加えています。必ず古いバージョンの PowerToy をアンインストールしてから最新バージョンの PowerToy をインストールしてください。今回の記事を執筆するにあたり、このコレクションは 17 種類のツールに拡大したので、コレクション全体をインストールまたはアンインストールするコマンド シェル (InstallAllPowerToys.cmd と UninstallAllPowerToys.cmd) を用意しました。これらのコマンド シェルをカスタマイズして、使用する必要があるツールだけをインストールまたはアンインストールすることができます。

既定では、InstallAllPowerToys.cmd を実行しても、サードパーティ製のスクリプト ツールに対応した "管理者として実行 PowerToy" はインストールされないことに注意してください。このスクリプトは、対応するソフトウェアがインストールされている PowerToy だけをインストールするように変更できます。いずれかのスクリプトを実行すると、スクリプトは昇格された権限で再起動されます。UninstallAllPowerToys.cmd を実行すると、すべての古いバージョンの PowerToy もアンインストールできます。

私が作成した他のすべての PowerToy と同様に、今回紹介した PowerToy についてはサポートを提供していないので、各自の責任でご使用いただくことになります。また、これらの PowerToy は公式なマイクロソフト製品ではなく、私が個人的に作成したものです。私と他の数人のボランティアによって、英語 (米国) を既定の言語として使用している 32 ビット版の Windows Vista でテストされているだけです。また、これらの PowerToy のいずれか、またはすべてが、今後リリースされる Windows の更新プログラム、サービス パック、またはオペレーティング システムのバーションで動作しなくなる可能性があることをご了承ください。

Michael Murgolo は Microsoft Consulting Services のシニア インフラストラクチャ コンサルタントです。得意分野は、オペレーティング システム、展開、ネットワーク サービス、Active Directory、システム管理、自動化、修正プログラム管理です。デスクトップの展開および移行の分野を専門にしています。

© 2008 Microsoft Corporation and CMP Media, LLC.All rights reserved; 許可なしに一部または全体を複製することは禁止されています.