RHEL7的ACL简介

RHEL7中的ACL的简单介绍。

1、ACL简介

ACLAccess Control List的缩写,主要的目的是在提供传统的ownergroupothersread(r)write(w)execute(x) 权限之外的细部权限设定。

ACL可以针对单一使用者,单一文件或目录来进行r,w,x的权限规范,对于需要特殊权限的使用状况非常有帮助。
ACL主要可以针对以下三者:

  • 使用者(user):可以针对使用者来设定权限
  • 群组(group):针对群组为对象来设定其权限
  • 默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限

也就是说,如果你有一个目录,需要给一堆人使用,每个人或每个群组所需要的权限并不相同时,在过去,传统的Linux三种身份的三种权限是无法达到的,因为基本上,传统的Linux权限只能针对一个用户、一个群组及非此群组的其他人设定权限而己,无法针对单一用户或个人来设计权限。而ACL的出现就是为了解决这个问题,实现更加细化的账户文件权限控制。

2、setfacl

ACL的实现主要是通过setfaclgetfacl命令来操作。

  • getfacl:取得某个文件/目录的ACL设定项目
  • setfacl:设定某个文件/目录的ACL规范

getfacl的使用和setfacl一样,主要是用来查看acl权限,因此我们主要来看一下setfacl的用法。

setfacl的英文全称是set file access control list ,即“设置文件访问控制列表”。改命令可以更精确的控制权限的分配,比如让某一个用户对某一个文件具有某种权限。

ACL指文件的所有者、所属组、其他人的读/写/执行之外的特殊的权限, 对于需要特殊权限的使用状况有一定帮助。 如,某一个文件,不让单一的某个用户访问。

语法格式:

1
setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

我们输入setfacl -h查看一下帮助文档,可以看到里面的参数比较多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl modify the current ACL(s) of file(s)
-M, --modify-file=file read ACL entries to modify from file
-x, --remove=acl remove entries from the ACL(s) of file(s)
-X, --remove-file=file read ACL entries to remove from file
-b, --remove-all remove all extended ACL entries
-k, --remove-default remove the default ACL
--set=acl set the ACL of file(s), replacing the current ACL
--set-file=file read ACL entries to set from file
--mask do recalculate the effective rights mask
-n, --no-mask don't recalculate the effective rights mask
-d, --default operations apply to the default ACL
-R, --recursive recurse into subdirectories
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
--restore=file restore ACLs (inverse of `getfacl -R')
--test test mode (ACLs are not modified)
-v, --version print version and exit
-h, --help this help text

这里需要说明一下,-m和-M以及-x和-X的区别就在于,小写字母是后面直接跟需要设置的acl规则,而大写字母则是在后面跟着一个文件,文件里面写着acl规则,后者适用于比较复杂的acl规则设定情况。

接下来我们看一些比较常用的选项参数:

1
2
3
4
5
6
7
setfacl [-bkRd] [{-ml-x)ac1参数]目标文件名选项与参数:
-m:设定后续的ac1参数给文件使用,不可与-x合用;
-x:删除后续的ac1参数,不可与-m合用;
-b:移除[所有的]ACL设定参数;
-k:移除[预设的]ACL参数,关于所谓的预设]参数于后续范例中介绍;
-R:递归设定acl,亦即包括次目录都会被设定起来;
-d:设定预设ac1参数]的意思!只对目录有效,在该目录新建的数据会引用此默认值

3、实例示范

1
2
3
4
5
6
# 设置用户tinychen对acltest1有读写执行权限
setfacl -m u:tinychen:rwx acltest1
# 设置用户tinychen对acltest2无任何权限
setfacl -m u:tinychen:- acltest2
# 设置用户组tinychen对acltest3无任何权限
setfacl -m g:tinychen:- acltest3

设定了ACL权限之后,我们查看该文件权限的时候会发现多了一个+号。

然后我们使用getfacl命令查看文件的权限:

1
2
3
# 删除acltest1的所有acl权限设置
setfacl -b acltest1
getfacl acltest1