Contextes de sécurité pour les tâches
Les tâches sont inscrites et exécutées dans un contexte de sécurité spécifique. Les utilisateurs peuvent créer des applications qui inscrivent, mettent à jour, suppriment ou exécutent correctement des tâches, mais l’utilisateur doit fournir les informations d’identification appropriées lorsqu’une tâche est inscrite et l’application doit s’exécuter dans un processus avec les privilèges appropriés.
Spécification des informations d’identification
Vous pouvez spécifier le contexte de sécurité d’une tâche en spécifiant les informations d’identification dans les méthodes ITaskFolder::RegisterTask ou ITaskFolder::RegisterTaskDefinition (TaskFolder.RegisterTask ou TaskFolder.RegisterTaskDefinition pour l’écriture de scripts) ou en affectant un principal à la propriété principal de ITaskDefinition (TaskDefinition.Principal pour les scripts). Si un principal est créé pour une définition de tâche, puis que la définition de tâche est inscrite à l’aide de la méthode RegisterTaskDefinition avec différentes informations d’identification spécifiées dans les paramètres de méthode, les informations d’identification spécifiées dans la méthode RegisterTaskDefinition remplacent les informations d’identification dans le principal. Si un principal est créé pour une définition de tâche à l’aide de XML, puis que le code XML de la tâche est enregistré à l’aide de la méthode RegisterTask avec des informations d’identification différentes spécifiées dans les paramètres de méthode, les informations d’identification spécifiées dans la méthode RegisterTask remplacent les informations d’identification dans le principal.
Vous spécifiez un compte d’utilisateur ou un groupe lors de l’inscription d’une tâche ou de la spécification du principe d’une tâche. Le contexte de sécurité du compte d’utilisateur ou du groupe est utilisé pour le contexte de sécurité de la tâche. Dans ces méthodes et propriétés, vous définissez également le type d’ouverture de session. Le type d’ouverture de session est défini par l’une des constantes de l’énumération TASK_LOGON_TYPE .
Les tâches inscrites avec l’indicateur TASK_LOGON_PASSWORD ou TASK_LOGON_S4U sont lancées uniquement si le privilège Ouvrir une session en tant que lot est activé pour l’utilisateur spécifié. Ce privilège est activé par défaut pour les administrateurs et les opérateurs de sauvegarde.
Lorsque vous appelez la méthode ITaskService::Connect (TaskService.Connect pour l’écriture de scripts), tous les appels de méthode suivants au service Planificateur de tâches utilisent les informations d’identification qui ont été passées à la méthode Connect . Cela est important à prendre en compte lors de l’inscription de tâches avec un type d’ouverture de session interactive. Lorsque vous inscrivez une tâche avec le type d’ouverture de session égal à TASK_LOGON_INTERACTIVE_TOKEN et que la tâche n’a pas d’informations d’identification spécifiées dans la propriété Principal de la définition de tâche, spécifiées dans les paramètres de RegisterTaskDefinition ou spécifiées dans le code XML transmis à RegisterTask, la tâche est inscrite avec les informations d’identification de l’utilisateur qui a appelé la méthode Connect .
Sécurité du contrôle de compte d’utilisateur (UAC) pour les tâches
Le contrôle de compte d’utilisateur (UAC) permet aux utilisateurs d’exercer des fonctionnalités générales telles que l’exécution de programmes et l’enregistrement et la modification de données sans exposer les privilèges d’administration. Par défaut, une tâche s’exécute avec des privilèges de bas niveau lorsque le contrôle D’utilisateur est activé. Les tâches peuvent spécifier qu’elles s’exécutent avec des privilèges élevés ou des privilèges faibles en définissant un niveau de privilège à partir de l’énumération TASK_RUNLEVEL_TYPE pour la propriété RunLevel de IPrincipal (Principal.RunLevel pour les scripts). La valeur de la propriété RunLevel détermine le niveau de privilège auquel les actions d’une tâche seront exécutées. Si les actions d’une tâche doivent disposer de privilèges élevés pour s’exécuter, vous devez définir la propriété RunLevelsur TASK_RUNLEVEL_HIGHEST. Si une tâche est inscrite à l’aide du groupe Administrateurs pour le contexte de sécurité de la tâche, vous devez également définir la propriété RunLevelsur TASK_RUNLEVEL_HIGHEST si vous souhaitez exécuter la tâche. Si une tâche est inscrite à l’aide du compte Builtin\Administrator ou des comptes Système local ou Service local, la propriété RunLevel est ignorée. La valeur de la propriété est également ignorée si le contrôle de compte d’utilisateur (UAC) est désactivé. La valeur de la propriété RunLevel n’affecte pas les autorisations nécessaires pour exécuter ou supprimer une tâche.
Notes
Après la mise à niveau d’un système d’exploitation de Windows XP vers Windows Vista, la propriété RunLevel est définie sur TASK_RUNLEVEL_LUA pour les tâches inscrites à l’aide du compte Builtin\Administrator sur Windows XP. Cela peut entraîner l’échec de certaines tâches. Vous pouvez mettre à jour cette propriété manuellement pour vous assurer que toutes les tâches s’exécuteront.
À partir d’un processus à faibles privilèges, vous ne pouvez pas inscrire une tâche avec la propriété RunLevel égale à TASK_RUNLEVEL_HIGHEST, mais vous pouvez inscrire une tâche avec la propriété RunLevel égale à TASK_RUNLEVEL_LUA. Les actions de tâche seront exécutées avec des privilèges faibles. Vous n’êtes pas autorisé à inscrire la tâche en tant que Intégré/Administrateur, Système local ou pour un groupe.
À partir d’un processus avec privilèges élevés, vous pouvez inscrire une tâche avec la propriété RunLevel égale à TASK_RUNLEVEL_HIGHEST ou TASK_RUNLEVEL_LUA. La tâche sera exécutée avec un niveau de privilège déterminé par la propriété RunLevel , sauf si vous utilisez le compte Administrateur, auquel cas la tâche est exécutée avec des privilèges élevés.
À partir d’un processus avec élévation de privilèges, vous pouvez inscrire une tâche Du planificateur de tâches 1.0. Le service Planificateur de tâches définit le niveau d’exécution de la tâche sur TASK_RUNLEVEL_HIGHEST et la tâche s’exécute avec des privilèges élevés.
À partir d’un processus à faibles privilèges, vous pouvez également inscrire une tâche Du planificateur de tâches 1.0. Le service Planificateur de tâches définit le niveau d’exécution de la tâche sur TASK_RUNLEVEL_LUA, et la tâche s’exécute avec des privilèges faibles. Si cette tâche est mise à jour à partir d’un processus avec élévation de privilèges, le niveau d’exécution de la tâche reste TASK_RUNLEVEL_LUA.
Sécurité pour l’inscription des tâches
Lorsque vous inscrivez une tâche à partir d’un compte membre du groupe Administrateurs, vous devez uniquement spécifier un mot de passe lors de l’inscription de la tâche dans les situations suivantes :
- Si vous inscrivez la tâche à exécuter sous le contexte de sécurité de votre compte ou d’un autre compte d’utilisateur et que vous utilisez l’indicateur TASK_LOGON_PASSWORD dans la méthode RegisterTask ou RegisterTaskDefinition .
- Si vous inscrivez la tâche à exécuter sous le contexte de sécurité d’un compte d’utilisateur différent et que vous utilisez l’indicateur TASK_LOGON_S4U dans la méthode RegisterTask ou RegisterTaskDefinition .
Vous ne pouvez pas utiliser un groupe d’utilisateurs comme contexte de sécurité d’une tâche lorsque vous inscrivez la tâche à l’aide de l’indicateur TASK_LOGON_S4U ou de l’indicateur TASK_LOGON_PASSWORD dans la méthode RegisterTask ou RegisterTaskDefinition .
Lorsque vous inscrivez une tâche à partir d’un compte d’utilisateur qui n’est pas membre du groupe Administrateurs, vous n’avez pas besoin de spécifier un mot de passe lors de l’inscription de la tâche si vous inscrivez la tâche pour s’exécuter dans le contexte de sécurité de votre compte et que vous utilisez le type S4U ou interactif d’ouverture de session. Sinon, vous devez spécifier un mot de passe lors de l’inscription de la tâche. En outre, vous ne pouvez pas inscrire la tâche à l’aide du compte de service local ou d’un groupe pour le contexte de sécurité de la tâche.
Sécurité pour la lecture, la mise à jour, la suppression et l’exécution des tâches
Par défaut, un utilisateur qui crée une tâche peut lire, mettre à jour, supprimer et exécuter la tâche. Un utilisateur doit avoir l’autorisation d’écriture de fichier sur un fichier de tâche pour mettre à jour une tâche, l’autorisation de lecture de fichier sur un fichier de tâche pour lire une tâche, l’autorisation de suppression sur un fichier de tâche pour supprimer une tâche et l’autorisation d’exécution de fichier sur une tâche à l’aide des méthodes IRegisteredTask::Run ou RunEx (RegisteredTask.Run et RunEx pour les scripts). Les membres du groupe Administrateurs ou du compte SYSTEM peuvent lire, mettre à jour, supprimer et exécuter des tâches. Les membres du groupe Utilisateurs, du compte LocalService et du compte NetworkService peuvent uniquement lire, mettre à jour, supprimer et exécuter les tâches qu’ils ont créées. Ce comportement par défaut est modifié lorsque la liste DACL du fichier de tâche est modifiée, auquel cas la liste DACL définit les utilisateurs disposant des autorisations d’écriture, de lecture, d’exécution et de suppression de fichier. Pour définir des autorisations pour un fichier de tâches, utilisez la méthode IRegisteredTask.SetSecurityDescriptor (RegisteredTask.SetSecurityDescriptor pour les scripts) ou définissez le descripteur de sécurité lorsque vous inscrivez la tâche à l’aide des méthodes RegisterTask ou RegisterTaskDefinition .
Un utilisateur doit disposer de l’autorisation WriteDAC en plus des autorisations en lecture/écriture pour mettre à jour une tâche si la mise à jour de la tâche nécessite une modification de la liste DACL pour la tâche.
Rubriques connexes