Cygwin mkdir crea un directorio para el que no tengo permisos

10

Usando la última versión de cygwin64 en Windows 10. He logrado obtener un directorio fooque tiene algo extraño sobre sus permisos. No estoy muy seguro de cómo sucedió esto, pero aquí están los síntomas:

$ 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

Esto no sucede para otros directorios, por ejemplo /f/temp/ok. Usando lsinterruptores no puedo ver ninguna diferencia entre f/temp/oky /f/temp/foo.

Si lo hago chmod 775 bar, puedo ingresar bar, pero hacer un directorio debajo bartiene el mismo problema. Por lo que este problema es detener mí haciendo git initen /f/temp/foo. Hacer chown -R Mm *en el padre no hace ninguna diferencia.

Mi pregunta es: ¿Qué está causando este problema y cuál es la solución adecuada?

Hay algunas diferencias visibles con, icaclspero no estoy seguro de cómo interpretarlas:

$ 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)

Tengo una solución por ahora: cree otro directorio debajo /f/temp, luego use cp -rpara copiar todos los archivos fooen el nuevo directorio, luego elimine fooy cambie el nombre del nuevo directorio. Si lo uso en cp -alugar del cp -rproblema persiste.

MM
fuente
1
trysetfacl -b foo
matzeri
@matzeri que parecía funcionar - si puedes escribir una respuesta con una explicación, votaré y aceptaré
MM

Respuestas:

10

El exceso de DENY mostrado por icacls puede ser causado por los cambios recientes en cygwin dll (entre 2.3 y 2.5 actual). Tomó algo de tiempo estar en lo cierto y podría haber dejado archivos o directorios con ACL desconcertante.

Para desinfectar las ACL, -bse agregó un modificador a setfacl

setfacl -b foo

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

matzeri
fuente
1
El problema se originó cuando descomprimí algunos archivos creados por alguien con una versión diferente de cygwin, por lo que esa explicación tiene sentido
MM