什麼負責Linux系統中的文件權限?
眾所周知,大多數 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。