Как cygwin (прошлый 2015 г.) определяет и хранит групповое владение NTFS?

289
Peter A. Schneider

Насколько я знаю, в NTFS нет концепции владельца группового файла, как в POSIX. (Пожалуйста, исправьте меня, если я ошибаюсь.) Пользователь может быть членом одной или (обычно) нескольких групп, и файл может иметь отдельные разрешения для каждой группы, но у файла нет владельца группы в дополнение к его простой ванили «владелец». Тем не менее, «простой владелец» может быть, возможно, путаницей, группой.

Теперь, когда я делаю ls -lв cygwin 2.8.0 bash на Windows 7 для файла в NTFS (машина и учетная запись находятся в среде Active Directory), я вижу группу:

$ ll -n cleartool golden-dev-val.cfgspec -rwxrwxrwx+ 1 2736485 1049089 277 9. Mai 12:34 cleartool -rwxrwxrwx+ 1 1493656 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec 

(Длинный GID из другого домена.) Сначала я подумал, что cygwin выводит группу из основной группы владельца. Это заставило бы группу всегда меняться вместе с пользователем. Тем не менее, эти два, кажется, независимы:

$ chown 2736485 golden-dev-val.cfgspec  $ ll -n cleartool golden-dev-val.cfgspec -rwxrwxrwx+ 1 2736485 1049089 277 9. Mai 12:34 cleartool -rwxrwxrwx+ 1 2736485 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec  $ chgrp 3556770305 cleartool  $ ll -n cleartool golden-dev-val.cfgspec -rwxrwxrwx+ 1 2736485 3556770305 277 9. Mai 12:34 cleartool -rwxrwxrwx+ 1 2736485 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec 

Я прочитал https://cygwin.com/cygwin-ug-net/ntsec.html, в котором описано, как идентификаторы Posix UID и GID вычисляются из Windows SID; но я не вижу, как cygwin хранит групповое владение файлами (что не является функцией Windows / NTFS, поэтому для него требуется дополнение cygwin) отдельно от владения пользователем (которое является функцией Windows / NTFS, поэтому оно легко доступно) ,

Существует примечание о хранении комментариев такого рода <cygwin key="value" key="value" [...] />для локальных учетных записей пользователей net user ..., включая ключ «группа»; но это для локальных учетных записей, и это не для файла, поэтому он не может ответить на мой вопрос.

Так как же Cygwin хранит и / или получает групповое владение файлами? Это механизм Windows? Если да, есть ли инструменты Windows для управления ими?

0
использовать `cacls `чтобы увидеть, как NTFS хранит все права доступа к файлу ACL matzeri 6 лет назад 0
Иди посмотри на исходный код. DavidPostill 6 лет назад 0
@matzeri Я сделал это, и я могу видеть, какие разрешения имеют различные пользователи или группы. Что я не вижу, так это подсказку, какая из различных групп будет показана как «владелец группы» файла, когда я сделаю stat или ls-l в cygwin. Peter A. Schneider 6 лет назад 0
@DavidPostill Сначала я подумал, что вы троллинг, но, учитывая, что вы мод, я полагаю, вы это имеете в виду. (В других случаях я обнаружил, что аналогичные базы кода непрозрачны для случайного посетителя до такой степени, что я даже не мог определить место, где выполнялись определенные вычисления, не говоря уже о том, чтобы их осмотреть.) У вас есть подсказка, где искать? (Я не имею в виду, что вы делаете мою работу, но, возможно, вы знакомы с базой кода cygwin, хотя cygwin не присутствует в ваших тегах.) Что вы наверняка можете подтвердить, так это мое понимание того, что NTFS не имеет понятия о «владелец группы» в смысле POSIX. Peter A. Schneider 6 лет назад 0
@ PeterA.Schneider Насколько я могу судить, код ACL находится в [newlib] (https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86_64%2Fcygwin%2Fcygwin-2.8.0-1 -src & Grep = newlib). Я не углубился в это более глубоко. DavidPostill 6 лет назад 0
Когда я сказал, посмотрите на исходный код, это потому, что это то, что кто-то еще должен будет сделать, чтобы ответить на ваш вопрос (если только он не знает ответ, что маловероятно). Cygwin использует API ACL POSIX.1e и где-то отображает это на вызовы Win32 API. Это бит, который вам нужно найти в исходном коде. DavidPostill 6 лет назад 0

1 ответ на вопрос

1
dhvu

После поверхностного просмотра исходного кода cygwin, я считаю, что chgrp.exeэто просто косвенный вызов RtlSetGroupSecurityDescriptor()- через chown(2)и fhandler_disk_file::set_posix_access().

Эта функциональность предлагается на уровне интерфейса командной строки subinacl.exe :

subinacl /file testfile /setprimarygroup=groupname 

В моем тесте, однако, инструмент требует SeSecurityPrivilege, чтобы добиться успеха, и SeBackupPrivilege, чтобы не отображать предупреждение.

Похожие вопросы