Как изменить разрешения для запланированных задач в Windows 10?

Вопрос или проблема

У меня есть запланированная задача, которую я хочу запускать/триггерить как обычный пользователь без административных привилегий на локальном компьютере. Задача была создана с использованием учетной записи NT AUTHORITY\SYSTEM

Когда я выполняю задачу с помощью PowerShell, я получаю сообщение Start-ScheduledTask : Access is denied

Что я сделал до сих пор

Установил Allow для List folder contents и Read в
C:\Windows\System32\Tasks

Установил Allow для Read & execute и Read в
C:\Windows\System32\Tasks\MyTask

Как я могу изменить разрешения для Authenticated Users, чтобы иметь возможность запускать/триггерить MyTask?

Существует способ, который позволяет выполнить то, что требовалось в исходном вопросе: изменить разрешения запланированной задачи, чтобы позволить “аутентифицированным пользователям” запускать/триггерить эту запланированную задачу.

Проблема с разрешениями для запланированных задач относится к системам Windows OS 2016 / Windows 10 и более новым, насколько я могу судить. Ранее аутентифицированные пользователи могли запускать запланированные задачи, получая соответствующие разрешения на папку C:\Windows\System32\Tasks.

Сегодня эту проблему можно решить, изменив ACL для конкретной запланированной задачи. Эти ACL хранятся в реестре. Конечно, есть разные способы изменить эти ACL. Этот конкретный метод использует PowerShell для предоставления возможности увидеть и выполнить указанную запланированную задачу для аутентифицированных пользователей. (Вы также можете настроить его так, чтобы он работал для определенного SID пользователя, однако это другая задача.)

Я протестировал это у себя, и это сработало.

Запустите следующий код в PowerShell – запустите как Администратор, иначе он, скорее всего, не сработает. Убедитесь, что сначала обновили значения $TaskPath и $TaskName так, чтобы они соответствовали запланированной задаче, которую вы нацеливаетесь.

####################################

#ВАЖНО: Запустите PowerShell как Администратор

####################################

$TaskName = "(имя запланированной задачи, которую вы хотите запустить)"
$TaskPath = "\" #Запланированные задачи на базовом уровне используют этот путь. Любой более глубокий уровень необходимо добавить в путь папки.
$Scheduler = New-Object -ComObject "Schedule.Service"
$Scheduler.Connect()
$GetTask = $Scheduler.GetFolder($TaskPath).GetTask($TaskName)
$GetSecurityDescriptor = $GetTask.GetSecurityDescriptor(0xF)
if ($GetSecurityDescriptor -notmatch 'A;;0x1200a9;;;AU') {
    $GetSecurityDescriptor = $GetSecurityDescriptor + '(A;;GRGX;;;AU)'
    $GetTask.SetSecurityDescriptor($GetSecurityDescriptor, 0)
}

Информация для этого поста была в значительной степени получена из следующего сайта:
https://www.osdeploy.com/blog/2021/scheduled-tasks/task-permissions

Ответ или решение

Теория

В современных операционных системах Windows, таких как Windows 10 и Windows Server 2016, управление разрешениями для запланированных задач стало более сложным, чем в предыдущих версиях. Правильная настройка разрешений для запуска задач пользователями без административных привилегий требует настройки списков управления доступом (ACLs). Это необходимо для предотвращения несанкционированного доступа и повышения уровня безопасности системы.

ACLs для запланированных задач хранятся не в файловой системе, а в реестре Windows. Для изменения этих разрешений часто используется PowerShell, что позволяет детально и точно управлять доступом.

Пример

В данном примере рассматривается задача, которую нужно запускать от имени пользователя без административных привилегий. Сама задача была создана от имени `NT AUTHORITY\SYSTEM`. При попытке запуска через PowerShell возникает ошибка `Start-ScheduledTask : Access is denied`. Это происходит из-за отсутствия нужных разрешений у пользователя.

Применение

Для решения этой задачи необходимо изменить ACLs запланированной задачи. Вот пошаговая инструкция, как это сделать:

  1. Запуск PowerShell от имени администратора: Сначала откройте PowerShell с правами администратора, поскольку выполнение скрипта требует высокой привилегии.

  2. Инициализация объектов PowerShell: Необходимо создать объекты, которые позволят взаимодействовать с задачами. Объявите переменные для имени и пути задачи, которые вы хотите настроить.

  3. Получение задачи: Подключитесь к службе задач и извлеките задачу, для которой нужно изменить разрешения.

  4. Изменение ACLs: Проверьте текущий дескриптор безопасности задачи и добавьте туда права на чтение и выполнение для `Authenticated Users`. Вот пример такого скрипта:

####################################

# ВАЖНО: Запуск PowerShell от имени администратора

####################################

$TaskName = "Имя запланированной задачи"
$TaskPath = "\" # Запланированные задачи на базовом уровне используют этот путь. Для более вложенных задач, укажите полный путь.
$Scheduler = New-Object -ComObject "Schedule.Service"
$Scheduler.Connect()
$GetTask = $Scheduler.GetFolder($TaskPath).GetTask($TaskName)
$GetSecurityDescriptor = $GetTask.GetSecurityDescriptor(0xF)
if ($GetSecurityDescriptor -notmatch 'A;;0x1200a9;;;AU') {
    $GetSecurityDescriptor = $GetSecurityDescriptor + '(A;;GRGX;;;AU)'
    $GetTask.SetSecurityDescriptor($GetSecurityDescriptor, 0)
}

Этот скрипт проверяет наличие необходимых разрешений и, если они отсутствуют, добавляет их.

  1. Проверка изменений: После внесения изменений в ACLs, проверьте работу задачи от имени пользователя без привилегий через интерфейс Windows или командную строку.

  2. Тестирование и отладка: Всегда тестируйте изменения в безопасной среде перед внедрением их в рабочую.

Преимущества данного подхода заключаются в гибкости и возможности тонкой настройки безопасности. Теперь, разрешив запуск задачи, вы не повышаете глобально уровень привилегий для пользователя, а ограничиваете его доступ строго необходимыми функциями.

Таким образом, данное руководство позволяет максимально эффективно и безопасно настроить запуск запланированных задач, не нарушая общей безопасности системы. Это особенно актуально для корпоративных пользователей, где строгая политика безопасности является нормой.

Оцените материал
Добавить комментарий

Капча загружается...