Gsudo es un equivalente sudo
para Windows, con una experiencia de usuario similar como la UNIX/Linux Sudo original. Le permite ejecutar un comando (o volver a lanzar su caparazón actual) con permisos elevados, en la ventana de consola actual o una nueva.
Simplemente prependa gsudo
(o el alias sudo
) a su comando y se ejecutará elevado. Para PowerShell, use esta sintaxis: gsudo { ScriptBlock }
Aparecerá una ventana emergente de UAC cada vez. Puede ver menos ventanas emergentes si habilita Gsudo Cache.
Detecta su shell actual y eleva su comando como comandos nativos de shell. (Admite Cmd
, PowerShell
, WSL
, git-bash
, MinGW
, Cygwin
, Yori
, Take Command
, BusyBox
y NuShell
.)
gsudo: un sudo para Windows
Uso de PowerShell / PowerShell Core
Uso de WSL (subsistema de Windows para Linux)
Módulo PowerShell
Tabla de contenido
Manifestación
Características
Instalación
Uso
Configuración
Credenciales caché
Problemas conocidos
Preguntas frecuentes
¡Apoye a Gsudo! ?
Documentación extendida disponible en: https://gardog.github.io/gsudo/
(con gsudo config CacheMode auto
)
Los comandos elevados se muestran en la consola actual. No hay ventana nueva (a menos que especifique -n
)
CACIMIENTO DE CREDENCIALES: gsudo
puede elevar muchas veces mostrando solo una ventana emergente de UAC si el usuario opta por habilitar el caché.
Detecta su shell actual (admite CMD
, PowerShell
, WSL
, Bash for Windows
(Git-Bash/Mingw/MSYS2/Cygwin), Yori
, Take Command
y NuShell
), y eleva su comando correctamente.
Admite que se utiliza en scripts:
Salidas STDOUT /STDERR se puede canalizar o capturar (por ejemplo, gsudo dir | findstr /c:"bytes free" > FreeSpace.txt
) y los códigos de salida también ( %errorlevel%
). Si gsudo
no puede elevar, el código de salida será 999.
Si gsudo
se invoca desde una consola ya elevada, solo ejecutará el comando (no fallará). Por lo tanto, no tiene que preocuparse si ejecuta gsudo
o un script que usa gsudo
desde una consola ya elevada. (La ventana emergente de la UAC no aparecerá, ya que no se requiere elevación)
gsudo !!
eleva el último comando ejecutado. Trabaja en CMD, GIT-Bash, Mingw, Cygwin (y PowerShell con solo módulo Gsudo)
Uso de SCOOP: scoop install gsudo
Uso de Winget: winget install gerardog.gsudo
Uso de chocolate: choco install gsudo
Ejecutando esta línea: (script):
PowerShell -Command "Set -ExecutionPolicy Remotesigned -scope Process; [net.servicePointManager] :: SecurityProtocol = 'tls12'; iwr -useb https://raw.githubusercontent.com/generdog/gsudo/master/installgsudo.ps1 | iex"
Portátil:
Descargar gsudo.portable.zip
de la última versión
Extraiga la carpeta correspondiente a la arquitectura de su procesador (X64, X86 o ARM64) desde el archivo zip a un directorio adecuado en su computadora.
Opcionalmente, agregue ese directorio a la variable de entorno de ruta de su sistema si aún no está accesible.
Reinicie todas las ventanas de su consola después de instalar para asegurarse de que la variable de entorno PATH
se actualice.
Nota: gsudo.exe
es portátil. No se requiere servicio de Windows o se realiza un cambio de sistema, excepto agregarlo a la ruta.
gsudo [Opciones] # inicia su shell actual ElevatedGsudo [Opciones] {comando} [args] # ejecuta {comando} con permisos elevados de caché de sudo [ON | APAGADO | Ayuda] # inicia/detiene una sesión de caché de credenciales. (Menos ventanas emergentes de UAC) Gsudo Status [--json | Filtro] # muestra el estado de usuario, caché y consola actual. ¡GSUDO! # Vuelva a ejecutar el último comando como administrador. (Ymmv)
Nuevas opciones de ventana: -n | -Nueva # inicia el comando en una nueva consola/ventana (y regresa inmediatamente). -W | --Ase # cuando esté en una nueva consola, espere a que termine el comando. --keepshell # Después de ejecutar un comando, mantenga el shell elevado abierto. --keepwindow # Después de ejecutar un comando en una nueva consola, solicite KeyPress antes de cerrar la consola/ventana. Opciones de seguridad: -u | --User {USR} # ejecutar como el usuario especificado. Pide contraseña. Para los administradores locales muestran UAC a menos que '-i medio' -i | -integridad {v} # Especifique el nivel de integridad: no confiable, bajo, medio, mediano, alto (predeterminado), sistema -S | --system # ejecutar como cuenta del sistema local (NT AuthoritySystem). -Ti # ejecutar como miembro de NT ServiceTrustedInstaller -K # mata todas las credenciales en caché. La próxima vez que se ejecute Gsudo, aparecerá una ventana emergente de UAC. --Direct # omita la detección de shell. Suponga que cmd shell o cmd {command}. --LoadProfile # Al elevar los comandos de PowerShell, cargar perfil de usuario. Otras opciones: --loglevel {val} # Establecer el nivel de registro mínimo para mostrar: todos, depuración, información, advertencia, error, ninguno ninguno --DEBUG # habilitar el modo de depuración. --Copyns # Connect Network unidades al usuario elevado. ADVERTENCIA: LEYECTURA, Interactive solicita credenciales -Copyev # (desaprobado) Variables de entorno de copia al proceso elevado. (No es necesario en el modo de consola predeterminado) --chdir {dir} # Cambie el directorio actual a {dir} antes de ejecutar el comando.
Nota: Puede usar en cualquier lugar el alias sudo
creado por los instaladores.
Ejemplos:
gsudo # eleva el shell actual en la ventana de la consola actual (admite CMD/PowerShell/PWSH Core/Yori/Take Command/Git -Bash/Cygwin) GSudo -N # Iniciar el shell actual elevado en una nueva ventana de la consolagsudo -n -W Powershell ./Do-somthing.ps1 # Iniciar en una nueva ventana y esperar a Exitgsudo Notepad %Windir %System32Driversetchosts # Iniciar Windows AppSudo Notepad # sudo alias incorporado # redirect/tubería/salida/salida Ejemplogsudo dir | findstr /c: "bytes gratis"> freespace.txt gsudo config Loglevel "Error" # Configure Reducido LogginggSudo Configación de configuración "$ P [Elevado] $ G" # Configurar un indicador de configuración de apurado elevado personalizado -Reset # RESET al valor predeterminado # Habilitar Credenciales Cache (menos emergentes de UAC): GSudo Config Cachemode Cachemode Auto
gsudo
detecta si se invoca de PowerShell y eleva los comandos PS (a menos que -d
se use para elevar los comandos CMD).
El comando para elevar se ejecutará en un proceso diferente, por lo que no puede acceder a las $variables
y el alcance de los padres.
Para elevar un bloque de comandos o script: envuélvalo en {aparatos}} .
# Sintaxis: gsudo {scriptblock} gsudo [opciones] {scriptBlock} [-args $ argument1 [..., $ argumentn]];# ejemplos: gsudo {Write-Output "Hello World"}# Pase los argumentos con -args $ myString = "Hello World" gsudo { Escribir a la salida $ args [0]} -args $ myString # output se está serializado como psobjects con propiedades. $ Services = gsudo {Get-Service 'wSearch', 'winmgmt'} Write-Output $ Services.displayName# Intrips también: Ejemplo de iteración elevada de una lista .get-childItem. | gsudo {$ input.CreationIntime}
Sintaxis alternativa:
# Valores de aprobación (no variables por referencia) mediante el prefijo `$ usando:`. Es decir, $ myString = "Hello World" Invoke-Gsudo {Write-Output $ usando: MyString} # Sintaxis: invoke-gsudo [-scriptblock] <ScriptBlock> [[-ArgumentList] <Object []>] [-InputObject <SpObject>] [-LoadProfile | -Noprofile] [-Credential <Scredential>]
- PowerShell function. - Performs auto serialization of inputs & outputs. - You can prefix variables with the `$using:` scope modifier (like `$using:variableName`) and their serialized value is applied. - Use `-LoadProfile` or `-NoProfile` to override profile loading or not. - Use `-Credential` option for Run As User (same as `-u` but for `Get-Credentials`). - Better forwarding of your current context to the elevated instance (current Location, $ErrorActionPreference)
Uso: gsudo 'string literal'# sustituciones variables Ejemplo: $ file = 'c: my secret.txt'; $ algorithm = 'md5'; $ hash = gsudo "(get -filash '$ file' -algorithm $ algorithm) .hash" o $ hash = gsudo "(get -filash" "$ archivo" "-algorithm $ algorithm) .Picadillo"
Acepta una cadena literal con el comando para elevar.
Devuelve una lista de cadenas.
Opcional: Importar módulo gsudoModule.psd1
en su perfil de PowerShell:
# Agregue la siguiente línea a su módulo de importación $ perfil "gsudomodule"# o ejecutar: escribir-salto "` nimport-module `" gsudomodule` "" | Agregar contenido $ perfil
Para hacerlo, agregue esta línea a su perfil (después de importar gsudoModule
):
Set-alias indicador gsudoprompt
Si aún no ha personalizado su aviso de PowerShell (por ejemplo, instalando OH-My-Posh), puede agregar fácilmente un #
rojo que indica que el proceso actual está elevado:
Test-IsGsudoCacheAvailable
Devuelve verdadero si un gsudo caché está activo (lo que significa que es posible la elevación sin UAC).
Test-IsProcessElevated
: Devuelve verdadero si el proceso actual está elevado.
Test-IsAdminMember
: Devuelve verdadero si el usuario actual es miembro de los grupos Local Administrators
, lo que significa que puede elevarse.
Agrega sintaxis automática-complete a gsudo en PowerShell. Además, sugiere los 3 comandos anteriores, ¡haciendo que su flujo de trabajo sea más suave que nunca!
Habilita gsudo !!
en PowerShell, para elevar el último comando ejecutado.
Agrega funciones:
En WSL, la elevación y root
son conceptos diferentes. root
permite la administración completa de WSL pero no del sistema Windows. Use su
o sudo
nativo de WSL para obtener acceso root
. Para obtener el privilegio de administración en la caja de Windows, debe elevar el proceso WSL.EXE. gsudo
lo permite (aparecerá una ventana emergente de UAC).
En WSL Bash, prependa gsudo
para elevar los comandos WSL o gsudo -d
para los comandos CMD .
# Elevate predeterminado shellpc: ~ $ gsudo # Ejecutar WSL Elevated WSL Commandpc: ~ $ Gsudo Mkdir/Mnt/C/Windows/MyFolder# Ejecutar Windows Elevated Windows Commandpc: ~ $ Gsudo -D Notepad C:/Windows/System32/Drivers/Etc/Hosts PC: ~ $ gsudo -d "Notepad C: WindowsSystem32Driversetchosts"# prueba para gsudo y comando sucessTretVal = $?; If [$ retval -eq 0]; luego eco de "éxito"; elif [$ retval -eq $ ((999 % 256))]; Entonces el código de salida de # gsudo fallas (999) se lee como 231 en WSL (999 mod 256) echo "gsudo no pudo elevar!"
Gsudo Config # Mostrar configuraciones y valores de configuración actuales. gsudo config {key} [--global] [valor] # leer o escribir una configuración de usuario gsudo config {key} [--global]--rese # restablecer la configuración al valor predeterminado --LoBal # afecta a todos los usuarios (anula la configuración del usuario)
El Credentials Cache
, si está habilitado y activo, permite elevarse varias veces de un proceso principal con solo una ventana emergente de UAC. Después de 5 minutos sin elevaciones, la sesión de caché se cierra automáticamente (tiempo de espera configurable a través de gsudo config CacheDuration
).
Si bien esto es muy conveniente, es importante comprender sus riesgos de seguridad potenciales. Incluso si Gsudo es seguro, la vulnerabilidad inherente radica en el proceso de host. Si su sistema ya está comprometido por un proceso malicioso, puede manipular el proceso permitido (por ejemplo, CMD/PowerShell) y forzar una instancia activa de Gsudo Cache para elevar los privilegios sin desencadenar una solicitud de UAC.
Este riesgo es la compensación por usar el caché de credenciales. El caché es seguro de usar siempre que esté seguro de que no hay procesos maliciosos que se ejecutan en su sistema.
Aquí están los modos Credentials Cache
:
Explicit:
(predeterminado) Cada elevación muestra una ventana emergente de UAC, a menos que se inicie una sesión de caché manualmente ...
Para iniciar o detener una sesión de la sesión de caché: gsudo cache {on | off}
Este es el modo predeterminado. (Use gsudo config CacheMode Explicit
para volver a este valor).
Auto:
Similar a Unix-Sudo. La primera elevación muestra una ventana emergente de la UAC e inicia una sesión de caché automáticamente .
Ejecute gsudo config CacheMode Auto
para usar este modo.
Disabled:
cada elevación muestra una ventana emergente de UAC, y tratar de iniciar una sesión de caché arrojará un error.
Ejecute gsudo config CacheMode Disabled
para usar este modo.
En cualquier caso, puede detener todas las sesiones de caché con gsudo -k
.
Obtenga más información
Las instancias elevadas no tienen acceso a las acciones de la red conectadas en el espacio no elevado. Este no es un problema gsudo
, sino cómo funciona Windows. Use --copyNS
para replicar las acciones de la red en la sesión elevada, pero esto no es bidireccional y es interactivo (puede solicitar el usuario/contraseña).
gsudo.exe
se puede colocar en una red compartida e invocarse como serversharegsudo {command}
pero no funciona si su carpeta actual es una unidad de red. Por ejemplo, no mapee servershare
a Z:
y luego Z:>gsudo do-something
.
Informe los problemas en la sección de problemas.
¿Por qué se llama gsudo
en lugar de solo sudo
?
Cuando creé gsudo
, había otros paquetes sudo
en la mayoría de los administradores de paquetes populares de Windows como Chocolatey
y Scoop
, por lo que no tenía otra opción para elegir otro nombre. Los instaladores gsudo
crean un alias para sudo
, así que no dude en usar sudo
en su línea de comando para invocar gsudo
.
¿Por qué migró de .Net Framework 4.6
a .Net Core 7.0
?
A partir de V1.4.0, se construye usando .Net 7.0
Nativeaot. Se carga más rápido y usa menos memoria, y se ejecuta en máquinas sin ningún tiempo de ejecución .NET instalado. Versiones anteriores <v1.3.0
usaron .NET 4.6, porque se incluyó en cada instalación de Windows 10/11.
¿ gsudo
es un puerto de *nix sudo
?
No. gsudo
recuerda el sudo original con respecto a las expectativas del usuario. Muchas características sudo
son *nix
específicas y nunca podrían tener una contraparte Windows
. Otras características (como sudoers
) podrían implementarse potencialmente, pero no están en este momento.
¿Cuáles son los requisitos? ¿Funciona en Windows 7/8?
Funciona en Win7 SP1 en adelante. Algunas características solo pueden funcionar en Windows 10/11, como Eleving como TrustedInstaller.
¿Cómo regreso al nivel de seguridad anterior después de usar GSUDO?
De la misma manera que lo haría con Unix/Linux sudo
: gsudo
no altera el proceso actual, sino que inicia un nuevo proceso con diferentes permisos/nivel de integridad. Para volver al nivel anterior, solo termine el nuevo proceso. Para Command Prompt
o PowerShell
solo escriba exit
.
¡Por favor danos una estrella!
¡Ayuda a correr la voz mencionando gsudo
en las redes sociales!
Patrocinador o donar