Cygwin mkdir crée un répertoire auquel je n'ai pas les autorisations

10

En utilisant la dernière version de cygwin64 dans Windows 10. J'ai réussi à obtenir un répertoire fooqui a quelque chose d'étrange sur ses autorisations. Je ne sais pas trop comment cela s'est produit, mais voici les symptômes:

$ 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

Cela ne se produit pas pour d'autres répertoires, par exemple /f/temp/ok. En utilisant des lscommutateurs, je ne vois aucune différence entre f/temp/oket /f/temp/foo.

Si je le fais, chmod 775 barje peux entrer bar, mais créer un répertoire sous bara le même problème. Donc , ce problème me arrêter de faire git initdans /f/temp/foo. Faire chown -R Mm *dans le parent ne fait aucune différence.

Ma question est: Quelle est la cause de ce problème et quelle est la solution appropriée?

Il y a quelques différences visibles icaclsmais je ne sais pas comment les interpréter:

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

J'ai une solution de contournement pour l'instant: créez un autre répertoire sous /f/temp, puis utilisez cp -rpour copier tous les fichiers foodans le nouveau répertoire, puis supprimez fooet renommez le nouveau répertoire. Si j'utilise à la cp -aplace cp -rle problème persiste.

MM
la source
1
essayersetfacl -b foo
matzeri
@matzeri qui semblait fonctionner - si vous pouvez rédiger une réponse avec une explication, je voterai et accepterai
MM

Réponses:

10

L'excès de DENY montré par icacls peut être provoqué par les changements récents de cygwin dll (entre 2,3 et 2,5 actuel). Il a fallu un certain temps pour avoir raison et aurait pu laisser des fichiers ou un répertoire avec une ACL déroutante.

Pour désinfecter les ACL, un -bcommutateur a été ajouté à setfacl

setfacl -b foo

Pour référence https://cygwin.com/cygwin-ug-net/ov-new.html#ov-new2.4s

matzeri
la source
1
Le problème est apparu lorsque j'ai décompressé certains fichiers créés par quelqu'un avec une version différente de cygwin, donc cette explication est logique
MM