访问控制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