タスクのセキュリティ コンテキスト

タスクは登録され、特定のセキュリティ コンテキストで実行されます。 ユーザーは、タスクを正常に登録、更新、削除、または実行するアプリケーションを作成できますが、タスクが登録されていて、アプリケーションが正しい特権を持つプロセスで実行されている必要がある場合は、適切な資格情報を指定する必要があります。

資格情報の指定

タスクのセキュリティ コンテキストを指定するには、ITaskFolder::RegisterTask または ITaskFolder::RegisterTaskDefinition (スクリプトの場合は TaskFolder.RegisterTask または TaskFolder.RegisterTaskDefinition) メソッドで資格情報を指定するか、ITaskDefinition (スクリプトの場合は TaskDefinition.Principal) の Principal プロパティにプリンシパルを割り当てます。 タスク定義に対してプリンシパルが作成され、そのタスク定義が RegisterTaskDefinition メソッドを使用して登録され、メソッド パラメーターで指定された資格情報が異なる場合、 RegisterTaskDefinition メソッドで指定された資格情報によってプリンシパルの資格情報が上書きされます。 XML を使用してタスク定義のプリンシパルが作成され、そのタスクの XML が、メソッド パラメーターで指定された異なる資格情報を持つ RegisterTask メソッドを使用して登録されている場合、 RegisterTask メソッドで指定された資格情報によってプリンシパルの資格情報が上書きされます。

タスクを登録するとき、またはタスクの原則を指定するときに、ユーザー アカウントまたはグループを指定します。 ユーザー アカウントまたはグループのセキュリティ コンテキストは、タスクのセキュリティ コンテキストに使用されます。 これらのメソッドとプロパティでは、ログオンの種類も定義します。 ログオンの種類は、 TASK_LOGON_TYPE 列挙の定数の 1 つによって定義されます。

TASK_LOGON_PASSWORDフラグまたはTASK_LOGON_S4Uフラグに登録されたタスクは、指定されたユーザーが Batch としてログオン権限が有効になっている場合にのみ起動します。 管理者と Backup Operators グループ のユーザーは、既定でこの特権を有効にしています。

ITaskService::Connect (スクリプト化の場合は TaskService.Connect) メソッドを呼び出すと、タスク スケジューラ サービスに対する後続のメソッド呼び出しでは、Connect メソッドに渡された資格情報が使用されます。 これは、対話型ログオンの種類でタスクを登録する場合に考慮することが重要です。 ログオンの種類が TASK_LOGON_INTERACTIVE_TOKEN と等しいタスクを登録し、タスクに RegisterTaskDefinition のパラメーターで指定された、または RegisterTask に渡される XML で指定されたタスク定義の Principal プロパティに指定された資格情報がない場合、タスクは Connect メソッドを呼び出したユーザーの資格情報で登録されます。

タスクのユーザー アカウント制御 (UAC) セキュリティ

ユーザー アカウント制御 (UAC) を使用すると、ユーザーは、管理特権を公開することなく、プログラムの実行やデータの保存や変更などの一般的な機能を実行できます。 既定では、UAC が有効になっている場合、タスクは低レベルの特権で実行されます。 タスクでは、IPrincipal の RunLevel プロパティ (スクリプト用 Principal.RunLevel) の TASK_RUNLEVEL_TYPE 列挙から特権レベルを設定することで、管理者特権または低い特権で実行することを指定できます。 RunLevel プロパティの値は、タスクのアクションを実行する特権レベルを決定します。 タスクのアクションに実行する管理者特権が必要な場合は、 RunLevel プロパティを TASK_RUNLEVEL_HIGHEST に設定する必要があります。 タスクのセキュリティ コンテキストに Administrators グループを使用してタスクが登録されている場合は、タスクを実行する場合は、 RunLevel プロパティを TASK_RUNLEVEL_HIGHEST に設定する必要もあります。 Builtin\Administrator アカウントまたはローカル システムまたはローカル サービス アカウントを使用してタスクが登録されている場合、 RunLevel プロパティは無視されます。 ユーザー アカウント制御 (UAC) がオフになっている場合も、プロパティ値は無視されます。 RunLevel プロパティの値は、タスクの実行または削除に必要なアクセス許可には影響しません。

注意

オペレーティング システムを Windows XP から Windows Vista にアップグレードした後、Windows XP の Builtin\Administrator アカウントを使用して登録されたタスクでは、 RunLevel プロパティが TASK_RUNLEVEL_LUAに設定されます。 これにより、一部のタスクが失敗する可能性があります。 このプロパティは、すべてのタスクが実行されるように手動で更新できます。

 

低い特権プロセスでは、TASK_RUNLEVEL_HIGHESTと等しい RunLevel プロパティに タスクを登録することはできませんが、TASK_RUNLEVEL_LUAと等しい RunLevel プロパティを 使用してタスクを登録できます。 タスク アクションは、低い特権で実行されます。 タスクを組み込み/管理者、ローカル システム、またはグループとして登録することはできません。

昇格された特権プロセスから、TASK_RUNLEVEL_HIGHESTまたはTASK_RUNLEVEL_LUAと等しい RunLevel プロパティにタスクを登録できます。 タスクは、管理者アカウントを使用していない限り、 RunLevel プロパティによって決定された特権レベルで実行されます。この場合、タスクは昇格された特権で実行されます。

管理者特権のプロセスから、タスク スケジューラ 1.0 タスクを登録できます。 タスク スケジューラ サービスは、タスクの実行レベルをTASK_RUNLEVEL_HIGHESTに設定し、タスクは昇格された特権で実行されます。

低い特権プロセスから、タスク スケジューラ 1.0 タスクを登録することもできます。 タスク スケジューラ サービスは、タスクの実行レベルをTASK_RUNLEVEL_LUAに設定し、タスクは低い特権で実行されます。 このタスクが昇格されたプロセスから更新された場合、タスクの実行レベルはTASK_RUNLEVEL_LUA。

タスクを登録するためのセキュリティ

Administrators グループのメンバーであるアカウントからタスクを登録する場合、次の状況でタスクを登録するときにパスワードを指定するだけで済みます。

  • アカウントまたは別のユーザーのアカウントのセキュリティ コンテキストで実行するタスクを登録し、RegisterTask メソッドまたは RegisterTaskDefinition メソッドで TASK_LOGON_PASSWORD フラグを使用する場合。
  • 別のユーザーのアカウントのセキュリティ コンテキストで実行するタスクを登録し、RegisterTask メソッドまたは RegisterTaskDefinition メソッドでTASK_LOGON_S4U フラグを使用する場合。

registerTask メソッドまたは RegisterTaskDefinition メソッドで TASK_LOGON_S4U フラグまたはTASK_LOGON_PASSWORD フラグを使用してタスクを登録する場合、ユーザー グループをタスクのセキュリティ コンテキストとして使用することはできません。

Administrators グループのメンバーではないユーザー アカウントからタスクを登録する場合、アカウントのセキュリティ コンテキストで実行するタスクを登録し、S4U または対話型ログオンの種類を使用する場合は、タスクを登録するときにパスワードを指定する必要はありません。 それ以外の場合は、タスクを登録するときにパスワードを指定する必要があります。 また、ローカル サービス アカウントを使用するか、タスクのセキュリティ コンテキストにグループを使用してタスクを登録することはできません。

タスクの読み取り、更新、削除、実行のセキュリティ

既定では、タスクを作成するユーザーは、タスクの読み取り、更新、削除、実行を行うことができます。 タスクを更新するには、タスク ファイルに対するファイル書き込みアクセス許可、タスクを読み取るためのタスク ファイルに対するファイル読み取りアクセス許可、タスクを削除するためのタスク ファイルに対するアクセス許可の削除、および IRegisteredTask::Run メソッドまたは RunEx メソッド (スクリプト用の RegisteredTask.Run および RunEx ) を使用してタスクを実行するためのタスクに対するファイル実行アクセス許可が必要です。 Administrators グループまたは SYSTEM アカウントのメンバーは、タスクの読み取り、更新、削除、および実行を行うことができます。 Users グループ、LocalService アカウント、および NetworkService アカウントのメンバーは、作成したタスクの読み取り、更新、削除、実行のみを行うことができます。 この既定の動作は、タスク ファイルの DACL が変更されると変更されます。この場合、DACL はファイルの書き込み、読み取り、実行、および削除のアクセス許可を持つユーザーを定義します。 タスク ファイルのアクセス許可を設定するには、RegisterTask メソッドまたは RegisterTaskDefinition メソッドを使用してタスクを登録するときに、IRegisteredTask.SetSecurityDescriptor メソッド (スクリプト用の RegisteredTask.SetSecurityDescriptor) を使用するか、セキュリティ記述子を設定します。

タスクの更新でタスクの DACL を変更する必要がある場合、ユーザーは、タスクを更新するための読み取り/書き込みアクセス許可に加えて、WriteDAC アクセス許可を持っている必要があります。

タスク登録情報

タスク スケジューラについて

タスク セキュリティの強化

TaskFolder.RegisterTaskDefinition

ITaskFolder::RegisterTaskDefinition

ITaskDefinition の Principal プロパティ

TASK_LOGON_TYPE