facl 文件访问控制列表#
一些说明#
- 默认只对用户做 facl 权限,对组的权限设置,一般是通过用户附属组的方式实现;
- 查看是否启用了 facl:如果使用命令
ls -l
会发现在9位权限位之后,又增加了一个 +
号,则证明启用了 facl
- 按照 linux 基本权限机制(u,g,o 权限),一个文件如果想被属主之外的其他用户访问,只能修改文件的 o(ther) 权限来实现(或者将用户加入属组中)。这两种方式都会导致文件权限被授予的过大,数据的安全性大大降低。facl 的出现很好的解决了这个问题。facl (文件访问控制列表)是一种额外的文件赋权机制,它在文件的基本权限u,g,o外,添加了另一层让普通用户能够将文件的控制权限赋予另外的一些用户或者组的机制。
linux 文件访问权限匹配模型#
基本权限匹配机制#
- 检查进程的发起者和被访问文件的属主是否相同
- 如果相 同,则使用文件属主的权限访问
- 如果不同,转到步骤2
- 检查进程的发起者和被访问文件的属组是否相同
- 如果相同,则使用文件属组的权限访问
- 如果不同,转到步骤3
- 使用other权限
facl 权限匹配机制#
- 检查进程的发起者和被访问文件的属主是否相同
- 如果相同,则使用文件属主的权限访问
- 如果不同,转到步骤2
- 检查被访问的文件是否有关于进程发起者这个特定用户的facl
- 如果有,则使用facl中这个特定用户的facl权限访问
- 如果没有,转到步骤3
- 检查进程的发起者和被访问文件的属组是否相同
- 如果相同,则使用文件属组的权限访问
- 如果不同,转到步骤4
- 检查被访问的文件是否有关于进程发起者这个特定用户的所属组的facl
- 如果有,则使用facl中这个特定用户的所属组的facl权限访问
- 如果没有,转到步骤5
- 使用other权限
常用命令#
- 设置命令
setfacl
- 查看命令
getfacl
getfacl#
$ getfacl 1.txt
# file: 1.txt
# owner: ubuntu
# group: ubuntu
user::rw-
group::rw-
other::r--
file: 1.txt # 文件名
owner:ubuntu # 文件属主
group:ubuntu # 文件属组
user::rw- # 用户的访问权限(中间字段为用户名,当中间字段为空时,则代表属主;多个用户会存在多行)
group::rw- # 组的访问权限(中间字段为组名,当中间字段为空时,则代表属组;多个组会存在多行)
other::r-- # 其他的访问权限
setfacl#
参数说明#
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl参数如下: -m 和 -x 最使用
-m :设置后续的acl参数
-x :删除后续的acl参数
-b :删除所有的ACL设定参数
-R :递归设置acl参数
-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)
-k :删除预设的ACL参数
EXAMPLES:
Granting an additional user read access
setfacl -m u:lisa:r file
Revoking write access from all groups and all named users (using the effective rights mask)
setfacl -m m::rx file
Removing a named group entry from a file's ACL
setfacl -x g:staff file
Copying the ACL of one file to another
getfacl file1 | setfacl --set-file=- file2
Copying the access ACL into the Default ACL
getfacl --access dir | setfacl -d -M- dir
使用实例#
- 文件
/opt/123.txt
的属主是 ubuntu,文件权限为 755;需求:允许属于组 test 的 test 用户可以读写改文件:
setfacl -m u:test:rw /opt/123.txt
- 删除文件
/opt/123.txt
的 facl 权限:
setfacl -b /opt/123.txt