6

Моя цель состоит в том, чтобы ограниченный пользователь мог запускать скрипт netsh, требующий прав администратора:

netsh wlan stop hostednetwork
netsh wlan start hostednetwork

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

Я пытался создать ту же задачу из ограниченного пользовательского планировщика задач - не получилось, он сказал, что у пользователя нет прав на создание задачи.

Пробовал schtasks.exe от пользователя с ограниченными правами, он также не показывает задачу, которую я хочу запустить.

Есть ли способ поделиться заданием, которое я создал из учетной записи администратора, с ограниченным пользователем, чтобы он мог запускать его по требованию? Или дать ему привилегии, чтобы создать задачу сам?

2 ответа2

16

Перейдите в C:\Windows\System32\Tasks, найдите соответствующую задачу и назначьте права "чтение и выполнение" пользователю, которому вы хотите иметь доступ к нему. Обязательно присвойте "только текущий объект". Тогда задача будет видимой и запускаемой от ограниченного пользователя, и она будет работать, если вы сохранили в ней свои учетные данные и проверили «запускать, вошел ли пользователь в систему или нет».

2

Да, это ужасная проблема. Выбранный ответ больше не работает. Я использую Event Log как обходной путь:

  1. Зарегистрируйте триггер "по событию" для своей задачи, например, "Приложение", "Приложение", 30204 (ваш магический номер для этой задачи)

  2. Записать событие с этим идентификатором. Чтобы сделать это из командной строки / пакета, я написал фиктивное 3-строчное консольное приложение .Net.

    using (var eventLog = new EventLog("Application"))
    {
        eventLog.Source = "Application";
        eventLog.WriteEntry("EventLogTriggeer", EventLogEntryType.Information, int.Parse(args[0]));
    }

В моем случае я решил обеспечить безопасность для автоматизированных развертываний в промежуточной среде. GitHub отправляет POST-запрос в мой сервер node.js, работающий под IIS AppPool Identity с прямым доступом к папке. Он проверяет хэш-подпись и выполняет:

// delegate to priviledged task
exec('%SystemDrive%\\apps\\EventLogTrigger 30204', (err, stdout, stderr)=> /* ... */);

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

C:\inetpub\ta\autodeploy.cmd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .