Cygwin mkdir erstellt ein Verzeichnis, für das ich keine Berechtigungen habe

10

Verwenden der neuesten Version von cygwin64 in Windows 10. Ich habe es geschafft, ein Verzeichnis zu erhalten foo, dessen Berechtigungen etwas Seltsames haben. Ich bin mir nicht ganz sicher, wie das passiert ist, aber hier sind die Symptome:

$ cd /f/temp/foo
$ ls -lad .
drwxrwx---+ 1 Mm None 0 Jun 16 14:03 .
$ mkdir bar
$ ls -lad bar
d---rwx---+ 1 Mm None 0 Jun 16 14:17 .
$ cd bar
Permission denied
$ umask
0022

Dies ist bei anderen Verzeichnissen nicht der Fall, z /f/temp/ok. Bei Verwendung von lsSchaltern kann ich keinen Unterschied zwischen f/temp/okund feststellen /f/temp/foo.

Wenn ich das tue, chmod 775 barkann ich eingeben bar, aber das Erstellen eines Verzeichnisses unter barhat das gleiche Problem. Also dieses Problem mich tun stoppt git initin /f/temp/foo. Das Tun chown -R Mm *im Elternteil macht keinen Unterschied.

Meine Frage ist: Was verursacht dieses Problem und was ist die richtige Lösung?

Es sind einige Unterschiede sichtbar, icaclsaber ich bin mir nicht sicher, wie ich sie interpretieren soll:

$ cd /f/temp
$ icacls ok  >ok.txt
$ icacls foo >foo.txt
$ diff -b ok.txt foo.txt
1c1
< ok NULL SID:(DENY)(Rc,S,REA,WEA,X,DC)
---
> foo NULL SID:(DENY)(Rc,S,REA,WEA,X,DC)
3c3
<   DESKTOP-AO2AIEC\None:(RX)
---
>    DESKTOP-AO2AIEC\None:(Rc,S,RA)
8c8
<   Everyone:(RX)
---
>    Everyone:(Rc,S,RA)
10,11c10,12
<   CREATOR OWNER:(OI)(CI)(IO)(F)
<   CREATOR GROUP:(OI)(CI)(IO)(RX)
---
>    CREATOR OWNER:(OI)(CI)(IO)(DENY)(S,RD,WD,AD,REA,WEA,X,DC)
>    CREATOR OWNER:(OI)(CI)(IO)(D,Rc,WDAC,WO,RA,WA)
>    CREATOR GROUP:(OI)(CI)(IO)(Rc,S,RA)
16c17
<   Everyone:(OI)(CI)(IO)(RX)
---
>    Everyone:(OI)(CI)(IO)(Rc,S,RA)

Ich habe jetzt eine Problemumgehung: Erstellen Sie ein anderes Verzeichnis unter /f/temp, cp -rkopieren Sie dann alle Dateien fooin das neue Verzeichnis, löschen Sie foodas neue Verzeichnis und benennen Sie es um. Wenn ich cp -aanstelle des cp -rProblems benutze , bleibt das Problem bestehen.

MM
quelle
1
versuchensetfacl -b foo
Matzeri
@matzeri das schien zu funktionieren - wenn Sie eine Antwort mit einer Erklärung schreiben können, werde ich abstimmen und akzeptieren
MM

Antworten:

10

Der von icacls gezeigte Überschuss an DENY kann durch die jüngsten Änderungen in der Cygwin-DLL (zwischen 2,3 und aktuell 2,5) verursacht werden. Es dauerte einige Runden, bis es richtig war und Dateien oder Verzeichnisse mit rätselhafter ACL hinterlassen haben könnten.

Um die ACLs -bzu bereinigen, wurde setfacl ein Schalter hinzugefügt

setfacl -b foo

Als Referenz https://cygwin.com/cygwin-ug-net/ov-new.html#ov-new2.4s

Matzeri
quelle
1
Das Problem entstand, als ich einige Dateien entpackte, die von jemandem mit einer anderen Version von Cygwin erstellt wurden, sodass diese Erklärung sinnvoll ist
MM