ACL权限简介
ACL(Access Control List)访问控制列表,是Linux系统中的访问权限控制系统。可用于解决Linux基本文件权限系统中权限分配空白问题。类似与Windows的文件权限设置,可以独立设置除了所有者和所属组以外的某个特定组或特定用户的访问权限。
应用场景举例
我们学校中有一个NAS系统,我得到了一些“珍贵的学习资料”,上传到NAS中与我们寝室的同学共享(我和我的舍友同属于一个寝室组)。目录权限设置为rwxr-x---,但有一天在与张三的交谈中无意透露了它的存在,所以要将其中一些与他分享。
下面问题来了:如果按照传统权限控制,张三该去哪里?
-
成为属主,属主权限下降:那就产生了属主权限比所属组还要低和我去哪的问题
-
加入我们寝室组:不仅产生了我们寝室组加入非寝室成员的问题、还导致其他文件泄露
-
提高其他人(Others)权限:这样非我们寝室的其他人也能访问该文件,组内共享失去意义
在这种情况下,可以独立设置特定用户权限的ACL权限控制系统可以发挥很好的作用
ACL权限的准备工作
查看ACL权限管理是否启动
由于ACL权限管理基于分区文件系统,所以在查看分区信息中可以找到,命令:
dumpe2fs -h <Filesystem Name>
其中<Filesystem Name>为目标工作目录所挂载的文件系统名,用 df 命令查看,-h选项仅显示superblock中的信息
得到结果较长,找到其中的 Dafault mount options ,如下
Default mount options: user_xattr acl
含有acl,则表示已经开启acl(一般默认开启)
启动ACL权限管理
临时启动(我设置的是根目录):
mount -o remount,acl /
永久启动,更改配置文件在 /etc/fstab 系统开机自动挂载配置文件:在根目录挂载行的options栏后添加",acl"保存重启即可
ACL权限查看和设置
ACL权限查看
getfacl [options] <filename>
不加选项直接查看,后几行:
user::rwx
group::r-x
other::---
被:分成三段,分别为类型、组/用户名、权限
中间为空表示其他所有用户
ACL权限设置
setfacl -m <parameter> <filename>
一般使用-m选项配合参数来设置ACL权限
参数分为三段(默认权限除外),同查看中分类
- 第一段一般根据设定的组或者用户设为g或u
- 第二段为要设置的特定用户名
- 第三段为要设置的权限
比如:赋予其他用户test 目录a的r-x权限
setfacl -m u:test:r-x a
权限也可用八进制数字表示,权限赋予可重复修改、删除
再次查看ACL权限
user::rwx
user:test:r-x
group::r-x
mask::r-x
other::---
对test赋予了r-x权限,而其他人没有权限,同时产生了一个分类mask
最大有效权限(权限阈值)mask
顾名思义,mask设置了该文件可设置的最大ACL权限,超过该权限的赋予会被mask限制
user::rwx
user:test:r-x #effective:---
group::r-x #effective:---
mask::---
other::---
其中注释后的effective为实际上的有效权限,说明被mask的---限制
修改mask时只需将参数第一段中的u或g改为m, 其他与设置用户\组的权限方法相同。
默认权限
一般用于目录中,默认权限独立于该目录本身的权限,规定了在该目录中创建的文件的默认ACL权限。
user::rwx
user:test:r-x
group::r-x
mask::r-x
other::---
default:user::rwx
default:user:test:r-x
default:group::r-x
default:mask::r-x
default:other::---
设置后,该目录下的所有文件创建时都会拥有其规定的ACL权限
修改时参数最前加一段为d即可(注意:分隔)
删除权限
- 删除特定用户,将选项-m改为-x,参数最后一段舍去即可,例如
setfacl -x u:test a
删除了赋予test用户的ACL权限
- 删除所有ACL权限,选项改为-d ,参数不加
- 删除默认ACL权限,选项改为-k ,参数不加
递归设置ACL权限
对该目录以及其下所有子文件/目录进行同样的设置,用选项 -R