マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

タスク = タスク・スケジューラ = Windowsサービスのため

「タスク・スケジューラもWindowsサービス」です。

Windowsサービス全般の実行アカウント問題を中心としたトラブルシュートについて説明します。

アカウント関係

runasコマンド実行アカウントを指定する(アンマッチ)

runasコマンドで一時的にほかのユーザー権限でプログラムを実行する事ができますが、
コマンドからパスワードは与えられず、ユーザに入力を求めるダイアログが表示されますので
非対話型のセッションから実行されるWindowsサービスやタスク スケジューラではアンマッチです。

タスク スケジューラの実行アカウントを指定する

タスク スケジューラの機能を使用する

以下のKBにあるように、タスク スケジューラは実行アカウントを指定して実行させる事ができます。

コマンドからは以下の様に設定します。

タスク スケジューラに特権を付与する

こちらを参照して下さい。

タスク スケジューラからUIをコントロールする場合、

バックグラウンドからのUIオートメーションはサポートされない。
従って、以下のように設定をして、フォアグラウンドで実行できるようにする。

参考:

Windowsサービスの実行アカウントを指定する

IISやSQL Serverなど

IIS(のワーカ・プロセス)やSQL Serverなど、
専用の設定画面を持ち、ここから設定が可能です。

Windows Server 2003Windows Vista
Windows Server 2008
Windows 7/Vista sp2
Windows Server 2008 R2
既定の匿名ユーザーIDIUSR_<マシン名>IUSRIUSR
既定のワーカープロセスIDNETWORK SERVICENETWORK SERVICEアプリケーション プール ID
仮想アカウント
ワーカープロセスグループIIS_WPGIIS_IUSRSIIS_IUSRS

ASP.NET(偽装)

ASP.NETでは、偽装を使用する事によって、
実行アカウントを指定することもできます。

ASP.NET アプリケーションに偽装を実装する方法
http://support.microsoft.com/kb/306158/ja

偽装には、

があります。

匿名アカウントを実行アカウントにする場合は偽装が必要になります。
通常は、IIS(のワーカ・プロセス)の実行アカウントで実行される。

APIを使用した偽装

ASP.NETのように、偽装の機能が実装されているWindowsサービスも有りますが、
Win32APIを使用して偽装することもできます(区間的、部分的な偽装)。

WindowsサービスからEXEを起動

偽装スレッドからEXEを起動

また、ASP.NETなどの偽装スレッドからEXE起動をした場合、
EXEが偽装スレッドの実行アカウントで実行されない問題があります。

偽装スレッドの実行アカウントでEXEを起動する場合は、
DuplicateTokenEx?CreateProcessAsUser?関数を使用し、
独自に、ユーザ権限を割り当てる必要があるようです。

以下の点に注意が必要のようです。

[[「ブロックの解除」がされていないEXEを起動>]]

コンピューター スタートアップ スクリプトの実行アカウント

スタートアップ スクリプトは Local System アカウントとして実行されるらしい。

実行アカウントの確認方法

.NET

以下を参照下さい。

サービスで使用されるビルトイン システム アカウントの問題

一般的に匿名アクセスを許可する以外、

ネットワーク間の認証には

の何れかを使用する必要があります。

ネットワークアクセス

ネットワーク経由で、ファイル共有やプリンタにアクセスする場合。

リモート・コマンド

リモート・コマンドを実行する場合、
リモートでコマンドを実行する際の
実行アカウントを考慮する必要があります。

RSH

rshsvc.exeは、渡されたシェルを実行しますが、シェルの実行アカウントは、
サービスで使用されるビルトイン システム アカウントであるLocal Systemとなるようです。

WinRM

WinRMサービスは、渡されたPowerShellを実行しますが、PowerShellの実行アカウントは、
サービスで使用されるビルトイン システム アカウントであるNetwork Serviceとなるようです。

しかし、WinRMサービスは実行時にCredentialを渡す事で実行アカウントを指定でき、
また、色々設定を行う事によってWinRMではダブルホップも可能であるようです。

PsExec?

RSH(rshsvcサービス)など、上記の実行アカウントで
実行できないコマンドをリモート実行したい場合、PsExec?が利用できる。

参考情報

ローカルの実行アカウントを引き継いでリモートアクセスする場合に知っておきたい
「ダブルホップ」については「ベース クライアント セキュリティ モデル」→「委任」を参照。

サービスで使用されるビルトイン システム アカウントで実行

サービスで使用されるビルトイン システム アカウントでプログラムを実行しようとしても、
runasコマンドにはサービスで使用されるビルトイン システム アカウントを指定きません。

この場合、「System」(LocalSystem?)であれば、
タスク スケジューラが既定で、「System」(LocalSystem?)の
サービスで使用されるビルトイン システム アカウントを使用する性質を利用できます。


Tags: :あるある, :Windows, :アカウント, :セキュリティ, :障害対応, :デバッグ


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS