我遇到了一件有趣的事情:在 BSD 系統上,新檔案的群組將設定為目錄的群組。在 System V 系統上,它將具有建立該檔案的使用者的主要群組。對於 BSD 系統,這種行為的目的為何?SGID位在那裡沒用?
答案1
這可能是也可能不是作業系統相關的功能,您沒有提供足夠的詳細資訊來說明。
可執行檔上的 sgid 位元會導致它在檔案的群組中運行,即使運行它的使用者不在該群組中也是如此。 (設定組 ID)如果它不可執行,則 sgid 位元基本上沒有意義。
在目錄上,sgid 位元已重新用於控制目錄內的群組繼承。如果在目錄上設定了 sgid 位,則在該目錄中建立的檔案將繼承群組(但不繼承群組權限)。這樣做的要點是,如果您有一個群組中使用者使用的共用目錄,他們都可以將自己的 umask 設定為 002 而不是 022,並且都可以編輯該目錄中的文件,而無需不斷修復群組權限。 (如果不更改 umask,則此功能不太有用。)
因此,可能在您正在查看的兩個系統上,一個在您正在測試的目錄上設定了 sgid 位,而另一個則沒有。此功能不會永遠存在,因此如果其中一個系統足夠舊,它可能不支援 sgid 目錄繼承。 (但它已經存在了幾乎永遠,所以這是不可能的。
這絕對不會讓 sgid 無用,我不確定你為什麼會這麼想,你沒有解釋你認為無用的內容。請注意,如果某個文件的群組擁有者不是您所在的群組,則在不先更改群組擁有者的情況下,您將無法將該文件設為sgid,並且如果非root 使用者複製該文件,則sgid將被刪除。