Linux

什麼負責Linux系統中的文件權限?

  • October 16, 2018

眾所周知,大多數 Linux 系統都有某種文件權限。但是是什麼負責定義它們呢?作業系統、文件系統,還是其他東西?

首先,我認為它是文件系統(ext3、NTFS 等)。這是Wikipedia’s article建議的,因為使用了諸如“文件系統權限”之類的片語。但令人驚訝的是,文章中還提到:

類 Unix 和其他 POSIX 兼容的系統,包括基於 Linux 的系統和所有 macOS 版本,具有用於管理單個文件權限的簡單系統,在本文中稱為“傳統 Unix 權限”。

這表明權限是由作業系統管理的(至少是符合 POSIX 的系統,無論這可能是什麼意思)。這篇關於文件權限的 linfo 文章也建議了這一點。

更重要的是,這個關於 ACL 的 Red Hat 文件告訴我們:

Red Hat Enterprise Linux 核心為 ext3 文件系統和 NFS 導出的文件系統提供 ACL 支持。在通過 Samba 訪問的 ext3 文件系統上也可以辨識 ACL。

這表明 ACL(即一種文件權限)以某種方式在 Linux 核心中定義。

我對此感到困惑。

簡要地:

讓我們先介紹一下傳統權限。在類似ext2和後續的文件系統中,以及在原始的 Unix 文件系統中,有一個稱為 inode 的結構。它由許多描述文件屬性的字節組成,例如文件的位置、文件的大小等。表示權限的字節設置了與所有者、組和其他人的權限相對應的位世界。您可以在 中看到這一點ls -l,其中最低位直接對應於rwxr-xr-x您看到的等(這就是位模式111101101)。您還可以在命令chmod中看到它,例如在八進制中使用此二進制數的位置(因此,三位的組每個對應一個數字)。

權限字節由核心中的文件系統驅動程序解釋(基本上,核心使用一些與 inode 資料結構匹配的 C 資料結構)。

因此,從這個意義上說,您既可以說“權限由核心管理”,也可以說“權限儲存在文件系統中”。

ACL 的工作方式類似,只是它們更靈活,並且使用更困難的表示形式和更困難的核心 API。

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