RHEL7中的ACL的简单介绍。

ACL简介

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

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

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

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

setfacl

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

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

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

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

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

语法格式:

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

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

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规则设定情况。

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

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

实例示范

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

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

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

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