Перейти к содержанию
Обсудить задачу →
Статьи и инструкции

Sudo для Windows 11: включение, режимы работы и безопасные альтернативы

Sudo for Windows в Windows 11 24H2: как включить, выбрать forceNewWindow, disableInput или normal, учесть UAC, WSL, аудит и возврат.
Sudo для Windows 11: включение, режимы работы и безопасные альтернативы — техническая иллюстрация

Sudo for Windows — встроенный способ запустить команду с повышенными правами из обычной консоли. Он доступен в Windows 11 версии 24H2 и новее. Это не Linux sudo с файлом sudoers: авторизация по-прежнему проходит через UAC, а режимы определяют, как повышенный процесс связан с текущим окном.

Sudo для Windows 11: проверка версии, включение, режимы, UAC и возврат
Порядок проверки и настройки. Команды, ограничения и диагностика приведены в статье.

1. Проверьте версию и политику организации

Сначала убедитесь, что используется Windows 11 24H2 или новее и функция разрешена политикой безопасности. На управляемом компьютере изменение может блокироваться MDM или GPO. Не загружайте сторонний файл sudo.exe с неофициального сайта.

Get-ComputerInfo | Select-Object WindowsProductName,WindowsVersion,OsBuildNumber
Get-Command sudo.exe -ErrorAction SilentlyContinue

На Windows 10 встроенного Sudo for Windows нет; используйте штатные альтернативы из шага 7.

Проверка, что запускается именно встроенный sudo.exe

Имена команд могут перекрываться сторонним gsudo, функцией PowerShell или файлом из PATH. Сначала определите фактическую программу. Сведения DisplayVersion и CurrentBuild удобнее для определения поколения Windows, чем историческое поле WindowsVersion, которое может возвращать неожиданное значение.

Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' |
    Select-Object ProductName,DisplayVersion,CurrentBuild,UBR
Get-Command sudo.exe -All | Select-Object CommandType,Name,Source
$WindowsSudo = Join-Path $env:WINDIR 'System32\sudo.exe'
Test-Path -LiteralPath $WindowsSudo
Get-AuthenticodeSignature -FilePath $WindowsSudo |
    Select-Object Status,@{Name='Signer';Expression={$_.SignerCertificate.Subject}}

Если файл отсутствует, сначала подтвердите версию и компоненты Windows, не скачивайте exe в System32 вручную. Если используется 32-битная оболочка на 64-битной системе, учитывайте файловую редирекцию System32; для этого руководства откройте штатную 64-битную PowerShell. Подпись Valid подтверждает проверку подписи файла, но не даёт право выполнить любой переданный скрипт.

2. Включите Sudo for Windows

Функцию можно включить в «Параметры → Система → Дополнительно → Включить sudo». Из повышенной консоли доступна команда конфигурации. В организации сначала примените настройку на пилотной машине.

sudo config --enable forceNewWindow
sudo config

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

Начальная настройка и корректное отключение

Откройте повышенную консоль через меню «Запуск от имени администратора», подтвердите UAC и выполните полный путь встроенной утилиты. В текущем интерфейсе настройки Microsoft указывает System → Advanced; в разных сборках раздел может называться «Для разработчиков». Если настройка скрыта или блокируется политикой, обратитесь к владельцу управления устройством, а не изменяйте policy registry для обхода.

$WindowsSudo = Join-Path $env:WINDIR 'System32\sudo.exe'
& $WindowsSudo config --enable forceNewWindow
& $WindowsSudo config

После настройки закройте повышенную консоль и начните тест в обычной. Команда конфигурации меняет машинное состояние: в рабочей организации сначала нужен выбранный пилот и зафиксированное прежнее значение. Для возврата в повышенной консоли используется sudo.exe config --enable disable, подтверждённое парсером исходного кода Microsoft. Не путайте это с несуществующим универсальным флагом config --disable; сверяйте локальную справку установленной версии.

3. Разберитесь в трёх режимах

forceNewWindow открывает повышенную команду в новом окне и лучше изолирует её от текущего процесса. disableInput запускает в текущем окне, но закрывает повышенному процессу стандартный ввод. normal сохраняет ввод и удобнее для интерактивных программ, однако имеет наиболее широкую поверхность взаимодействия.

3. Разберитесь в трёх режимах
РежимПоведениеТипичный выбор
forceNewWindowновое повышенное окнобезопасный базовый режим
disableInputто же окно, stdin отключённеинтерактивная команда
normalто же окно с вводомтолько при понятном риске

Три режима и тесты отказа

В forceNewWindow повышенный процесс имеет своё окно. Это удобный исходный выбор для пилота и лучше отделяет взаимодействие с исходной консолью. В disableInput процесс работает в текущем окне с закрытым stdin: утилита, которая задаёт вопросы, может получить EOF и завершиться. В normal интерактивный ввод доступен, но обычные процессы текущей консоли могут влиять на повышенный процесс через установленное взаимодействие. Это значимая граница доверия, а не косметическая разница интерфейса.

Проверка пилота должна включать отказ в UAC. Отказ должен завершить административную операцию, а не переключить скрипт на обходной механизм. Проверьте отсутствие новых процессов с High token после отказа. Для обычного пользователя UAC может запросить отдельные административные credentials согласно политике; sudo не выдаёт автоматически право администратора и не знает собственную базу sudoers.

4. Запускайте точную команду

После UAC-подтверждения повышается указанная команда, а не вся текущая оболочка. Используйте полный путь, когда имя может разрешиться неоднозначно, и проверяйте рабочий каталог.

sudo whoami /groups
sudo cmd /c "netstat -abno"
sudo powershell -NoProfile -Command "Get-Process -IncludeUserName"

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

Как проверить повышенный токен без изменения системы

Административный токен содержит High Mandatory Level, обычная консоль пользователя — Medium. Для проверки запустите сначала whoami в обычной консоли, затем ту же команду через sudo. В режиме нового окна ответ может исчезнуть при завершении; для наблюдения допускается отдельный интерактивный cmd, который после чтения закрывают.

whoami.exe /groups
& "$env:WINDIR\System32\sudo.exe" "$env:WINDIR\System32\cmd.exe" /k whoami /groups

Найдите SID integrity level: S-1-16-8192 означает Medium, S-1-16-12288 — High. Локализация текста отличается, поэтому SID удобнее для сравнения. Вторая команда намеренно открывает повышенную shell, а не только разовую программу; после проверки закройте её через exit. Повторите whoami в исходном окне: оно должно остаться Medium. Если тест выполнен уже из повышенной исходной консоли, сравнение не подтверждает нужный сценарий.

Почему редиректы и pipeline требуют отдельного понимания

В выражении sudo.exe program > file файл вывода обычно открывает текущая неповышенная оболочка. Права program не повышают право shell создать файл в защищённом каталоге. Аналогично pipeline может выполняться частично обычным и частично повышенным процессом. Не переносите команды Linux sudo с pipe в PowerShell без проверки, какой процесс читает, пишет и обрабатывает аргументы.

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

Аргументная строка вложенной оболочки также имеет правила кавычек. Полные пути с пробелами передают отдельным аргументом, а не объединяют в одну строку с динамическими данными. Не собирайте elevated -Command конкатенацией пользовательского ввода. Если нужен скрипт, выбирайте -File с доверенным полным путём и проверяйте разрешённые параметры самого скрипта.

5. Учитывайте границу безопасности текущего каталога

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

Get-Location
Get-AuthenticodeSignature .\maintenance.ps1
Get-Acl .\maintenance.ps1 | Format-List Owner,AccessToString
sudo powershell -NoProfile -File C:\AdminTools\maintenance.ps1

Храните административные скрипты в каталоге с ограниченной записью.

Доверенная административная программа и каталог

Цифровая подпись скрипта полезна, но дополнительно проверяйте права записи на каталог и зависимости. Подписанный основной файл может загрузить изменяемый модуль или DLL. Каталог C:\AdminTools в примере должен быть подготовлен владельцем инфраструктуры так, чтобы рядовые пользователи не могли менять скрипты и зависимости. Не копируйте туда «последний вариант» из Downloads прямо перед повышением.

$Tool = 'C:\AdminTools\maintenance.ps1'
Get-Item -LiteralPath $Tool | Select-Object FullName,Length,LastWriteTime
Get-FileHash -LiteralPath $Tool -Algorithm SHA256
Get-AuthenticodeSignature -FilePath $Tool | Select-Object Status
Get-Acl -LiteralPath $Tool | Format-List Owner,AccessToString
Get-Acl -LiteralPath (Split-Path $Tool) | Format-List Owner,AccessToString

Сопоставьте hash с утверждённой версией, подпись с доверенным издателем, ACL с правилами администрирования. Не применяйте ExecutionPolicy Bypass как стандартный пункт запуска. Execution policy не является самостоятельной границей безопасности, но её обход может нарушить принятый регламент. Смена режима sudo не исправит неверную подпись, изменяемую зависимость или запрещённую операцию.

6. Не передавайте секреты в аргументах

Аргументы команд могут попасть в историю оболочки, логи и диагностику процессов. Не используйте параметры с открытым паролем. Запрашивайте секрет штатным защищённым диалогом или получайте его из корпоративного хранилища секретов с минимальным сроком жизни.

Sudo for Windows не выдаёт пользователю пароль локального администратора и не заменяет Windows LAPS. Оно лишь создаёт повышенный процесс после одобрения UAC.

7. Выберите альтернативу для старых Windows

Start-Process -Verb RunAs запускает программу через UAC. runas запускает процесс от другой учётной записи, но не является полным аналогом повышения и не должен использоваться с сохранённым паролем. Для удалённого администрирования применяйте PowerShell Remoting/JEA и отдельную модель прав.

Start-Process powershell.exe -Verb RunAs -ArgumentList '-NoProfile'
runas /user:EXAMPLE\admin "cmd.exe"

Не отключайте UAC ради совместимости со старым скриптом.

Когда нужен другой механизм

Для одной локальной программы подходит Start-Process -Verb RunAs. Для удалённого ограниченного администрирования используют WinRM/JEA с заданными разрешёнными командами; локальный sudo не становится системой делегации всему helpdesk. Для Linux внутри WSL действуют Linux sudo, Unix UID и свой набор политик; повышение там не означает автоматический High token у Windows-процесса. Сторонний gsudo рассматривают как отдельный продукт с отдельной установкой, обновлением и моделью риска.

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

8. Не путайте Windows Sudo и sudo в WSL

В WSL команда sudo повышает права Linux-пользователя внутри дистрибутива. Встроенный sudo.exe повышает Windows-процесс через UAC. Они имеют разные учётные записи, журналы, файловые права и область действия.

wsl.exe -e sh -lc 'id; command -v sudo'
where.exe sudo

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

9. Проверьте аудит и пользовательский сценарий

На пилоте выполните разрешённую административную операцию, отказ от UAC, запуск в каждом необходимом режиме и повторный вход обычного пользователя. Проверьте журналы Windows и EDR. Успех означает, что пользователь выполняет только нужную задачу без постоянной административной сессии.

  • UAC появляется ожидаемо;
  • команда действительно имеет повышенный токен;
  • обычная консоль остаётся неповышенной;
  • секреты не попадают в историю;
  • защитные средства видят запуск.

Аудит процессов и отсутствие секретов в отчёте

По принятой политике Windows/EDR события создания процессов связывают обычный sudo, UAC/elevation и запущенную программу. Security Event 4688 появляется только при соответствующем настроенном аудите; поле командной строки зависит от отдельной политики. Отсутствие события в ненастроенном журнале не подтверждает скрытый запуск.

Get-WinEvent -FilterHashtable @{LogName='Security';Id=4688;StartTime=(Get-Date).AddMinutes(-10)} -MaxEvents 50 |
    Select-Object TimeCreated,Id,Message

Чтение Security требует соответствующих прав. Журнал может содержать аргументы других программ, поэтому не отправляйте полный вывод в общий тикет. Для приёмки достаточно времени, имени процесса, операторского контекста, результата и связи с утверждённой задачей. Пароли не записывают в -ArgumentList, команды cmdkey, BAT или transcript. Windows LAPS управляет секретом локального администратора отдельно; sudo отвечает за запуск процесса, а не ротацию пароля.

10. Измените режим или отключите функцию

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

sudo config --enable disableInput
sudo config --enable disable

Источники: Microsoft Learn — Sudo for Windows, Microsoft Learn — команды и режимы Sudo, Microsoft Learn — Start-Process.

Дополнительная документация: Microsoft sudo: парсер команд, Microsoft: событие 4688.

Нужно сопровождение Windows-инфраструктуры?

Управляемая поддержка включает учёт конфигурации, права, обновления, резервное копирование и контроль изменений.