「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
Windowsサービス全般の実行アカウント問題を中心としたトラブルシュートについて説明します。
以下を参照下さい。
runasコマンドで一時的にほかのユーザー権限でプログラムを実行する事ができますが、
コマンドからパスワードは与えられず、ユーザに入力を求めるダイアログが表示されますので
非対話型のセッションから実行されるWindowsサービスやタスク スケジューラではアンマッチです。
IIS(のワーカ・プロセス)やSQL Serverなど、
専用の設定画面を持ち、ここから設定が可能です。
Windows Server 2003 | Windows Vista Windows Server 2008 | Windows 7/Vista sp2 Windows Server 2008 R2 | |
既定の匿名ユーザーID | IUSR_<マシン名> | IUSR | IUSR |
既定のワーカープロセスID | NETWORK SERVICE | NETWORK SERVICE | アプリケーション プール ID (仮想アカウント) |
ワーカープロセスグループ | IIS_WPG | IIS_IUSRS | IIS_IUSRS |
IIS 7 以降でのアプリケーションプールと権限について調べた - しばやん雑記
http://blog.shibayan.jp/entry/20150127/1422369253
ASP.NETでは、偽装を使用する事によって、
実行アカウントを指定することもできます。
ASP.NET アプリケーションに偽装を実装する方法
http://support.microsoft.com/kb/306158/ja
偽装には、
特定のアカウントに偽装する。
Windowsサービスにアクセスしてきたユーザの認証アカウントに偽装する。
があります。
匿名アカウントを実行アカウントにする場合は偽装が必要になります。
通常は、IIS(のワーカ・プロセス)の実行アカウントで実行される。
ASP.NETのように、偽装の機能が実装されているWindowsサービスも有りますが、
Win32APIを使用して偽装することもできます(区間的、部分的な偽装)。
以下のKBにあるように、タスク スケジューラは実行アカウントを指定して実行させる事ができます。
コマンドからは以下の様に設定します。
の何れかを使用する必要があります。
WORKGROUP環境で利用。
Active Directory環境で利用。
リモート・コマンドを実行する場合、
リモートでコマンドを実行する際の
実行アカウントを考慮する必要があります。
rshsvc.exeは、渡されたシェルを実行しますが、シェルの実行アカウントは、
サービスで使用されるビルトイン システム アカウントであるLocal Systemとなるようです。
WinRMサービスは、渡されたPowerShellを実行しますが、PowerShellの実行アカウントは、
サービスで使用されるビルトイン システム アカウントであるNetwork Serviceとなるようです。
しかし、WinRMサービスは実行時にCredentialを渡す事で実行アカウントを指定でき、
また、色々設定を行う事によってWinRMではダブルホップも可能であるようです。
RSH(rshsvcサービス)など、上記の実行アカウントで
実行できないコマンドをリモート実行したい場合、PsExec?が利用できる。
ローカルの実行アカウントを引き継いでリモートアクセスする場合に知っておきたい
「ダブルホップ」については「ベース クライアント セキュリティ モデル」→「委任」を参照。
スタートアップ スクリプトは Local System アカウントとして実行されるらしい。
また、ASP.NETなどの偽装スレッドからEXE起動をした場合、
EXEが偽装スレッドの実行アカウントで実行されない問題があります。
偽装ユーザーのコンテキストで実行されるプロセスを起動するのには、
System.Diagnostics.Process.Startメソッドを使用できません。
以下の点に注意が必要のようです。