web-dev-qa-db-fra.com

"Autorisation refusée" avec cygwin sous Windows

Arrière-plan: J'essaie d'écrire un fichier [.bat] pour pouvoir double-cliquer dessus et un script bash sera appelé. Le script bash lancera quelques applications d’interface graphique Windows pour surveiller les températures des GPU/CPU. Je viens de faire une nouvelle installation de cygwin v1.7.7-1 (téléchargée aujourd'hui) et de Windows 7.

Code: Monitor-temps.bat:

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

Code: Monitor-temps.bash:

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

Sortie: Après avoir double-cliqué sur le fichier [.bat], je reçois 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

J'obtiens toujours la même erreur de permission lorsque je cd dans le répertoire et que j'exécute manuellement l'application.

Autorisations: D'après mon expérience des problèmes d'autorisations sous Linux, tout semble bien car je suis l'utilisateur que je pense, et le fichier a les autorisations attendues:

$ whoami
michael

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

Question: Quelqu'un sait-il comment résoudre ce problème? Est-ce que je manque quelque chose?

12
Mike

En tant que développeur, j'utilise un raccourci pour fournir une interface de ligne de commande (CLI) se comportant de manière similaire à Linux, dans mon environnement Windows, et rencontrant le même problème en essayant de décompresser un fichier.

Le correctif consistait à définir le raccourci sur "Exécuter en tant qu'administrateur".

Si vous utilisez cette méthode pour accéder à votre environnement Cygwin, accédez aux propriétés du raccourci, sélectionnez le bouton Avancé pour obtenir les options "Exécuter en tant qu'administrateur", cochez la case puis cliquez sur OK. Et c'est parti !! Vous pouvez également configurer votre fichier de commandes pour ce faire, en créant un raccourci vers celui-ci et en procédant comme indiqué ci-dessus.

J'espère que cela pourra aider!

13
Darkstrumn

Je pense que vous devez changer le répertoire ou l'autorisation de fichier. Si vous souhaitez modifier l'autorisation d'un fichier ou d'un répertoire, vous devez ajouter le chemin complet avec le code.

Comme si vous vouliez changer les permissions sur le dossier cocos2d-x sur C:\yourDirectory (sur Windows, ce serait / au lieu de \), écrivez le code sur la console cygwin:

chmod -R 775 /cygwindrive/c/yourDirectory
10
Sajidur Rahman
  • Vérifiez la table de montage avec cat /proc/mounts ou mount et assurez-vous que chaque point de montage en dehors de /, /usr/bin, /usr/lib a un drapeau noacl. S'il est manquant, corrigez /etc/fstab et redémarrez. (Le redémarrage a synchronisé pour moi l'indicateur noacl du point de montage racine et je ne sais pas si cela peut être réalisé sans redémarrage). 

  • Recherchez un enregistrement NULL SID et d'autres enregistrements étranges dans la sortie de icacls par rapport au fichier. Ils apparaissent ajoutés lors de l'écriture par la couche de traduction ACL POSIX dans Cygwin (l'utilisation de "noacl" dans/etc/fstab permet de désactiver cela, mais le dommage aura déjà été causé). 

    Réinitialiser la liste de contrôle d'accès Windows juste sur le fichier peut ne pas être suffisant si les parents qui la contenaient avaient l'enregistrement NULL SID. Il faut courir 

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

    depuis l'invite de commande pour supprimer les enregistrements superflus de la liste de contrôle d'accès Windows dans chaque fichier et répertoire.

Update D'autres commandes réinitialisent la propriété, suppriment les ACL par défaut et affichent les ACL d'un binaire connu avant et après les modifications:

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
6
eel ghEEz

Le moyen le plus simple de résoudre ce problème est:

  1. Télécharger Sysinternals ProcMon , démarrez-le et laissez-le fonctionner pendant un moment.
  2. Exclure tous les processus générant du bruit.
  3. Lorsque le journal devient moins occupé, démarrez votre tentative d'accès au fichier.
  4. Recherchez dans le journal ProcMon les messages "Accès refusé".
  5. Enquêter. Devrait être facile à réparer.
6
Tomalak

-rwx ------ + pourrait être le problème. Certains ACL cachés peuvent vous interdire x. Réinitialisez votre ACL avec setfacl alors.

$ 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

Ou vous avez besoin d'autorisations élevées:

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

J'ai eu ce problème et je l'ai corrigé par cd dans le répertoire qui contient la boîte que je viens de créer (empaquetée ou reconditionnée). Puis vagrant box add <file.box> --name <name>. Je pense que les PATHs ont résolu le problème et l'ont fait échouer. Puis double-vérifier avec vagrant box list. Alors je mkdir coolbox; cd coolbox. Ensuite, je viens de vagrant init <name> et tout se passe comme par magie.

1
Felipe Alvarez

git bash, exécutez la commande comme ceci: cmd "/C postgresql-10.5-2-windows-x64.exe --unattendedmodeui minimal --mode unattended --servicename 'postgreSQL'"

0
jackchen