2009-09-17 09:24:35 +0000 2009-09-17 09:24:35 +0000
463
463

¿Hay algún comando 'sudo' para Windows?

Siempre trabajo con una cuenta no de administrador en mi ordenador con Windows. A veces necesito instalar programas que requieren acceso de administrador. Como utilizo mayormente el símbolo del sistema de Windows, ¿hay algún comando de Windows para aumentar los privilegios, similar al comando de terminal de Linux sudo?

Respuestas (15)

272
272
272
2009-09-17 09:29:46 +0000

El comando runas .

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

Sólo ejecuta:

runas /noprofile /user:Administrator cmd

para iniciar un shell de comandos como administrador

128
128
128
2011-04-12 06:42:00 +0000
  • Elevación ** - “ejecuta un comando con elevación de privilegios de la UAC. Esto es útil para trabajar dentro de las instrucciones de los comandos o con archivos por lotes.” No es lo mismo que sudo, cambia el usuario ejecutor a Administrador, pero su sintaxis es mucho más sencilla de usar que runas, y puede mantener el directorio actual, permitiendo el uso de rutas relativas.
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".

El propósito de Elevate no es trabajar alrededor o evitar el UAC (Control de Cuentas de Usuario), sino trabajar con él. Mientras el UAC esté habilitado, tiene que haber algún tipo de aviso en algún punto del proceso. Si necesitas deshacerte del prompting por completo tienes que desactivar UAC .

El punto de dolor que Elevate alivia es escalar un proceso particular desde un shell no privilegiado y luego continuar con normalidad. Sin esto necesitas iniciar un símbolo de comando privilegiado con click derecho > “Run as Administrator” antes de intentar el comando privilegiado, el cual no puede ser fácilmente programado.

Esto funciona bien con “Elevate sin el símbolo de comando” en secpol.msc. Juntos, hacen lo mismo que %wheel ALL=(ALL) NOPASSWD: ALL en sudo

Una limitación conocida es que no devuelve el código de error del programa que está elevando.

Si su memoria muscular está atascada en sudo, cree un alias usando Doskey : doskey sudo=elevate -w

o un archivo por lotes en PATH: @elevate -w %*

Elevate es una herramienta de terceros escrita por Johannes Passing . Es una descarga de 11kb y portátil (no necesita instalación): http://code.kliu.org/misc/elevate/

67
67
67
2009-09-17 09:28:30 +0000

Puedes usar el comando runas que es algo similar, o puedes revisar el proyecto sudo para Windows en SourceForge que agrega un comando sudo.

La diferencia es sutil:

Digamos que tienes dos usuarios. Bob es un usuario normal y James es un administrador.

Si te conectas como Bob y usas “runas james acommand” el comando se ejecuta como si fuera ejecutado por James, por lo que accede a la configuración de usuario de James y cualquier cambio de usuario va a las carpetas James My Documents & settings, etc. Por lo tanto, si está instalando una aplicación, digamos, se instalará como James, no como Bob.

Si por otro lado Bob hace “sudo acommand” el comando se sigue ejecutando como Bob, pero con permisos elevados - al igual que el comando sudo de Linux. Para evitar que cualquier usuario pueda hacer “sudo” hay que definir un grupo de usuarios “sudoers” que contenga la lista de los usuarios normales que tienen permiso para elevar usando “sudo”. Los usuarios todavía tienen que proporcionar credenciales antes de la elevación.

A veces la diferencia no es importante, a veces lo es, y encuentro que ambos comandos pueden ser útiles.

41
41
41
2009-09-17 13:11:39 +0000

También puedes usar los Script Elevation PowerToys .

30
30
30
2012-10-26 07:52:13 +0000

Si está listo para cambiar a consolas alternativas, hay ConEmu (soy el autor). Una de sus características - la capacidad de ejecutar tanto pestañas elevadas como no elevadas en la única ventana de ConEmu. Las pestañas pueden ser iniciadas con diferentes credenciales también.

Para la comodidad del usuario, hay un archivo por lotes csudo.cmd (que puede ser fácilmente adoptado para bash). Lea la descripción completa en wiki del proyecto . En resumen, cuando ejecutas algún comando desde una pestaña no elevada existente, por ejemplo

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

ConEmu se iniciará dism en la nueva consola/pestaña elevada (con el indicador UAC precedente en Vista o el cuadro de inicio de sesión en XP).

Por defecto csudo inicia la nueva consola en un split (pueden ser cambios a través de la edición de los contenidos de csudo.cmd).

Y por supuesto puedes renombrarlo a sudo.cmd si te gusta la palabra “clásico” sudo.

24
24
24
2012-08-28 10:36:22 +0000

Método rápido:

Tres pasos para añadir el sudo.

  1. Abrir PowerShell.

  2. Copie el siguiente script (Ctrl+C) y péguelo en PowerShell (Alt+Espacio+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. Presione Enter.

Habilitará permanentemente el comando sudo en PowerShell.

Uso:

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

Ejemplos:

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

Método largo de aprendizaje:

Nota: He mezclado el script de ambos artículos para crear el mencionado script. En lugar de pegar manualmente el script en el bloc de notas añadí las declaraciones Out-File para guardar los archivos ps1 y $profile del script.

Consejo: Si no eres un gran fan de los popups de UAC (como yo), guarda lo siguiente en el archivo *.reg y ejecútalo:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
19
19
19
2009-09-17 11:22:41 +0000

Si haces esto en Windows, entonces además del comando Ejecutar como, como se mencionó en un par de otras respuestas, también hay formas de hacerlo con el ratón.

Si mantienes presionada la tecla Shift mientras haces clic con el botón derecho del ratón en la mayoría de los archivos ejecutables de Windows, deberías notar algunas opciones más avanzadas. Una de ellas es la opción “Run As...” (creo que se llama “Run As Administrator” a partir de Vista).

También puede descargar una versión más avanzada de RunAs de Microsoft, llamada ShellRunAs , que tiene mejoras sobre el comando RunAs incorporado, tanto en el modo de línea de comandos como en el gráfico, incluyendo la posibilidad de guardar las credenciales de la cuenta

4
4
4
2011-11-17 15:24:50 +0000

Surun es una aplicación gratuita de código abierto que permite a ciertos programas ejecutarse con derechos administrativos, sin proporcionar una contraseña sin cambiar el registro de usuario o modificar las variables de entorno.

Cuando usaba Windows XP esta aplicación me ayudó mucho. Beta funciona bajo Windows 7.

3
3
3
2012-09-06 15:01:51 +0000

Como probablemente has descubierto, las runas te permitirán ejecutar como otro usuario pero no puede hacer elevación y no pasa los directorios actuales, las variables de entorno o las líneas de comando largas. Hamilton C shell resuelve eso con un genuino su y sudo. su te permite ejecutar un comando como otro usuario; sudo (en realidad un alias de su) te permite ejecutar un comando elevado. También puedes hacer ambas cosas, ejecutando elevated como un usuario diferente. Los directorios actuales, las variables de entorno y las largas líneas de comandos se pasan por medio de un apretón de manos de memoria compartida entre su ejecutándose en el contexto del llamante y una copia de sí mismo ejecutándose como un interludio con las nuevas credenciales que luego inicia el hijo. Revelación completa: Soy el autor.

3
3
3
2018-06-14 18:44:28 +0000

Hay un paquete de chocolate para él con el conveniente nombre de sudo . Puedes instalar el paquete con chocolatey usando este comando:

choco install -y sudo

Entonces en cualquier shell de Windows/MS que tengas que usar, puedes usar sudo como se espera.

3
3
3
2019-11-07 16:12:24 +0000

Escribí gsudo , un sudo para ventanas que se siente como *nix sudo y tiene unas cuantas características asesinas:

  • Corre dentro de la consola actual (adjunta) sin romper la tecla de tabulación auto-completar. O añadir -n para lanzarlo en una nueva ventana.
  • Maneja todos los escenarios de forma fiable para ser usados en los scripts. (ExitCodes, StdIn/Out/Err Redirección/Captura)
  • Soporta Cmd/PowerShell/PowerShell Core
  • Caché de credenciales: Si gsudo es invocado varias veces en minutos sólo muestra el pop-up de UAC una vez.

Uso

gsudo Abre un shell elevado en la consola actual.

gsudo [options] {command} [arguments] Ejecuta el comando especificado con permisos elevados.

Lo más relevante [options]:

  • -n | --new Inicia el comando en una consola nueva con derechos elevados (y vuelve inmediatamente).
  • -w | --wait Fuerza la espera para que el proceso termine (y devuelve el código de salida).
  • -s | --system Ejecuta como cuenta del Sistema Local (“NT AUTHORITY\SYSTEM”).
  • --copyev Copia todas las variables de entorno a la sesión elevada antes de ejecutarla.

Instalación

  • Usando Scoop: scoop install gsudo
  • Usando Chocolatey: choco install gsudo
  • Instalación manual
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
1
1
1
2014-11-26 09:45:34 +0000

Un reemplazo de sudo en funcionamiento para la terminal mintty de Cygwin sería colocar el siguiente script en el PATH del usuario:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

Para mí este es el único reemplazo viable para elevar los privilegios de programas como vim o cygrunsrv mientras se trabaja en una terminal en Windows.

1
1
1
2017-11-20 19:58:47 +0000

La solución más simple, en mi opinión, es aprovechar powershell para hacer el trabajo, que es portátil y que incitará al usuario a usar el UAC.

Puedes ejecutar esto en cualquier shell (cmd o powershell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
0
0
0
2018-02-01 21:29:20 +0000

El siguiente script vbs permite lanzar un determinado comando con argumentos con elevación e imita el comportamiento del comando original unix sudo para un conjunto limitado de casos utilizados (no cachea las credenciales ni permite ejecutar realmente comandos con diferentes credenciales). Lo puse en 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

Ejemplo de uso en un símbolo del sistema sudo net start service

0
0
0
2016-01-10 21:08:24 +0000

Este script hace el trabajo:

@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

Guárdelo como sudo.cmd y luego agréguelo a su PATH

Nota: el runas significa en este contexto “Ejecutar como administrador” y no “Ejecutar como otro usuario” Tomado de aquí y ligeramente editado para eliminar el encabezado cscript.exe de la salida