Есть ли команда «sudo» для Windows?

Я всегда работаю над учетной записью, отличной от администратора, на моем компьютере под управлением Windows. Иногда мне нужно установить программы, требующие доступа администратора. Поскольку в основном я использую командную строку Windows, есть ли команда Windows для эскалации привилегий, аналогичная команде терминала Linux sudo?

412 голосов | спросил ukanth 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 17 Sep 2009 13:24:35 +0400 2009, 13:24:35

14 ответов


253

Команда runas .

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

Просто запустите:

runas /noprofile /user:Administrator cmd 

для запуска командной оболочки в качестве администратора

ответил Davy Landman 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 17 Sep 2009 13:29:46 +0400 2009, 13:29:46
112

Я обнаружил поднять сегодня, когда "выполняет команду с повышением привилегий UAC. Это полезно для работы внутри командной строки или с пакетными файлами. " Это не то же самое, что sudo, он меняет исполняющего пользователя на Администратора, но его синтаксис намного проще использовать, чем runas, и он может поддерживать текущий каталог, позволяя использовать относительные пути.

Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".

Цель Elevate - не работать или обходить UAC (User Account Control), а работать с ним. Пока UAC включен, имеет , чтобы быть каким-то приглашением в some в процессе. Если вам нужно полностью избавиться от запроса, вы должны отключить UAC .

Устранение болевых точек повышает эскалацию определенного процесса из непривилегированной оболочки, а затем продолжается как обычно. Без этого вам нужно запустить привилегированное командное приглашение с помощью правой кнопкой мыши> «Запуск от имени администратора» , который не может быть легко написан сценарием, прежде чем пытаться выполнить привилегированную команду.

ответил matt wilkie 12 AMpTue, 12 Apr 2011 10:42:00 +040042Tuesday 2011, 10:42:00
66

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

Разница тонкая:

Предположим, у вас есть два пользователя. Боб - обычный пользователь, а Джеймс - администратор.

Если вы входите в систему как Bob и используете «runas james acommand», команда запускается так, как если бы ее запускал Джеймс, поэтому он обращается к пользовательским настройкам Джеймса, и любые изменения пользователя переходят в James My Documents & папок настроек и т. д. Поэтому, если вы устанавливаете приложение, скажем, оно будет установлено как Джеймс, а не как Боб.

Если, с другой стороны, Боб делает «sudo acommand», команда все еще выполняется как Bob, но с повышенными разрешениями - точно так же, как команда sudo для Linux. Чтобы пользователь не мог судиться, вы должны определить группу пользователей sudoers, которая содержит список обычных пользователей, у которых есть разрешение на повышение с помощью sudo. Пользователям по-прежнему необходимо предоставить учетные данные перед повышением.

Иногда разница не важна, иногда это так, и я считаю, что обе команды могут быть полезны.

ответил Simon P Stevens 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 17 Sep 2009 13:28:30 +0400 2009, 13:28:30
39

Вы также можете использовать скрипты Elevation PowerToys .

ответил Quog 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 17 Sep 2009 17:11:39 +0400 2009, 17:11:39
25

Если вы готовы перейти на альтернативные консоли, ConEmu (я автор). Одна из его функций - возможность запускать как увеличенные, так и невыполненные вкладки в одном окне ConEmu. Вкладки могут запускаться с разными учетными данными.

Для удобства пользователя существует пакетный файл csudo.cmd (который может быть легко принят в bash). Прочтите полное описание в вики проекта . Вкратце, когда вы запускаете какую-либо команду из существующей вкладки с невыполнением, например

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

ConEmu запустит dism на новой повышенной консоли /вкладке (с предыдущим приглашением UAC в окне Vista или Login в XP).

По умолчанию csudo запускает новую консоль в расколе (могут быть изменения с помощью редактирования содержимого csudo.cmd).

И, конечно, вы можете переименовать его в sudo.cmd, если вам нравится слово "classic" sudo.

sudo в ConEmu /Windows

ответил Maximus 26 +04002012-10-26T11:52:13+04:00312012bEurope/MoscowFri, 26 Oct 2012 11:52:13 +0400 2012, 11:52:13
23

Быстрый метод:

Три шага для добавления sudo.

  1. Откройте PowerShell.

  2. Скопируйте следующий скрипт (Ctrl + C) и вставьте его в PowerShell (Alt + Space + E + P):

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
  1. Хит Введите .

Он будет постоянно включать команду sudo в PowerShell.

Использование:

sudo <process-name> [param1 [param2 [param3]]]

Примеры:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Длинный метод обучения:

Примечание. Я смешал сценарий из обеих статей, чтобы создать вышеупомянутый скрипт. Скорее вручную вставив скрипт в блокнот, я добавил операторы Out-File для сохранения файлов ps1 и $profile из сценария.

Совет. Если вы не очень любите всплывающие окна UAC (например, я), сохраните следующее в файле * .reg и запустите его:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
ответил vulcan raven 28 PM00000020000002231 2012, 14:36:22
20

Если вы делаете это в Windows, то в дополнение к команде Run As, как упоминалось в нескольких других ответах, есть также способы сделать это с помощью мыши.

Если вы удерживаете клавишу Shift при щелчке правой кнопкой мыши по большинству исполняемых файлов в Windows, вы должны заметить еще несколько дополнительных опций. Один из них - это опция Run As... "(я думаю, что она называется« Run As Administrator »из Vista).

Вы также можете загрузить более продвинутую версию RunAs от Microsoft, называемую ShellRunAs , это улучшает встроенную команду RunAs, как в командной строке, так и в графическом режиме, в том числе позволяет вам сохранять учетные данные учетной записи

ответил GAThrawn 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 17 Sep 2009 15:22:41 +0400 2009, 15:22:41
3

Surun - это бесплатное приложение с открытым исходным кодом, которое позволяет определенным программам работать с правами администратора, без предоставления пароля без изменения реестра пользователя или изменения переменных среды.

Когда я пользовался Windows XP, это приложение мне очень помогает. Beta работает под Windows 7.

ответил diimdeep 17 42011vEurope/Moscow11bEurope/MoscowThu, 17 Nov 2011 19:24:50 +0400 2011, 19:24:50
3

Как вы, вероятно, обнаружили, runas позволит вам запускаться как другой пользователь, но он не может выполнять возвышение и не передает текущие каталоги, переменные окружения или длинные командные строки.

оболочка Hamilton C разрешает это с подлинным su и sudo. su позволяет запускать команду в качестве другого пользователя; sudo (на самом деле псевдоним su) позволяет вам выполнить команду повышенной. Вы также можете сделать то и другое, работая под повышенным уровнем как другой пользователь. Текущие каталоги, переменные окружения и длинные командные строки передаются посредством рукопожатия с общей памятью между su, выполняющимся в контексте вызывающего абонента, и копией самой работы, выполняемой как интерлюдия, с новыми учетными данными, которые затем запускают дочерние элементы. Полное раскрытие: я автор.

ответил Nicole Hamilton 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 06 Sep 2012 19:01:51 +0400 2012, 19:01:51
1

Этот скрипт выполняет задание:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

Сохраните его как sudo.cmd, затем добавьте его в свой PATH

Примечание: runas означает в этом контексте «Запуск от имени администратора», а не «Запуск от имени другого пользователя»

взяты здесь и слегка отредактирован, чтобы удалить заголовок cscript.exe из вывода

ответил Charles Milette 11 Jam1000000amMon, 11 Jan 2016 00:08:24 +030016 2016, 00:08:24
1

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

Вы можете просто запустить это в любой оболочке (cmd или powershell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
ответил twall 20 12017vEurope/Moscow11bEurope/MoscowMon, 20 Nov 2017 22:58:47 +0300 2017, 22:58:47
0

Замените рабочую замену sudo для терминала Cygwin mintty, чтобы поместить следующий скрипт в PATH пользователя:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"[email protected]\"

Для меня это единственная жизнеспособная замена для повышения привилегий таких программ, как vim или cygrunsrv во время работы в терминале в Windows.

ответил karafior 26 32014vEurope/Moscow11bEurope/MoscowWed, 26 Nov 2014 12:45:34 +0300 2014, 12:45:34
0

Следующий скрипт vbs делает трюк для меня. Я положил его на C:\Windows\System32

 Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

Пример использования в командной строке sudo net start service

ответил ceztko 2 FebruaryEurope/MoscowbFri, 02 Feb 2018 00:29:20 +0300000000amFri, 02 Feb 2018 00:29:20 +030018 2018, 00:29:20
0

Для него есть шоколадный пакет с удобным названием sudo . Вы можете установить пакет с шоколадным с помощью этой команды:

 choco install -y sudo

Затем в любой оболочке Windows /MS, которую вы должны использовать, вы можете использовать sudo, как ожидалось.

ответил ypid 14 J0000006Europe/Moscow 2018, 21:44:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132