cygwin(2015 年以后)如何确定和存储 NTFS 上的组所有权?

cygwin(2015 年以后)如何确定和存储 NTFS 上的组所有权?

据我所知,NTFS 不像 POSIX 那样具有组文件所有者的概念。(如果我错了,请纠正我。)用户可以是一个或多个组的成员,并且文件可以有单独的权限对于每个组,但文件除了其普通的“所有者”之外,没有组所有者。然而,“普通所有者”可能是一个组,这可能会令人混淆。

ls -l现在,当我在 Windows 7 上的 cygwin 2.8.0 bash 中对 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它描述了如何根据 Windows SID 计算 Posix UID 和 GID;但我不明白 cygwin 如何将文件的组所有权(这不是 Windows/NTFS 功能,因此需要 cygwin 插件)与用户所有权(这是 Windows/NTFS 功能,因此随时可用)分开存储。

<cygwin key="value" key="value" [...] />有一个关于通过 存储本地用户帐户的注释的说明net user ...,其中包括“组”键;但那是针对本地帐户的,而不是针对每个文件的,因此无法回答我的问题。

那么 cygwin 如何存储和/或获取文件的组所有权?它是 Windows 机制吗?如果是,是否有 Windows 工具可以操作它们?

答案1

在粗略浏览了 cygwin 的源代码后,我相信chgrp.exe只是通过和间接调用RtlSetGroupSecurityDescriptor()- 。chown(2)fhandler_disk_file::set_posix_access()

此功能在 CLI 级别提供子目录

subinacl /file testfile /setprimarygroup=groupname

然而,在我的测试中,该工具需要 SeSecurityPrivilege 才能成功,并且需要 SeBackupPrivilege 才能不显示警告。

相关内容