it-swarm.com.de

"Berechtigung verweigert" bei Verwendung von Cygwin in Windows

Hintergrund: Ich versuche, eine [.bat] -Datei zu schreiben, damit ich darauf doppelklicken kann und ein Bash-Skript aufgerufen wird. Das Bash-Skript startet einige Windows-GUI-Apps, um die GPU/CPU-Temperaturen zu überwachen. Ich habe gerade eine Neuinstallation von cygwin v1.7.7-1 (heute heruntergeladen) und Windows 7 durchgeführt.

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" &

Ausgabe: Nachdem ich die [.bat] -Datei doppelt geklickt habe, erhalte ich eine:

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

Ich erhalte immer noch den gleichen Berechtigungsfehler, wenn ich in das Verzeichnis cd einsteige und die Anwendung manuell ausführte.

Berechtigungen: Aufgrund meiner Erfahrung mit Berechtigungsproblemen in Linux sieht alles gut aus, da ich der Benutzer bin, von dem ich denke, dass ich es bin, und die Datei die erwarteten Berechtigungen hat:

$ whoami
michael

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

Frage: Weiß jemand, wie man das beheben kann? Fehlt mir etwas?

12
Mike

Als Entwickler verwende ich eine Verknüpfung, um eine Befehlszeilenschnittstelle (CLI) bereitzustellen, die sich in meiner Windows-Umgebung ähnlich wie Linux verhält und bei dem Versuch, eine Datei zu entpacken, das gleiche Problem hatte.

Das Update bestand darin, die Verknüpfung auf "Als Administrator ausführen" zu setzen.

Wenn Sie diese Methode für den Zugriff auf Ihre Cygwin-Umgebung verwenden, wechseln Sie zu den Eigenschaften der Verknüpfung. Klicken Sie auf die Schaltfläche Erweitert, um die Optionen auf "Als Administrator ausführen" zu setzen. Aktivieren Sie das Kontrollkästchen, und klicken Sie auf OK. Und los geht's !! Sie können Ihre Batch-Datei auch so einstellen, dass Sie dies tun, indem Sie eine Verknüpfung dazu erstellen und das oben beschriebene tun.

Hoffentlich hilft das!

13
Darkstrumn

Ich denke, Sie müssen das Verzeichnis oder die Dateiberechtigung ändern. Wenn Sie die Berechtigung einer Datei oder eines Verzeichnisses ändern möchten, müssen Sie den vollständigen Pfad mit dem Code hinzufügen.

Als ob Sie die Berechtigung für den Ordner cocos2d-x unter C:\yourDirectory ändern möchten (ich bin unter Windows; unter Mac würde es / anstelle von \ sein), schreiben Sie den Code auf der cygwin-Konsole:

chmod -R 775 /cygwindrive/c/yourDirectory
10
Sajidur Rahman
  • Überprüfen Sie die Mount-Tabelle mit cat /proc/mounts oder mount, und stellen Sie sicher, dass jeder Mount-Punkt aus /, /usr/bin, /usr/lib ein Flag noacl enthält. Wenn es fehlt, korrigieren Sie /etc/fstab und starten Sie den Computer neu. (Beim Neustart wurde das Flag noacl des Root-Mount-Punkts für mich synchronisiert, und ich weiß nicht, ob dies auch ohne Neustart erreicht werden kann). 

  • Suchen Sie nach einem NULL-SID-Datensatz und anderen seltsamen Datensätzen in der Ausgabe von icacls für die Datei. Sie erscheinen beim Schreiben durch die POSIX ACL-Übersetzungsschicht in Cygwin hinzugefügt (die Verwendung von "noacl" in/etc/fstab ermöglicht das Deaktivieren, aber der Schaden ist bereits entstanden). 

    Das Zurücksetzen der Windows-ACL nur für die Datei reicht möglicherweise nicht aus, wenn die übergeordneten Eltern den NULL-SID-Datensatz hatten. Man muss laufen 

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

    aus der Eingabeaufforderung, um die überflüssigen Datensätze aus der Windows-Zugriffssteuerungsliste in jeder Datei und jedem Verzeichnis zu entfernen.

Update Andere Befehle setzen den Besitz zurück, entfernen Standard-ACLs und zeigen ACLs eines bekannten Binärs vor und nach den Änderungen an:

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

Der einfachste Weg, dies zu beheben, ist:

  1. Laden Sie Sysinternals ProcMon herunter, starten Sie es und lassen Sie es einige Zeit laufen.
  2. Schließen Sie alle Prozesse aus, die Geräusche erzeugen.
  3. Wenn das Protokoll weniger ausgelastet ist, starten Sie den Dateizugriffsversuch.
  4. Durchsuchen Sie das ProcMon-Protokoll nach "Access Denied" -Nachrichten.
  5. Untersuchen. Sollte leicht zu reparieren sein.
6
Tomalak

-rwx ------ + könnte das Problem sein. Einige verborgene ACL können x für Sie verbieten. Setzen Sie Ihre ACL dann mit setfacl zurück.

$ 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

Oder Sie benötigen erhöhte Berechtigungen:

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

Ich hatte dieses Problem und behebte es mit cd in dem Verzeichnis, in dem sich die gerade erstellte Box befindet (verpackt oder neu verpackt). Dann vagrant box add <file.box> --name <name>. Ich denke, die PATHs fvck die Dinge auf und führen dazu, dass sie scheitern. Dann überprüfen Sie noch einmal mit vagrant box list. Dann mkdir coolbox; cd coolbox. Dann vagrant init <name> und es kommt alles wie von Zauberhand.

1
Felipe Alvarez

git bash, führe den Befehl so aus: cmd "/C postgresql-10.5-2-windows-x64.exe --unattendedmodeui minimal --mode unattended --servicename 'postgreSQL'"

0
jackchen