訪問控制ACL
從 Linux Wiki
介紹
传统上,系统支持POSIX(可移植操作系统接口)系列标准,一个简单但功能强大的文件系统权限模型:每
個文件系統對象關聯三套定義為所有者的權限,所屬組和其他人的權限。每一組可能包含讀(r),寫(w)和執 行(x)的權限。此方案是通過使用為每個對象只有9位。除了這9位,SUID,SGID,SBIT位用於一些特殊情 況下。
虽然传统的模型是非常简单的,足以满足大多数的管理方面的需求。虽然这种系统有明显的局限性,但是它
很好的保存了unix簡潔和可預測的傳統,但是事實上所有的非unix操作系統上都採用了一種實質上更為複雜的 方式來管理對於文件的訪問:訪問控制列表(access control list)簡稱ACL。每個文件或者目錄都有一 個與之相關的ACL,這個ACL規定來用在文件或者目錄身上的權限規則。ACL內每一個規則叫做一個訪問控制 項,或者簡稱ACE。
一般来说一个ACE规定了它的应用对象,以及应用到那些用户的一组权限。ACL不限制长度,可以包含用于多
個用戶或者用戶組的權限規定更先進的系統能讓系統管理員指定部分權限的集合或者否定方式的權限,大多數操 作系統限制單條ACL的長度,但是因為限制值足夠大(通常至少32項)所以很少有超限的情況發生。
更先进的ACL系统能让系统管理员指定部分权限或者反向权限;有些系统还有继承特性,可以让访问规定推广
到新創建的文件系統上。
这些ACL系统比传统的unix模型更强大,但是对于系统管理员和软件开发人员来说,他们的复杂性也提高了一
個數量級。應該在一定程度上謹慎使用他們呢,因為ACL在和不支持ACL的備份系統,網絡文件服務對等端,甚至 像文本編輯器這樣的簡單程序連用時,容易造成問題。ACL在不斷變化,所以隨着時間的推移在變得愈發複雜和不 可維護。
ACL類型
ACL 是由一系列的Access Entry所組成的. 每一條Access Entry定義了特定的類別可以對 文件擁有的操作權限. Access Entry有三個組成部分: Entry tag type, qualifier (optional)
Entry tag type, 它有以下幾個類型 ACL_USER_OBJ: 相當於Linux里file_owner的權限 ACL_USER: 定義了額外的用戶可以對此文件擁有的權限 ACL_GROUP_OBJ: 相當於Linux里group的權限 ACL_GROUP: 定義了額外的組可以對此文件擁有的權限 ACL_MASK: 定義了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大權限 ACL_OTHER: 相當於Linux里other的權限
来看一个详细的例子
[spunk@wapbaidu ~]$ getfacl test
- file: test <==說明文件名
- owner: spunk <==說明此文件的所有者
- group: spunk <==說明此文件的所屬組
user::rwx <==文件所有者的權限 user:xue:r-x <==用戶xue具有的權限 group::--- <==文件所屬組的權限 group:spunk:r-x <==spunk組對該文件的權限 mask::r-x <==該文件的默認最大權限 other::--- <==其他人擁有的權限 [spunk@wapbaidu ~]$ ll -rwxr-x---+ 2 spunk spunk 4096 5月 9 19:42 test 在文件權限的最後多了一個+號. 當任何一個文件擁有了ACL_USER或者ACL_GROUP的值以後我 們就可以稱它為ACL文件.這個+號就是用來提示我們的。
常用命令
getfacl
setfacl