Linux中ACL文件访问控制列表

在 Linux下,对一个文件(或者资源)可以进行操作的对象被分为三类: file owner(文件的拥有者),group(组,可以不是文件拥有者所在的组), other (其他)而对于每一类别又分别定义了读、写、执行(read, write and execute )权限以及特殊权限。但是这些权限只能搭配使用而已,如果想要对其其他用户组或者其他用户里的某一位用户设定一些不同的权限,就不行了。
LINUX上的ACL访问控制列表,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的局部权限设定。ACL可以针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于需要特殊权限的使用情况。简单地来说,ACL就是可以设置特定用户或用户组对于一个文件/目录的操作权限,可以实现灵活的权限管理,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。简单地来说ACL就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限。
由于ACL是传统的类unix操作系统权限的额外支持项目,因此需要使用ACL必须要有文件系统的支持才行。目前大多数的文件系统都支持ACL。(ACL访问控制列表需要内核支持,在Linux内核2.6以后默认加入了ACL功能)
ACL管理命令: getfacl, setfacl, chacl
acl是一个可以被acl_from_text程序分析出各用户权限的字符串。该字符串用逗号分隔成多个片段
每个片段的形式都如:tag:name:perm
tag可以是下面形式的一种:
"user" (or "u")表示这是一个用户的ACL条目。
"group" (or "g")表示这是一个用户组的ACL条目。
"other" (or "o")表示这是其它的ACL条目。即没有在ACL指定的用户和组的ACL条目。
"mask" (or "m")表示这是一个掩码的ACL条目。在指定其它非用户属主的ACL权限时,这个掩码条目必须被指定,否则执行chacl命令会出错。
name可以是用户名或组名。如果不指定,那么默认是给文件或目录的属主或用户组指定acl权限。当然name也可以是用户的uid或者组的gid。
perm是指该用户或组所具有的权限,它是由"rwx"组成的一个字符串,什么意思当然大家都明白了。如果要使该用户或组不具有某种权限,简单的以"-"代替指定的字母就可以了。例如"r-x"是只具有读,执行权限。

getfacl

使用getfacl可以获取文件访问控制列表
使用方法: getfacl [-aceEsRLPtpndvh] 文件 ...
-a, --access 仅显示文件访问控制列表
-d, --default 仅显示默认的访问控制列表
-c, --omit-header 不显示注释表头
-e, --all-effective 显示所有的有效权限
-E, --no-effective 显示无效权限
-s, --skip-base 跳过只有基条目(base entries)的文件
-R, --recursive 递归显示子目录
-L, --logical 逻辑遍历(跟随符号链接)
-P, --physical 物理遍历(不跟随符号链接)
-t, --tabular 使用制表符分隔的输出格式
-n, --numeric 显示数字的用户/组标识
-p, --absolute-names 不去除路径前的 '/' 符号
-v, --version 显示版本并退出
-h, --help 显示本帮助信息

获取文件ACL访问控制列表:

getfacl test.txt
# file: test.txt
# owner: root
# group: family
user::rw-
group::rw-
mask::rw-
other::---
前三行以#开头的定义了文件名,文件所有者和文件拥有组. 这些信息没有太大的作用,可以用 --omit-header来省略掉
user::rw- 定义了ACL_USER_OBJ, 说明file owner拥有读和写的权限
group::rw- 定义了ACL_GROUP_OBJ,说明文件的group拥有read和write 权限
mask::rw- 定义了ACL_MASK的权限为read and write
other::--- 定义了ACL_OTHER的没有任何权限操作此文件
ACL由一系列的访问控制权限组成,主要的有如下:
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的权限

setfacl

使用setfacl设定文件访问控制列表
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl 更改文件的访问控制列表
-M, --modify-file=file 从文件读取访问控制列表条目更改
-x, --remove=acl 根据文件中访问控制列表移除条目
-X, --remove-file=file 从文件读取访问控制列表条目并删除
-b, --remove-all 删除所有扩展访问控制列表条目
-k, --remove-default 移除默认访问控制列表
--set=acl 设定替换当前的文件访问控制列表
--set-file=file 从文件中读取访问控制列表条目设定
--mask 重新计算有效权限掩码
-n, --no-mask 不重新计算有效权限掩码
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不跟随符号链接
--restore=file 恢复访问控制列表,和“getfacl -R”作用相反
--test 测试模式,并不真正修改访问控制列表属性
-v, --version 显示版本并退出
-h, --help 显示本帮助信息
-:如果文件名是-,则setfacl将从标准输入读取文件名。
选项-m和-x后边跟以acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则。
选项--set和--set-file用来设置文件或目录的acl规则,先前的设定将被覆盖。
选项-m(--modify)和-M(--modify-file)选项修改文件或目录的acl规则。
选项-x(--remove)和-X(--remove-file)选项删除acl规则。

设置ACL访问控制列表:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13022.html