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()- viachown(2)fhandler_disk_file::set_posix_access()

此功能由 CLI 等級提供子程式:

subinacl /file testfile /setprimarygroup=groupname

然而,在我的測試中,該工具需要 SeSecurityPrivilege 才能成功,並且需要 SeBackupPrivilege 才能不顯示警告。

相關內容