Estoy tratando de ejecutar un script bash en Cygwin.
Me salen Must run as root, i.e. sudo ./scriptname
errores
chmod 777 scriptname
no hace nada para ayudar
He buscado formas de imitar sudo en Cygwin, para agregar un usuario root, ya que llamar a "su" genera el error su: user root does not exist
, algo útil, y no he encontrado nada.
¿Alguien tiene alguna sugerencia?
what
script que estás intentando ejecutar? No hay equivalente a 'sudo' dentro de un shell cygwin: los derechos son los del usuario win que lanzó el shell cygwin, por lo que el enlace KyleWpppd es bueno para evitar errores como "comando desconocido de sudo". En su caso, parece que es un problema específico con el script que desea ejecutar.Respuestas:
Respondí esta pregunta en SuperUser, pero solo después de que el OP desestimó la respuesta inútil que era en ese momento la única respuesta a la pregunta.
Aquí está la forma correcta de elevar los permisos en Cygwin, copiado de mi propia respuesta en SuperUser:
Encontré la respuesta en la lista de correo de Cygwin . Para ejecutar
command
con privilegios elevados en Cygwin, preceda el comando decygstart --action=runas
esta manera: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ácil de escribir, siempre y cuando
~/bin
esté en su camino. Cree un archivo~/bin/sudo
con el siguiente contenido:Ahora haga el archivo ejecutable:
Ahora puede ejecutar comandos con privilegios elevados reales :
Es posible que deba agregar
~/bin
a su ruta. Puede ejecutar el siguiente comando en la CLI de Cygwin o agregarlo a~/.bashrc
:Probado en Windows 8 de 64 bits.
También podría, en lugar de los pasos anteriores, agregar un alias para este comando a
~/.bashrc
:fuente
cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF
(No puedo entender cómo insertar nuevas líneas en este comentario, así que agregué '\ n's al código) El resto de la RUTA = ... en adelante está bien .ls
es envolverlo en un proceso de larga ejecución como mintty o bash o zsh también. Pero todo aparece en una terminal separada. Que en este punto, podría haberlo abierto a través de la GUI usando ConEMU."$@"
expande a algo como"$1" "$2" "$3" ...
y sin, se$@
expande a$1 $2 $3...
.Probablemente necesite ejecutar el shell cygwin como Administrador. Puede hacer clic con el botón derecho en el acceso directo y hacer clic en ejecutar como administrador o acceder a las propiedades del acceso directo y verificarlo en la sección de compatibilidad. Solo tenga cuidado ... los permisos de root pueden ser peligrosos.
fuente
sudo
en Linux.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
. Sin ella no podría acceder a las carpetas y archivos sincronizados.Sobre la base de la respuesta de dotancohen, estoy usando un alias:
Funciona como un encanto:
Y si tiene instalado SysInternals, incluso puede iniciar un shell de comandos como usuario del sistema muy fácilmente.
fuente
Encontré sudo-for-cygwin , tal vez esto funcionaría, es una aplicación cliente / servidor que usa un script python para generar un proceso hijo en windows (pty) y conecta tty del usuario y el proceso de E / S.
Requiere python en windows y módulos de Python greenlet y eventlet en Cygwin.
fuente
O instale el paquete syswin, que incluye un puerto de su para cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/
fuente
Parece que
cygstart/runas
no se maneja correctamente"$@"
y, por lo tanto, los comandos que tienen argumentos que contienen espacios (y tal vez otros metacaracteres de shell, no los verifiqué) no funcionarán correctamente.Decidí escribir un pequeño
sudo
script que funcione escribiendo un script temporal que haga los parámetros correctamente.fuente
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:
Luego ejecute el archivo por lotes de esta manera:
Por ejemplo:
Solo asegúrese de encerrar cada comando por separado entre comillas dobles. Solo recibirá el aviso UAC una vez que use este método y este procedimiento se ha generalizado para que pueda usar cualquier tipo de comando.
fuente
Una nueva propuesta para mejorar SUDO para CygWin de GitHub en este hilo , llamada TOUACExt :
Todavía en Pre-Beta , pero parece estar funcionando.
fuente
Llegué aquí a través de google, y realmente creo que he encontrado una manera de obtener un aviso raíz completamente funcional en cygwin.
Aquí están mis pasos.
Primero debe cambiar el nombre de la cuenta de administrador de Windows a "root". Haga esto abriendo start manu y escribiendo "gpedit.msc"
Edite la entrada en Política de computadora local> Configuración de computadora> Configuración de Windows> Configuración de seguridad> Políticas locales> Opciones de seguridad> Cuentas: Cambiar nombre de cuenta de administrador
Entonces tendrá que habilitar la cuenta si aún no está habilitada. Política del equipo local> Configuración del equipo> Configuración de Windows> Configuración de seguridad> Políticas locales> Opciones de seguridad> Cuentas: estado de la cuenta de administrador
Ahora cierre sesión e inicie sesión en la cuenta raíz.
Ahora configure una variable de entorno para cygwin. Para hacerlo de manera fácil: haga clic derecho en Mi PC> Propiedades
Haga clic en (en la barra lateral izquierda) "Configuración avanzada del sistema"
Cerca de la parte inferior, haga clic en el botón "Variables del entorno"
En "Variables del sistema", haga clic en el botón "Nuevo ..."
Para el nombre pon "cygwin" sin las comillas. Para el valor, ingrese en su directorio raíz cygwin. (El mío era C: \ cygwin)
Presione OK y cierre todo eso para volver al escritorio.
Abra una terminal Cygwin (cygwin.bat)
Edite el archivo / etc / passwd y cambie la línea.
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!)
Ahora que todo está terminado, este siguiente bit hará que el comando "su" funcione. (No perfectamente, pero funcionará lo suficiente como para usar. No creo que los scripts 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.
Salga de la cuenta raíz y vuelva a su cuenta de usuario normal de Windows.
Después de todo eso, ejecute el nuevo "su.bat" manualmente haciendo doble clic en el explorador. Ingrese su contraseña y continúe y cierre la ventana.
Ahora intente ejecutar el comando su desde cygwin y vea si todo salió bien.
fuente
Al no estar contento con la solución disponible, adopté el script de nu774 para agregar seguridad y facilitar la configuración y el uso. El proyecto está disponible en Github
Para usarlo, simplemente descárguelo
cygwin-sudo.py
y ejecútelo a través depython3 cygwin-sudo.py **yourcommand**
.Puede configurar un alias por conveniencia:
fuente
Use esto para obtener una ventana de administración con bash o cmd ejecutándose, desde cualquier menú contextual 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 cmd admin. Para usar esto en bash, puede cambiar el archivo .bashrc del usuario administrador.
No podría obtener la versión de "fondo" (clic derecho en un directorio abierto) para ejecutar. Siéntase libre de agregarlo.
fuente
Una manera muy simple de tener un shell cygwin y los subshells 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+ (quizás también para versiones anteriores, pero no lo he comprobado)
Normalmente inicio 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.
fuente
Conocí esta discusión buscando algunos detalles sobre la
sudo
implementación en diferentes sistemas operativos. Al leerlo, descubrí que la solución de @ brian-white ( https://stackoverflow.com/a/42956057/3627676 ) es útil pero puede mejorarse ligeramente. Evité crear el archivo temporal y lo implementé para ejecutar todo mediante un solo script.También investigué el siguiente paso de la mejora a la salida dentro de la única ventana / consola. Lamentablemente, sin ningún éxito. Traté de usar tuberías con nombre para capturar STDOUT / STDERR e imprimir en la ventana principal. Pero el proceso hijo no escribió en tuberías con nombre. Sin embargo, escribir en un archivo normal funciona bien.
Dejé cualquier intento de encontrar la causa raíz y dejé la solución actual tal como está. Espero que mi publicación también pueda ser útil.
Mejoras:
mintty
obash
, si no se encuentra el primerofuente
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
se rompe si hay espacios en una discusión? Siempre lo hizo para mí al pasar por cygstart / runas.Basado en la respuesta de @ mat-khor, tomé el syswin
su.exe
, lo guardé comomanufacture-syswin-su.exe
y escribí este script de envoltura. Maneja la redirección de stdout y stderr del comando, por lo que puede usarse en una tubería, etc. Además, el script sale con el estado del comando dado.Limitaciones:
env USERNAME=...
a la invocación del script lo anula. Si se necesitaran otras opciones, el script tendría que distinguir entre syswin-su y los argumentos de comando, por ejemplo, dividir al principio--
..
fuente
No puedo probar esto por completo, no tengo un script adecuado para probarlo y no soy un experto en Linux, pero es posible que pueda hackear algo lo suficientemente cerca.
He intentado estos pasos, y 'parecen' funcionar, pero no sé si será suficiente para sus necesidades.
Para evitar la falta de un usuario 'root':
Esto lo ejecuta como un usuario llamado 'root' en cygwin, que junto con 'Ejecutar como administrador' en el archivo bash.exe podría ser suficiente.
Sin embargo, todavía necesitas un sudo.
Fingí esto (y alguien más con más conocimientos de Linux probablemente pueda fingirlo mejor) creando un archivo llamado 'sudo' en / bin y usando esta línea de comando para enviar el comando a su en su lugar:
La línea de comando 'sudo vim' y otros 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.
fuente
Lo que generalmente hago es tener un asistente de registro "Abrir aquí" para abrir un shell cygwin con privilegios administrativos bastante fácil desde cualquier lugar de mi computadora.
Tenga en cuenta que debe tener instalado el paquete "chere" de
chere -i -m
cygwin, primero use " " desde un shell elevado de cygwin.Suponiendo que su instalación cygwin esté en C: \ cygwin ...
Aquí está el código de registro:
Espero que esto ayude. Avísame si te funciona. 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.
fuente
Tratar:
dónde
<dir>
está el directorio en el que desea cambiar los permisos.fuente