Windows: повышенная командная строка с обычной средой пользователя

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

Мне нужно запустить скрипт, который требует прав администратора (потому что он записывает некоторые значения в HKLM и удаляет файлы в системных папках), но также требует взаимодействия с HKCU.

Скрипт должен выполняться от имени обычного пользователя; у меня также есть учетная запись администратора на машине.

Если я запущу командную строку с повышенными привилегиями, Windows попросит меня предоставить учетные данные администратора для выполнения операции.

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

Существует ли способ запустить командную строку с повышенными привилегиями от имени обычного пользователя, предоставляя учетные данные администратора, но сохраняя окружение обычного пользователя?

Спасибо

Насколько мне известно, нет. Повышение прав через UAC никогда не предоставляет привилегий – оно лишь позволяет учетной записи восстановить свои “полные” привилегии, которые она имела бы без UAC. Таким образом, если пользователь не является администратором, то он не администратор, и для этого процесса становится необходимым переключение на другого пользователя.

Вашим самым простым вариантом может быть разделение скрипта на две части и выполнение не повышенной части изменениями HKCU – или, если это абсолютно необходимо, передача вашего SID повышенной части, чтобы она могла получить доступ к вашему HKCU через HKEY_USERS\$sid\ вместо этого. (В зависимости от языка, на котором написан скрипт с повышенными привилегиями, он может использовать API терминальных служб для определения имени пользователя и SID вошедшего в систему пользователя.)

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

Запуск командной строки с повышенными привилегиями из-под обычного пользователя в Windows

Вопрос о запуске сценария с повышенными привилегиями, сохраняя при этом окружение обычного пользователя, является распространённой задачей для системных администраторов и технических специалистов. Рассмотрим, как можно решить данную проблему без необходимости переключения на административный аккаунт, сохраняя доступ к реестру (HKCU) и другим ресурсам, специфичным для текущего пользователя.

Проблема

Ваша задача состоит в том, чтобы запустить сценарий, который требует административных прав для внесения изменений в раздел реестра HKEY_LOCAL_MACHINE (HKLM) и удаления файлов в системных папках, при этом сценарий также должен взаимодействовать с HKEY_CURRENT_USER (HKCU). Однако, если вы запускаете командную строку с повышенными привилегиями, используя учетные данные администратора, она открывается в контексте администратора, и у вас отсутствует доступ к ресурсам конкретного обычного пользователя.

Решение

Хотя Windows не поддерживает прямой запуск командной строки с повышенными правами из-под обычного пользователя, существуют несколько стратегий, которые можно использовать для решения данной задачи:

  1. Разделите сценарий на две части:

    • Создайте два отдельных скрипта: один для операций, требующих административных прав (взаимодействие с HKLM), и второй — для операций, связанных с HKCU.
    • Запускайте скрипт, работающий с HKCU, от имени обычного пользователя. Например:
      @echo off
      rem Это скрипт для HKCU
      reg add "HKCU\Software\YourApp" /v "YourValue" /t REG_SZ /d "SomeData" /f
      del "C:\Path\To\YourFile" /Q
  2. Использовать метод доступа по SID:

    • Вы можете передать идентификатор безопасности (SID) текущего пользователя в повышенный процесс и получить доступ к реестру пользователя из другого контекста. Сделать это можно с помощью команд, подобных:
      $sid = (Get-LocalUser -Name "UserName").SID
      reg add "HKEY_USERS\$sid\Software\YourApp" /v "YourValue" ...
    • Переменная $sid представляет собой SID для конкретного пользователя, а команда reg add позволяет вносить необходимые изменения.
  3. Используйте PowerShell:

    • Если у вас есть доступ к PowerShell, вы можете перенастроить его для выполнения сценариев под различными учетными записями, сохраняя доступ к окружению текущего пользователя. С помощью PowerShell возможно использовать Invoke-Command для выполнения команд с повышенными правами, но в контексте текущего пользователя.
  4. Пользовательский интерфейс:

    • Если ваши пользователи имеют разрешение на выполнение скриптов, вы можете создать небольшой GUI-приложение (например, на PowerShell или C#), где пользователь будет вызывать необходимые функции с административными правами.

Заключение

Хотя Windows не разрешает запускать Elevated Command Prompt в контексте обычного пользователя, применяя описанные выше методы, вы сможете обойти это ограничение и успешно выполнять необходимые операции. Разделение сценарием на части или использование SID может существенно упростить задачу и повысить безопасность работы с системными ресурсами.

Если у вас есть дополнительные вопросы или вам необходимо более детальное руководство, пожалуйста, не стесняйтесь задавать их.

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

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