2010-12-18 56 views
8

Antecedentes: Estoy tratando de escribir un archivo [.bat] por lo que se puede hacer doble clic en él y una escritura del golpe conseguirá invocado. El script bash iniciará algunas aplicaciones GUI de Windows para monitorear las temperaturas de GPU/CPU. Acabo de hacer una nueva instalación de v1.7.7-1 cygwin (descargado hoy en día) y Windows 7."Permiso denegado" usando cygwin en Windows

Código: monitor de temps.bat:

C:\cygwin\bin\bash.exe ~/bin/monitor-temps.bash 
pause 

Código: monitor de temps.bash:

#!/usr/bin/bash 
"/cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe" & 

Salida: Después hago doble clic en el archivo [.bat], aparece un:

C:\Users\michael\Desktop>C:\cygwin\bin\bash.exe ~/bin/monitor-temps.bash 

C:\Users\michael\Desktop>pause 
Press any key to continue . . . /home/michael/bin/monitor-temps.bash: line 2: /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe: Permission denied 

todavía consigo el error mismos permisos cuando cd I en el directorio manualmente y ejecutar la aplicación.

Permisos: Desde mi experiencia con problemas de permisos en Linux, todo se ve bien porque soy el usuario que creo que soy, y el archivo tiene los permisos esperados:

$ whoami 
michael 

$ ls -l GPU* 
-rwx------+ 1 michael  None 890720 2010-12-01 19:23 GPU-Z.0.4.8.exe 

Pregunta: ¿Alguien sabe cómo solucionar esto? ¿Me estoy perdiendo de algo?

Respuesta

5

La forma más fácil de solucionar este problema es:

  1. Descargar Sysinternals ProcMon, iniciarlo y se deja correr por un tiempo.
  2. Excluir todos los procesos que generan ruido.
  3. Cuando el registro se vuelve menos ocupado, inicie el intento de acceso al archivo.
  4. Busque en el registro de ProcMon los mensajes de "Acceso denegado".
  5. Investigar. Debería ser fácil de arreglar.
4

-rwx ------ + podría ser el problema. Algunos acl ocultos pueden prohibir x para ti. Restablezca su acl con setfacl luego.

$ cat >/tmp/faclx <<EOF 
user::rwx 
group::r-- 
mask:rwx 
other:r-- 
EOF 
$ setfacl -f /tmp/faclx /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe 

o necesita permisos elevados:

$ cygstart --action=runas /cygdrive/c/Users/michael/Desktop/apps_and_drivers/GPU-Z.0.4.8.exe 
9

Yo creo que hay que cambiar el directorio o archivo de autorización. Si desea cambiar el permiso de un archivo o directorio, debe agregar la ruta completa con el código.

Como si desea cambiar permisos en la carpeta cocos2d-x en C: \ sudirectorio (estoy en Windows, en Mac sería / en lugar de \) escribir el código en la consola Cygwin:

chmod -R 775 /cygwindrive/c/yourDirectory 
+1

esto no funciona en C:/para mí . Permiso denegado, tuvo que ejecutar la consola de cygwin como administrador. – jcarballo

+1

Cambiar el permiso del archivo bash fue suficiente para mí. –

12

Como desarrollador, utilizo un acceso directo para proporcionar una interfaz de línea de comandos (CLI) que se comporta de manera similar a Linux, en mi entorno de Windows, y me encontré con el mismo problema al tratar de descomprimir un archivo.

La solución fue establecer el acceso directo a "Ejecutar como administrador".

Si está utilizando este método para acceder a su entorno Cygwin, vaya a las propiedades del acceso directo, seleccione el botón Avanzado para obtener las opciones de "Ejecutar como administrador", marque la casilla, haga clic en Aceptar. Y listo !! También puede establecer su archivo por lotes para hacer esto, haciendo un atajo y haciendo lo anterior.

Espero que ayude!

+0

Mucho más simple que jugar con setfacl, lo que no me sirvió de nada.Simplemente haga clic con el botón derecho del mouse en el icono de Cygwin, seleccione "Ejecutar como administrador" y, de repente, la creación de la carpeta en tiempo de compilación funcionó. Gracias, @Darkstrumm! – Redboots

+0

Necesitaba editar '/ etc/nsswitch.conf' para arreglar un problema de perfil y comenzar la terminal como administrador era lo único que me permitía hacer eso. ¡Gracias! – kenchilada

0

Tuve este problema, y ​​lo solucioné por cd en el directorio que contiene el cuadro que acabo de hacer (empaquetado, o reempaquetado). Entonces vagrant box add <file.box> --name <name>. Creo que los PATHs crean cosas y hacen que fallen. Luego verifica con vagrant box list. Luego I mkdir coolbox; cd coolbox. Entonces solo vagrant init <name> y todo aparece como magia.

-1

simplemente cambie el modo de las secuencias de comandos utilizando el comando chmod para que sea ejecutable. ver hombre chmod para más detalles.

+1

Si se encuentra con problemas de permisos de Windows/cygwin, chmod no tendrá ningún efecto. Créanme, sigo intentándolo, pero mis archivos terminan con 755 permisos cada vez. Cambiar los permisos de seguridad en Windows tampoco sirve. – Redboots

2
  • Comprobar la mesa de montaje con cat /proc/mounts o mount y asegúrese de que cada punto de montaje de /, /usr/bin, /usr/lib tiene una bandera noacl. Si falta, corrija /etc/fstab y reinicie. (El reinicio sincronizó el indicador noacl del punto de montaje raíz para mí, y no sé si se puede lograr lo mismo sin reiniciar).

  • Busque un registro NULL SID y otros registros extraños en la salida de icacls contra el archivo. Aparecen agregados al escribir por la capa de traducción POSIX ACL en Cygwin (usar "noacl" en/etc/fstab permite desactivarlo, pero el daño ya estará hecho).

    Restablecer la ACL de Windows solo en el archivo puede no ser suficiente si los padres que lo contienen tienen el registro NULL SID. Uno tiene que ejecutar

    icacls c:\cygwin64 /reset /t /l /c 
    

    del símbolo del sistema para eliminar los registros extraños de la ACL de Windows en cada archivo y directorio.

Actualizar Otros comandos restablecer la propiedad, eliminar las ACL por defecto y mostrar las ACL de un binario conocido antes y después de los cambios:

set croot=c:\cygwin64 
icacls %croot%\bin\ls.exe 
%croot%\bin\getfacl /bin/ls 
takeown /F %croot% /R /D Y > nul 
icacls %croot% /reset /T /C /L /Q 
icacls %croot%\bin\ls.exe 

%croot%\bin\getfacl /bin/setfacl 
%croot%\bin\getfacl /bin/find 
%croot%\bin\setfacl -bk /bin/find 
%croot%\bin\find -P/-xdev -exec /bin/setfacl -bk "{}" + 

icacls %croot%\bin\ls.exe 
%croot%\bin\getfacl /bin/ls 
+0

Además de lo anterior, pensé que necesitaba eliminar los permisos heredados, estableciendo el acceso completo para. \ Administrators y. \ SYSTEM. Supongo que esto se puede escribir con un '' 'icacls% croot%/grant adicional: r SYSTEM: F Administradores: F/t/c/l/q'''. –

+0

https://gist.github.com/ilatypov/5956ae36da8ff0aa2212eb2004def8c4 –