usuarios usuario privilegio permisos hacer crear con cambiar aƱadir bash cygwin root sudo

bash - privilegio - Root usuario/sudo equivalente en Cygwin?



permisos de sudo a un usuario (16)

Estoy intentando ejecutar un script bash en Cygwin.

Me sale Must run as root, ie sudo ./scriptname errors.

chmod 777 scriptname no ayuda.

He buscado formas de imitar sudo en Cygwin, para agregar un usuario raíz, ya que al llamar "su" aparece el error su: user root does not exist , nada útil y no ha encontrado nada.

¿Alguien tiene alguna sugerencia?


Al no estar satisfecho con la solución disponible, sudo-for-cygwin para agregar seguridad y facilitar la configuración y el uso. El proyecto está disponible en Github

Para usarlo, solo descarga cygwin-sudo.py y cygwin-sudo.py a través de python3 cygwin-sudo.py **yourcommand** .

Puede configurar un alias para mayor comodidad:

alias sudo="python3 /path-to-cygwin-sudo/cygwin-sudo.py"


Aterricé aquí a través de Google, y de hecho creo que encontré la forma de obtener un mensaje raíz completamente funcional en cygwin.

Aquí están mis pasos.

En primer lugar, debe cambiar el nombre de la cuenta de administrador de Windows a "raíz". Para ello, abra start manu y escriba "gpedit.msc"

Edite la entrada en Política de la computadora local> Configuración del equipo> Configuración de Windows> Configuración de seguridad> Políticas locales> Opciones de seguridad> Cuentas: cambiar el nombre de la cuenta de administrador

Luego deberá habilitar la cuenta si aún no está habilitada. Política de equipo local> Configuración del equipo> Configuración de Windows> Configuración de seguridad> Políticas locales> Opciones de seguridad> Cuentas: estado de cuenta de administrador

Ahora cierre la sesión e inicie sesión en la cuenta raíz.

Ahora establece una variable de entorno para cygwin. Para hacerlo de la manera más fácil: haga clic con el botón derecho en Mi PC> Propiedades

Haga clic (en la barra lateral izquierda) "Configuración avanzada del sistema"

Cerca de la parte inferior haz clic en el botón "Variables ambientales"

En "Variables del sistema", haga clic en el botón "Nuevo ..."

Para el nombre puesto "cygwin" sin las comillas. Para el valor, ingrese en su directorio raíz cygwin. (El mío fue C: / cygwin)

Presione OK y cierre todo eso para volver al escritorio.

Abra un terminal Cygwin (cygwin.bat)

Edite el archivo / etc / passwd y cambie la línea

Administrador : sin uso: 500: 503 : UMACHINE / Administrador , S-1-5-21-12345678-1234567890-1234567890- 500: / home / Administrator : / bin / bash

Para esto (sus números y el nombre de la máquina serán diferentes, ¡solo asegúrese de cambiar los números resaltados a 0!)

root : sin usar: 0: 0 : U- MACHINE / root , S-1-5-21-12345678-1234567890-1234567890- 0: / root : / bin / bash

Ahora que todo está terminado, este próximo bit hará que funcione el comando "su". (No perfectamente, pero funcionará lo suficiente como para usar. No creo que los guiones funcionen correctamente, pero bueno, has llegado hasta aquí, tal vez puedas encontrar el camino. Y por favor comparte)

Ejecute este comando en cygwin para finalizar el trato.

mv /bin/su.exe /bin/_su.exe_backup cat > /bin/su.bat << "EOF" @ECHO OFF RUNAS /savecred /user:root %cygwin%/cygwin.bat EOF ln -s /bin/su.bat /bin/su echo '''' echo ''All finished''

Salga de la cuenta de root y vuelva a su cuenta de usuario de Windows normal.

Después de todo eso, ejecute el nuevo "su.bat" manualmente haciendo doble clic en él en el explorador. Ingrese su contraseña y continúe y cierre la ventana.

Ahora intenta ejecutar el comando su de cygwin y ver si todo salió bien.


Conocí esta discusión buscando algunos detalles sobre la implementación de sudo en diferentes sistemas operativos. Al leerlo encontré que la solución de @ brian-white ( https://.com/a/42956057/3627676 ) es útil, pero se puede mejorar ligeramente. Evité crear el archivo temporal y lo implementé para ejecutar todo con el único script.

También investigué el siguiente paso de la mejora de la salida dentro de la ventana / consola única. Lamentablemente, sin éxito. Traté de usar canalizaciones con nombre para capturar STDOUT / STDERR e imprimir en la ventana principal. Pero el proceso hijo no escribió en las canalizaciones con nombre. Sin embargo, escribir en un archivo normal funciona bien.

Dejé de intentar encontrar la causa raíz y dejé la solución actual tal como estaba. Espero que mi publicación también sea útil.

Mejoras:

  • sin archivo temporal
  • no analizar y reconstruir las opciones de línea de comando
  • espera el comando elevado
  • use mintty o bash , si el primero no se encuentra
  • devolver el código de salida del comando

#!/bin/bash # Being Administrators, invoke the command directly id -G | grep -qw 544 && { "$@" exit $? } # The CYG_SUDO variable is used to control the command invocation [ -z "$CYG_SUDO" ] && { mintty="$( which mintty 2>/dev/null )" export CYG_SUDO="$$" cygstart --wait --action=runas $mintty /bin/bash "$0" "$@" exit $? } # Now we are able to: # -- launch the command # -- display the message # -- return the exit code "$@" RETVAL=$? echo "$0: Press to close window..." read exit $RETVAL


Encontré sudo-for-cygwin , quizás esto funcionaría, es una aplicación cliente / servidor que usa un script python para engendrar un proceso hijo en windows (pty) y une el tty del usuario y el proceso de E / S.

Requiere python en ventanas y módulos de Python, greenlet y eventlet en Cygwin.


Esta respuesta se basa en otra respuesta . En primer lugar, asegúrese de que su cuenta esté en el grupo Administradores.

A continuación, cree un archivo genérico "runas-admin.bat" con el siguiente contenido:

@if (1==1) @if(1==0) @ELSE @echo off&SETLOCAL ENABLEEXTENSIONS >nul 2>&1 "%SYSTEMROOT%/system32/cacls.exe" "%SYSTEMROOT%/system32/config/system"||( cscript //E:JScript //nologo "%~f0" %* @goto :EOF ) FOR %%A IN (%*) DO ( "%%A" ) @goto :EOF @end @ELSE args = WScript.Arguments; newargs = ""; for (var i = 0; i < args.length; i++) { newargs += "/"" + args(i) + "/" "; } ShA=new ActiveXObject("Shell.Application"); ShA.ShellExecute("cmd.exe","/c /""+WScript.ScriptFullName+" "+newargs+"/"","","runas",5); @end

A continuación, ejecute el archivo por lotes de esta manera:

./runas-admin.bat "<command1> [parm1, parm2, ...]" "<command2> [parm1, parm2, ...]"

Por ejemplo:

./runas-admin.bat "net localgroup newgroup1 /add" "net localgroup newgroup2 /add"

Solo asegúrese de incluir cada comando por separado entre comillas dobles. Solo recibirá el aviso de UAC una vez con este método y este procedimiento se ha generalizado para que pueda usar cualquier tipo de comando.


Lo que suelo hacer es tener un registro de "Abrir aquí" ayudante para abrir un shell cygwin con privilegios administrativos bastante fácil desde cualquier lugar en mi computadora.

Tenga en cuenta que debe tener instalado el paquete cygwin "chere", primero use " chere -i -m " de un caparazón cygwin elevado.

Suponiendo que su instalación de cygwin está en C: / cygwin ...

Aquí está el código de registro:

Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash] [HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash] @="Open Cygwin Here as Root" "HasLUAShield"="" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash/command] @="c://cygwin//bin//mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe" [-HKEY_CLASSES_ROOT/Directory/Background/shell/cygwin_bash] [HKEY_CLASSES_ROOT/Directory/Background/shell/cygwin_bash] @="Open Cygwin Here as Root" "HasLUAShield"="" [HKEY_CLASSES_ROOT/Directory/Background/shell/cygwin_bash/command] @="c://cygwin//bin//mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe" [-HKEY_CLASSES_ROOT/Drive/shell/cygwin_bash] [HKEY_CLASSES_ROOT/Drive/shell/cygwin_bash] @="Open Cygwin Here as Root" "HasLUAShield"="" [HKEY_CLASSES_ROOT/Drive/shell/cygwin_bash/command] @="c://cygwin//bin//mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

Espero que esto ayude. Avíseme si funciona para usted. Gracias.

PD: Puede tomar este código, copiarlo y pegarlo y guardarlo en un archivo name.reg para ejecutarlo ... o puede agregar manualmente los valores.


No puedo probarlo completamente, no tengo un script adecuado para probarlo, y no soy un experto en Linux, pero es posible que puedas hackear algo lo suficientemente cerca.

Probé estos pasos y parece que funcionan, pero no sé si serán suficientes para tus necesidades.

Para evitar la falta de un usuario ''root'':

  • Cree un usuario en la máquina de Windows LOCAL llamada ''raíz'', hágalo miembro del grupo ''Administradores''
  • Marque bin / bash.exe como ''Ejecutar como administrador'' para todos los usuarios (obviamente tendrá que activarlo / desactivarlo cuando lo necesite)
  • Mantenga presionado el botón de mayúsculas a la izquierda en Windows Explorer mientras hace clic derecho en el archivo Cygwin.bat
  • Seleccione ''Ejecutar como un usuario diferente''
  • Ingrese. / Root como el nombre de usuario y luego su contraseña.

Esto luego lo ejecuta como un usuario llamado ''root'' en cygwin, que junto con ''Ejecutar como administrador'' en el archivo bash.exe puede ser suficiente.

Sin embargo, todavía necesitas un sudo.

Fingí esto (y alguien más con más conocimiento de Linux probablemente puede simularlo mejor) creando un archivo llamado ''sudo'' en / bin y usando esta línea de comando para enviar el comando a su en su lugar:

su -c "$*"

La línea de comando ''sudo vim'' y otras parecen funcionar bien para mí, por lo que es posible que desee probarlo.

Estar interesado en saber si esto funciona para sus necesidades o no.



Parece que cygstart/runas no maneja apropiadamente "$@" y, por lo tanto, los comandos que tienen argumentos que contienen espacios (y tal vez otros metacaracteres del shell, no los verifiqué) no funcionarán correctamente.

Decidí simplemente escribir un pequeño script sudo que funcione escribiendo un script temporal que haga los parámetros correctamente.

#! /bin/bash # If already admin, just run the command in-line. # This works on my Win10 machine; dunno about others. if id -G | grep -q '' 544 ''; then "$@" exit $? fi # cygstart/runas doesn''t handle arguments with spaces correctly so create # a script that will do so properly. tmpfile=$(mktemp /tmp/sudo.XXXXXX) echo "#! /bin/bash" >>$tmpfile echo "export PATH=/"$PATH/"" >>$tmpfile echo "$1 //" >>$tmpfile shift for arg in "$@"; do qarg=`echo "$arg" | sed -e "s/''/''/////'''/g"` echo " ''$qarg'' //" >>$tmpfile done echo >>$tmpfile # cygstart opens a new window which vanishes as soon as the command is complete. # Give the user a chance to see the output. echo "echo -ne ''/n$0: press <enter> to close window... ''" >>$tmpfile echo "read enter" >>$tmpfile # Clean up after ourselves. echo "rm -f $tmpfile" >>$tmpfile # Do it as Administrator. cygstart --action=runas /bin/bash $tmpfile


Probablemente necesites ejecutar cygwin shell como administrador. Puede hacer clic con el botón derecho en el acceso directo y hacer clic en ejecutar como administrador o ir a las propiedades del acceso directo y verificarlo en la sección de compatibilidad. Solo ten cuidado ... los permisos de root pueden ser peligrosos.


Respondí esta pregunta en SuperUser pero solo después de que el OP descartara la respuesta inútil que era en ese momento la única respuesta a la pregunta.

Esta es la forma correcta de elevar los permisos en Cygwin, copiados de mi propia respuesta en SuperUser:

Encontré la respuesta en la lista de correo de cygwin . Para ejecutar el command con privilegios elevados en Cygwin, preceda el comando con cygstart --action=runas como este:

$ cygstart --action=runas command

Esto abrirá un cuadro de diálogo de Windows solicitando la contraseña de administrador y ejecutará el comando si se ingresa la contraseña correcta.

Esto es fácilmente guionado, siempre y cuando ~/bin esté en su camino. Crea un archivo ~/bin/sudo con el siguiente contenido:

#!/usr/bin/bash cygstart --action=runas "$@"

Ahora haz que el archivo sea ejecutable:

$ chmod +x ~/bin/sudo

Ahora puede ejecutar comandos con privilegios elevados reales :

$ sudo elevatedCommand

Es posible que deba agregar ~/bin a su ruta. Puede ejecutar el siguiente comando en Cygwin CLI, o agregarlo a ~/.bashrc :

$ PATH=$HOME/bin:$PATH

Probado en Windows 8 de 64 bits.


Sobre la base de la respuesta de dotancohen estoy usando un alias:

alias sudo="cygstart --action=runas"

Funciona como un encanto:

sudo chown User:Group <file>


Tratar:

chmod -R ug+rwx <dir>

donde <dir> es el directorio en el que desea cambiar los permisos.


Una forma muy simple de tener un shell cygwin y subcapas correspondientes para operar con privilegios de administrador es cambiar las propiedades del enlace que abre el shell inicial.

Lo siguiente es válido para Windows 7+ (tal vez para versiones anteriores también, pero no lo he marcado)

Normalmente comienzo el shell cygwin desde un enlace cygwin en el botón de inicio (o escritorio). Luego, cambié las propiedades del enlace cygwin en las pestañas

/ Compatibilidad / Nivel de privilegio /

y marcó la casilla,

"Ejecute este programa como administrador"

Esto permite que el shell cygwin se abra con privilegios de administrador y las subcapas correspondientes también.


Una nueva propuesta para mejorar SUDO para CygWin de GitHub en este hilo , llamado TOUACExt :

  • Abre automáticamente sudoserver.py.
  • Se cierra automáticamente sudoserver.py después del tiempo de espera (15 minutos por defecto).
  • Solicite el mensaje Sí / No de elevación de UAC para los usuarios administradores.
  • Solicitar usuario / contraseña de administrador para usuarios que no sean administradores.
  • Funciona de forma remota (SSH) con cuentas de administrador.
  • Crea registro.

Aún en Pre-Beta , pero parece estar funcionando.


Use esto para obtener una ventana de administrador con bash o cmd en ejecución, desde cualquier menú de contexto de directorios. Simplemente haga clic derecho en el nombre de un directorio y seleccione la entrada o presione el botón resaltado.

Esto se basa en la herramienta chere y la respuesta desafortunadamente no funciona (para mí) de link_boy. Funciona bien para mí usando Windows 8,

Un efecto secundario es el color diferente en la ventana del cmd de administración. Para usar esto en bash, puede cambiar el archivo .bashrc del usuario administrador.

No pude obtener la versión de "fondo" (haga clic derecho en un directorio abierto) para ejecutar. Siéntase libre de agregarlo.

Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash] @="&Bash Prompt Here" "Icon"="C://cygwin//Cygwin.ico" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash/command] @="C://cygwin//bin//bash -c /"/bin/xhere /bin/bash.exe ''%L''/"" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash_root] @="&Root Bash Prompt Here" "Icon"="C://cygwin//Cygwin.ico" "HasLUAShield"="" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_bash_root/command] @="runas /savecred /user:administrator /"C://cygwin//bin//bash -c ///"/bin/xhere /bin/bash.exe ''%L''///"/"" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_cmd] @="&Command Prompt Here" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_cmd/command] @="cmd.exe /k cd %L" "HasLUAShield"="" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_cmd_root] @="Roo&t Command Prompt Here" "HasLUAShield"="" [HKEY_CLASSES_ROOT/Directory/shell/cygwin_cmd_root/command] @="runas /savecred /user:administrator /"cmd.exe /t:1E /k cd %L/""