Files

文件權限中使用者和組所有者的優先級

  • May 8, 2019

我剛剛遇到了一些關於 Linux(Arch Linux)文件權限的意外(對我來說)。基本上我有:

  • userXgroupX
  • fileX userX:groupX ---rwx----

令我困惑的是:我無法對 執行任何操作 ( rwx) fileX。這是正確的嗎?有人可以確認這確實是預期的行為嗎?

我可以執行的唯一操作是mv並且rm因為我對父目錄具有寫權限。

問題是,我一直認為這些權限相互崩潰,從最一般的權限開始(其他 -> 組 -> 使用者)。換句話說,如果o=rwx誰關心組和使用者的權限是什麼?顯然情況並非如此,但這對我來說沒有多大意義;這似乎違反直覺。這種方法似乎唯一有用的是,很容易排除一個非常具體的人/組,這似乎不是一個聰明的方法(恕我直言)。此外,所有者(和組?)無論如何都應該能夠chmod對嗎?對這個問題有什麼想法嗎?

問題是,我一直認為這些權限相互崩潰,從最一般的權限開始(其他 -> 組 -> 使用者)。

如果是這種情況,那麼“其他”權限將適用於每個人。

換句話說,如果 o=rwx 誰在乎組和使用者的權限是什麼?

這和你上一句不一樣。在這裡,您暗示權限是或在一起的,例如,如果 userX 擁有文件並且文件是使用者可讀的,或者如果 userX 所屬的組擁有文件並且文件是組,則 userX 具有讀取權限-可讀,或者如果文件是其他可讀的。但這不是它的工作原理。實際上,o=rwx意味著rwx權限適用於其他人,但它並沒有說明不是其他人的實體。

首先,使用者屬於哪個組並不直接重要。核心沒有使用者屬於組的概念。對於每個程序,核心維護的是一個使用者 ID(有效 UID)和一個組 ID列表(有效 GID 和補充 GID)。組是在登錄時由登錄程序確定的——登錄程序讀取組數據庫(例如/etc/group)。使用者和組 ID 由子程序繼承¹。

當程序嘗試使用傳統的 Unix 權限打開文件時:

  • 如果文件的擁有使用者是程序的有效 UID,則使用使用者權限位。
  • 否則,如果文件的所屬組是程序的有效 GID 或程序的補充組 ID 之一,則使用組權限位。
  • 否則,使用其他權限位。

只使用了一組 rwx 位。使用者優先於組,組優先於其他組。當存在訪問控制列表時,上述算法被推廣:

  • 如果文件上存在程序有效 UID 的 ACL,則它用於確定是否授予訪問權限。
  • 否則,如果文件上有程序的有效 GID 或程序的補充組 ID 之一的 ACL,則使用組權限位。
  • 否則,使用其他權限位。

有關如何使用 ACL 條目(包括遮罩的效果)的更多詳細資訊,另請參閱當使用者屬於多個組時 ACLS 的優先級。

因此-rw----r-- alice interns表示一個文件可以被 Alice 讀寫,並且可以被除實習生之外的所有其他使用者讀取。具有權限和所有權的文件----rwx--- alice interns只能由除 Alice 之外的實習生訪問(無論她是否是實習生)。由於 Alice 可以呼叫chmod來更改權限,這不提供任何安全性;這是一個邊緣案例。在具有 ACL 的系統上,通用機制允許從特定使用者或特定組中刪除權限,這有時很有用。

使用一組位,而不是對每個操作(讀取、寫入、執行)的所有位進行或運算,有幾個優點:

  • 它具有允許從具有 ACL 的系統上的一組使用者或組中刪除權限的有用效果。在沒有 ACL 的系統上,可以從一個組中刪除權限。
  • 實現起來更簡單:檢查一組位,而不是將幾組位組合在一起。
  • 分析文件的權限更簡單,因為涉及的操作更少。

¹它們可以在執行setuid或 setgid 程序時更改。這與手頭的問題無關。

引用自:https://unix.stackexchange.com/questions/134332