Cmd.exeウィンドウのタイトルバーに「管理者」と表示され、昇格された特権で開始されたことを示している場合、このコマンドウィンドウから実行するものはすべて、昇格された特権で実行されることを意味しますか?
具体的には、次のようなものを実行した場合:
msiexec SomeProgram.msi
インストーラーは、昇格された特権で実行されていたcmd.exeから実行されたため、昇格された特権で実行されていますか?
具体的には、上記のmsiexec
呼び出しのように、UIを表示し、cmd.exeウィンドウでプロンプトをすぐに返すアプリケーションが昇格された特権で実行されているのではないかと思います。
はい、昇格された特権で実行されます。
1つの昇格コマンドと1つの非昇格コマンドプロンプトを開くことで、これを非常に簡単にテストできます。両方でコマンドnotepad.exe
を実行し、空白のテキストファイルをC:\Windows
に保存してみてください。 1つは保存し、もう1つはアクセス許可エラーをスローします。
それがあなたのためにそれを確認するのに十分でない場合(それは本当に私を満足させませんでした)、あなたはSysInternalsから AccessChk を使うことができます。これは、管理者特権のコマンドプロンプトから実行する必要があります。
実行中の2つのメモ帳プロセスを確認することから始めましょう。
accesschk.exe -v -p notepad
)[11140] notepad.exe
Medium Mandatory Level [No-Write-Up, No-Read-Up]
RW DOMAIN\Tannerf
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[11004] notepad.exe
High Mandatory Level [No-Write-Up, No-Read-Up]
RW BUILTIN\Administrators
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
1つは私のドメインユーザー名で実行されており、もう1つはAdministrators組み込みグループで実行されています。 必須レベルが高い もあります。特権とトークンの内訳については、-f
フラグを使用して実行することもできます。
msiexec
を実行すると、状況が少し複雑になる可能性があると思いました。テストに便利なGoogle Chromeスタンドアロンインストーラーがあります。
D:\Users\tannerf>accesschk.exe -p msiexec.exe
[10540] msiexec.exe
RW BUILTIN\Administrators
RW NT AUTHORITY\SYSTEM
D:\Users\tannerf>accesschk.exe -p chrome_installer.exe
[5552] chrome_installer.exe
NT AUTHORITY\SYSTEM
OWNER RIGHTS
RW NT SERVICE\msiserver
もうそんなに切って乾かさないでください! chrome_installer.exe
プロセスがMSIServerサービスを介して実行されたようです。
これにより、他のインストーラーがどのような動作をするのか不思議に思うので、便利なEvernote.msiを実行しました。
[6916] msiexec.exe
High Mandatory Level [No-Write-Up, No-Read-Up]
RW BUILTIN\Administrators
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[4652] msiexec.exe
System Mandatory Level [No-Write-Up, No-Read-Up]
R BUILTIN\Administrators
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION
面白い;今回はシステムレベルで実行されるmsiexec.exeがあります。プロセスモニターを使用して、ポップアップする実際のインストールウィンドウがシステムレベルのmsiexecプロセスからのものであることを確認しました。高い必須レベルを強制終了すると、システムレベルのプロセスも強制終了されます。
[7472] msiexec.exe
Medium Mandatory Level [No-Write-Up, No-Read-Up]
RW DOMAIN\Tannerf
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[4404] msiexec.exe
System Mandatory Level [No-Write-Up, No-Read-Up]
R BUILTIN\Administrators
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION
Evernoteはどちらの方法でもシステムレベルのアクセスを取得するようです。インストーラーをダブルクリックしても同じ結果になります。
特に指定がない限り、プロセスがパーミッションを継承することはかなりよく示されていると思います。これは、msiexec SomeProgram.msi
がすべてのプロセスプロセスにわたって高い必須レベルで実行されることを保証するものではありません。システムレベルまたはMSIServerで実行できます。あなたのマイレージは変わるかもしれません、そしてこれらの規則が「破られている」ように見える多くの例を見ても私は驚かないでしょう。
デフォルトでは、Windowsプロセスは親からセキュリティコンテキストを継承します。
プロセスのデフォルトのセキュリティ記述子のACLは、作成者のプライマリトークンまたは偽装トークンから取得されます。
ただし、より少ない権限でプロセスを生成することは可能です。
プロセスは、それを生成したプロセスの整合性レベルを継承しますが、整合性レベルは、プロセスの作成時にカスタマイズできます。ユーザーインターフェイス特権分離テクノロジでウィンドウメッセージの境界を定義するだけでなく、必須整合性制御は、Windowsエクスプローラー、Internet Explorer、Google Chrome、Adobe Reader)などのアプリケーションでドキュメントを分離するために使用されます。システム内の脆弱なオブジェクト。
必須整合性制御に関するウィキペディア 関連 この他のMSDNページ 、また言及 ここ 。 別のプレゼンテーション プロセスの継承についても言及しています。
ただし、@ Tannerのテストと回答が示すように、cmd.exeは可能な限り最高レベルの特権継承で子プロセスを起動すると思います。
実行されたコマンドの特権を解除するには、次の2つの方法があります。
runas /trustlevel:0x20000 "msiexec SomeProgram.msi"
(実行runas /showtrustlevels
それを学ぶために0x20000
は、デフォルトのユーザー信頼レベルです。これは、管理者として実行するときに実際に付与することなく、昇格された特権を「必要とする」プログラムをインストール/実行する場合にも機能します。これは タナーのメモ帳テスト )に合格します このSUの回答psexec -l -d msiexec SomeProgram.msi
per このSUの回答 (おそらくいくつかの ""も必要ですが、runas
は十分に機能するため、これをテストしませんでした)