
據我所知,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 才能不顯示警告。