任务在特定的安全上下文中注册并运行。 用户可以创建成功注册、更新、删除或运行任务的应用程序,但在注册任务时,用户必须提供正确的凭据,并且应用程序必须在具有正确权限的进程中运行。
指定凭据
可以通过在 ITaskFolder::RegisterTaskFolder::RegisterTaskFolder::RegisterTaskDefinition(TaskFolder.RegisterTask 或 TaskFolder.RegisterTaskDefinition for scripting)方法中指定凭据,或者通过将主体分配给 ITaskDefinition (TaskDefinition.Principal for scripting)方法来指定任务的安全上下文。 如果为任务定义创建了主体,然后使用在方法参数中指定的不同凭据的 RegisterTaskDefinition 方法注册任务定义,则 RegisterTaskDefinition 方法中指定的凭据将覆盖主体中的凭据。 如果使用 XML 为任务定义创建了主体,然后使用在方法参数中指定的不同凭据的 RegisterTask 方法注册任务的 XML,则 RegisterTask 方法中指定的凭据将覆盖主体中的凭据。
注册任务或指定任务原则时,可以指定用户帐户或组。 用户帐户或组的安全上下文用于任务的安全上下文。 在这些方法和属性中,还定义登录类型。 登录类型由 TASK_LOGON_TYPE 枚举中的常量之一定义。
仅当指定的用户启用了“登录为 Batch”权限时,才启动注册到TASK_LOGON_PASSWORD或TASK_LOGON_S4U标志的任务。 默认情况下,管理员和备份作员组用户已启用此权限。
调用 ITaskService::Connect (用于脚本的 TaskService.Connect )方法时,对任务计划程序服务的任何后续方法调用都将使用传递给 Connect 方法的凭据。 使用交互式登录类型注册任务时,请务必考虑这一点。 将登录类型等于TASK_LOGON_INTERACTIVE_TOKEN的任务注册到任务时,该任务在任务定义的 Principal 属性中未指定凭据、在 RegisterTaskDefinition 的参数中指定,或在传递给 RegisterTask 的 XML 中指定时,该任务将使用调用 Connect 方法的用户的凭据进行注册。
任务用户帐户控制 (UAC) 安全性
用户帐户控制 (UAC)允许用户练习常规功能,例如运行程序并保存和修改数据,而无需公开管理权限。 默认情况下,启用 UAC 时,任务以低级别权限运行。 任务可以通过从 IPrincipal (Principal.RunLevel for scripting)的 RunLevel 属性的 TASK_RUNLEVEL_TYPE 枚举设置权限级别,以指定它们将使用提升的权限或低权限运行。 RunLevel 属性的值确定将运行任务作的特权级别。 如果任务的作必须具有提升的权限才能运行,则必须将 RunLevel 属性设置为 TASK_RUNLEVEL_HIGHEST。 如果使用管理员组为任务的安全上下文注册任务,则如果想要运行该任务,还必须将 RunLevel 属性设置为 TASK_RUNLEVEL_HIGHEST 。 如果使用 Builtin\Administrator 帐户或本地系统或本地服务帐户注册任务,则将忽略 RunLevel 属性。 如果用户帐户控制(UAC)已关闭,也会忽略属性值。 RunLevel 属性的值不会影响运行或删除任务所需的权限。
注释
将作系统从 Windows XP 升级到 Windows Vista 后,使用 Windows XP 上的 Builtin\Administrator 帐户注册的任务将设置为 TASK_RUNLEVEL_LUARunLevel 属性。 这可能会导致某些任务失败。 可以手动更新此属性,以确保所有任务都将运行。
在低特权进程中,不能将任务注册到 RunLevel 属性等于 TASK_RUNLEVEL_HIGHEST,但可以将任务注册到 RunLevel 属性等于 TASK_RUNLEVEL_LUA。 任务作将以低特权运行。 不允许将任务注册为 Builtin/Administrator、Local System 或组。
在提升的权限进程中,可以将任务注册到 RunLevel 属性等于 TASK_RUNLEVEL_HIGHEST 或 TASK_RUNLEVEL_LUA。 除非使用管理员帐户,否则该任务将使用 RunLevel 属性决定的特权级别运行,在这种情况下,该任务将使用提升的权限运行。
在提升的进程中,可以注册任务计划程序 1.0 任务。 任务计划程序服务将任务的运行级别设置为TASK_RUNLEVEL_HIGHEST,任务将使用提升的权限运行。
从低特权进程,还可以注册任务计划程序 1.0 任务。 任务计划程序服务将任务的运行级别设置为TASK_RUNLEVEL_LUA,任务将以低特权运行。 如果此任务是从提升的进程更新的,则任务的运行级别将保持TASK_RUNLEVEL_LUA。
注册任务的安全性
从属于管理员组成员的帐户注册任务时,只需在以下情况下注册任务时指定密码:
- 如果注册任务以在帐户的安全上下文或其他用户帐户下运行,并在 RegisterTask 或 RegisterTaskDefinition 方法中使用TASK_LOGON_PASSWORD标志。
- 如果注册任务以在不同的用户帐户的安全上下文下运行,并在 RegisterTask 或 RegisterTaskDefinition 方法中使用TASK_LOGON_S4U标志。
使用 registerTask 或RegisterTaskDefinition 方法中的TASK_LOGON_S4U标志或TASK_LOGON_PASSWORD标志注册任务时,不能使用用户组作为任务的安全上下文。
当你从不是管理员组成员的用户帐户注册任务时,如果注册任务以在帐户的安全上下文下运行,并且使用 S4U 或交互式登录类型,则注册任务时无需指定密码。 否则,需要在注册任务时指定密码。 此外,不能使用本地服务帐户或使用组注册任务的安全上下文。
读取、更新、删除和运行任务的安全性
默认情况下,创建任务的用户可以读取、更新、删除和运行任务。 用户必须对任务文件具有文件写入权限才能更新任务、对任务文件的文件读取权限以读取任务、删除任务文件删除任务的权限以及使用 IRegisteredTask::Run 或 RunEx 方法运行任务的文件执行权限(RegisteredTask.Run 和 RunEx 进行脚本编写)。 管理员组或 SYSTEM 帐户的成员可以读取、更新、删除和运行任何任务。 用户组、LocalService 帐户和 NetworkService 帐户的成员只能读取、更新、删除和运行他们创建的任务。 当更改任务文件的 DACL 时,此默认行为会更改,在这种情况下,DACL 定义哪些用户具有文件写入、读取、执行和删除权限。 若要设置任务文件的权限,请使用 IRegisteredTask.SetSecurityDescriptor 方法(RegisteredTask.SetSecurityDescriptor 进行脚本编写),或使用 RegisterTask 或 RegisterTaskDefinition 方法注册任务时设置安全描述符。
如果用户需要更改任务的 DACL,则除了读取/写入权限之外,还必须具有 WriteDAC 权限才能更新任务。
相关主题
-
有关任务计划程序 的