Как/почему cygwin нарушает разрешения Windows?

У нас есть жалобы «с мест» (то есть от системных администраторов, устанавливающих программное обеспечение), что cygwin «искажает» разрешения Windows в NTFS (Windows 7/10/2008/2012 и т. д.).

Проблема использования

Общий вариант использования таков:

  • Сисадмин запускает какой-то «установщик программного обеспечения» из строки cmd cygwin bash
  • Установщик работает нормально
  • Сисадмин пытается запустить службы Windows

Результат: служба не запускается

Шаги обхода

Эти шаги, похоже, решают проблему:

  • Системный администратор сбрасывает разрешения ntfs с помощью команды Windows ICACLS: (в этом примере «acme» — это вновь созданный каталог. Эта команда устанавливает acme и его дочерние элементы для повторного наследования разрешений из папки «d:\instances»

    d:\instances> icacls acme /RESET /T /C /Q

  • Сисадмин запускает службу

Результат: служба Windows запускается

Вопрос

  • Что заставляет cygwin обрабатывать разрешения для вновь написанных файлов иначе, чем powershell? Дело в неправильной версии umask?
  • Может ли системный администратор предпринять шаги заранее, чтобы убедиться, что cygwin правильно устанавливает разрешения?

заранее спасибо


person user331465    schedule 31.03.2017    source источник
comment
пример вывода icacls для поврежденного и правильного файла может дать некоторую подсказку. Вы уверены, что пользователь один и тот же для установки из cygwin и power shell?   -  person matzeri    schedule 01.04.2017
comment
Я на 90% уверен, что проблемы возникают только в том случае, если пользователь X устанавливает из cygwin, однако проблемы возникают, если UserX использует powershell. Я также знаю, что мы видели проблемы с другим вариантом использования: а) UserX устанавливает из cygwin и б) пользователь Y не может удалять файлы, потому что они принадлежат UserX.   -  person user331465    schedule 01.04.2017
comment
Глава Права доступа к файлам на cygwin.com/cygwin-ug-net/ntsec.html объясняет, почему Cygwin упорядочивает списки ACL, что не является каноническим. Это ничего не нарушает и не противоречит определению. Это единственный способ сопоставить разрешения Posix с ACL.   -  person FelixD    schedule 08.03.2021


Ответы (2)


Я нашел ответ здесь; это относится к этому письму списка рассылки.

Вам нужно отредактировать Cygwin /etc/fstab и добавить «noacl» в список параметров монтирования.

person ulatekh    schedule 16.05.2018
comment
Вы должны опубликовать решение здесь (а также сохранить ссылки), потому что URL могут измениться/исчезнуть, и если это произойдет, ответ станет недействительным. - person CristiFati; 02.01.2020
comment
Имейте в виду, что установка noacl не позволит Cygwin использовать разрешения файлов Posix, такие как исполняемые биты. т.е. вы сокращаете функциональность Cygwin/Posix и можете столкнуться с проблемами с инструментами Cygwin. - person FelixD; 08.03.2021

Чтобы добавить к ответу ulathek, вот копия двух URL-адресов:

Первый:

How to fix incorrect Cygwin permission in Windows 7

Cygwin started to behave quite strangely after recent updates. I was not able to edit files in vim, because it was complaining that files are read only. Even cp -r didn’t work correctly. Permission of new directory was broken and I was not able to remove it. Pretty weird behavior.

E.g. ls -l

total 2
----------+ 1 georgik None 34 Jul 14 18:09 index.jade
----------+ 1 georgik None 109 Jul 14 17:40 layout.jade

Hm. It is clear that something is wrong with permission. Even owner has no permission on those files.

Output of mount command:

C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)

I found a solution at cygwin forum. It’s quite easy to fix it.

Open /etc/fstab and enter following line:

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

Save it. Close all cygwin terminals and start new terminal.

Output of mount:

C: on /cygdrive/c type ntfs (binary,noacl,posix=0,user,noumount,auto)

Output of ls -l

total 2
-rw-r--r-- 1 georgik None 34 Jul 14 18:09 index.jade
-rw-r--r-- 1 georgik None 109 Jul 14 17:40 layout.jade

Второй:

7/14/2010 10:57 AM
> Drive Y is a mapping to a network location. Interestingly, ls -l
>> /cygdrive returns:
>>   d---------+ 1 ????????       ????????     24576 2010-07-09 11:18 c
>>   drwx------+ 1 Administrators Domain Users     0 2010-07-14 06:58 y
>>
>> The c folder looks weird, the y folder looks correct.
>>     
> Try ls -ln /cygdrive.  The user and group ownerships on the root of the
> C: drive are most likely not found in your passwd and group files.  The
> -n option for ls will print the user and group IDs rather than try to
> look up their names.  Unfortunately, I can't think of any way offhand to
> generate the passwd and group entries given only user and group IDs.
> Maybe someone else can comment on that.
>   

I think your answer is correct:
  $ ls -ln /cygdrive
  total 24
  d---------+ 1 4294967295 4294967295 24576 2010-07-09 11:18 c
  drwx------+ 1        544      10513     0 2010-07-14 11:45 y

I edited my /etc/fstab file (it contained only commented lines) and
added this line at the end of the file:
  none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

I closed all my Cygwin processes, opened a new terminal and did an ls-l
on visitor.cpp again:
  -rw-r--r-- 1 cory Domain Users 3236 2010-07-11 22:37 visitor.cpp

Success!!! The permissions are now reported as 644 rather than 000 and I
can edit the file with Cygwin vim and not have bogus read-only issues.
Thank you Jeremy.

cory
person user15513573    schedule 13.04.2021