Contextos de seguridad para tareas
Las tareas se registran y se ejecutan en un contexto de seguridad específico. Los usuarios pueden crear aplicaciones que registren, actualicen, eliminen o ejecuten correctamente tareas, pero el usuario debe proporcionar las credenciales correctas cuando se registra una tarea y la aplicación debe ejecutarse en un proceso con los privilegios correctos.
Especificación de credenciales
Puede especificar el contexto de seguridad de una tarea especificando credenciales en los métodos ITaskFolder::RegisterTask o ITaskFolder::RegisterTaskDefinition (TaskFolder.RegisterTask o TaskFolder.RegisterTaskDefinition para scripting) o asignando una entidad de seguridad a la propiedad Principal de ITaskDefinition (TaskDefinition.Principal para scripting). Si se crea una entidad de seguridad para una definición de tarea y, a continuación, la definición de tarea se registra mediante el método RegisterTaskDefinition con credenciales diferentes especificadas en los parámetros del método, las credenciales especificadas en el método RegisterTaskDefinition sobrescribirán las credenciales en la entidad de seguridad. Si se crea una entidad de seguridad para una definición de tarea mediante XML y, a continuación, el XML de la tarea se registra mediante el método RegisterTask con credenciales diferentes especificadas en los parámetros del método , las credenciales especificadas en el método RegisterTask sobrescribirán las credenciales en la entidad de seguridad.
Puede especificar una cuenta de usuario o un grupo al registrar una tarea o especificar el principio de una tarea. El contexto de seguridad de la cuenta de usuario o grupo se usa para el contexto de seguridad de la tarea. En estos métodos y propiedades, también se define el tipo de inicio de sesión. El tipo de inicio de sesión se define mediante una de las constantes de la enumeración TASK_LOGON_TYPE .
Las tareas registradas con la marca de TASK_LOGON_PASSWORD o TASK_LOGON_S4U solo se iniciarán si el usuario especificado tiene habilitado el inicio de sesión como privilegio de Batch. Los administradores y los usuarios del grupo Operadores de copia de seguridad tienen este privilegio habilitado de forma predeterminada.
Cuando se llama al método ITaskService::Connect (TaskService.Connect para scripting), cualquier llamada de método subsiguiente al servicio Programador de tareas usará las credenciales que se pasaron al método Connect . Esto es importante tener en cuenta al registrar tareas con un tipo de inicio de sesión interactivo. Al registrar una tarea con el tipo de inicio de sesión igual a TASK_LOGON_INTERACTIVE_TOKEN y la tarea no tiene credenciales especificadas en la propiedad Principal de la definición de tarea, especificada en los parámetros para RegisterTaskDefinition o especificada en el XML que se pasa a RegisterTask, la tarea se registrará con las credenciales del usuario que llamó al método Connect .
Seguridad de Control de cuentas de usuario (UAC) para tareas
El Control de cuentas de usuario (UAC) permite a los usuarios ejercer funciones generales, como ejecutar programas y guardar y modificar datos sin exponer privilegios administrativos. De forma predeterminada, una tarea se ejecuta con privilegios de bajo nivel cuando UAC está activado. Las tareas pueden especificar que se ejecutarán con privilegios elevados o privilegios bajos estableciendo un nivel de privilegios desde la enumeración TASK_RUNLEVEL_TYPE para la propiedad RunLevel de IPrincipal (Principal.RunLevel para scripting). El valor de la propiedad RunLevel determina el nivel de privilegio en el que se ejecutarán las acciones de una tarea. Si las acciones de una tarea deben tener privilegios elevados para ejecutarse, debe establecer la propiedad RunLevel en TASK_RUNLEVEL_HIGHEST. Si una tarea está registrada mediante el grupo Administradores para el contexto de seguridad de la tarea, también debe establecer la propiedad RunLevel en TASK_RUNLEVEL_HIGHEST si desea ejecutar la tarea. Si una tarea se registra con la cuenta Builtin\Administrator o las cuentas de sistema local o servicio local, se omitirá la propiedad RunLevel . El valor de la propiedad también se omitirá si el control de cuentas de usuario (UAC) está desactivado. El valor de la propiedad RunLevel no afecta a los permisos necesarios para ejecutar o eliminar una tarea.
Nota:
Después de actualizar un sistema operativo de Windows XP a Windows Vista, las tareas registradas con la cuenta Builtin\Administrator en Windows XP tendrán la propiedad RunLevel establecida en TASK_RUNLEVEL_LUA. Esto puede provocar un error en algunas tareas. Puede actualizar esta propiedad manualmente para asegurarse de que se ejecutarán todas las tareas.
Desde un proceso de privilegios bajos, no puede registrar una tarea con la propiedad RunLevel igual a TASK_RUNLEVEL_HIGHEST, pero puede registrar una tarea con la propiedad RunLevel igual a TASK_RUNLEVEL_LUA. Las acciones de tarea se ejecutarán con pocos privilegios. No puede registrar la tarea como Builtin/Administrator, Local System o para un grupo.
Desde un proceso de privilegios elevados, puede registrar una tarea con la propiedad RunLevel igual a TASK_RUNLEVEL_HIGHEST o TASK_RUNLEVEL_LUA. La tarea se ejecutará con un nivel de privilegio decidido por la propiedad RunLevel a menos que use la cuenta de administrador, en cuyo caso la tarea se ejecuta con privilegios elevados.
Desde un proceso con privilegios elevados, puede registrar una tarea del Programador de tareas 1.0. El servicio Programador de tareas establecerá el nivel de ejecución de la tarea en TASK_RUNLEVEL_HIGHEST y la tarea se ejecutará con privilegios elevados.
Desde un proceso con pocos privilegios, también puede registrar una tarea del Programador de tareas 1.0. El servicio Programador de tareas establecerá el nivel de ejecución de la tarea en TASK_RUNLEVEL_LUA y la tarea se ejecutará con pocos privilegios. Si esta tarea se actualiza desde un proceso con privilegios elevados, el nivel de ejecución de la tarea permanecerá TASK_RUNLEVEL_LUA.
Seguridad para registrar tareas
Al registrar una tarea desde una cuenta que sea miembro del grupo Administradores, solo tiene que especificar una contraseña al registrar la tarea en las situaciones siguientes:
- Si registra la tarea para ejecutarse en el contexto de seguridad de la cuenta o en una cuenta de usuario diferente y usa la marca TASK_LOGON_PASSWORD en el método RegisterTask o RegisterTaskDefinition .
- Si registra la tarea para ejecutarse en el contexto de seguridad de una cuenta de usuario diferente y usa la marca TASK_LOGON_S4U en el método RegisterTask o RegisterTaskDefinition .
No puede usar un grupo de usuarios como contexto de seguridad de una tarea al registrar la tarea mediante la marca TASK_LOGON_S4U o la marca TASK_LOGON_PASSWORD en el método RegisterTask o RegisterTaskDefinition .
Al registrar una tarea desde una cuenta de usuario que no sea miembro del grupo Administradores, no es necesario especificar una contraseña al registrar la tarea si registra la tarea para ejecutarse en el contexto de seguridad de la cuenta y usa el tipo de inicio de sesión interactivo o S4U. De lo contrario, debe especificar una contraseña al registrar la tarea. Además, no puede registrar la tarea mediante la cuenta de servicio local o mediante un grupo para el contexto de seguridad de la tarea.
Seguridad para leer, actualizar, eliminar y ejecutar tareas
De forma predeterminada, un usuario que crea una tarea puede leer, actualizar, eliminar y ejecutar la tarea. Un usuario debe tener permiso de escritura de archivos en un archivo de tareas para actualizar una tarea, permiso de lectura de archivos en un archivo de tareas para leer una tarea, eliminar permiso en un archivo de tareas para eliminar una tarea y el permiso de ejecución de archivos en una tarea para ejecutar una tarea mediante los métodos IRegisteredTask::Run o RunEx (RegisteredTask.Run y RunEx para scripting). Los miembros del grupo Administradores o de la cuenta SYSTEM pueden leer, actualizar, eliminar y ejecutar cualquier tarea. Los miembros del grupo Usuarios, la cuenta LocalService y la cuenta NetworkService solo pueden leer, actualizar, eliminar y ejecutar las tareas que han creado. Este comportamiento predeterminado se cambia cuando se cambia la DACL del archivo de tareas, en cuyo caso la DACL define qué usuarios tienen permiso de escritura, lectura, ejecución y eliminación de archivos. Para establecer permisos para un archivo de tareas, use el método IRegisteredTask.SetSecurityDescriptor (RegisteredTask.SetSecurityDescriptor para scripting) o establezca el descriptor de seguridad al registrar la tarea mediante los métodos RegisterTask o RegisterTaskDefinition .
Un usuario debe tener permiso WriteDAC además de los permisos de lectura y escritura para actualizar una tarea si la actualización de la tarea requiere un cambio en la DACL de la tarea.
Temas relacionados