一、什么是ACL,及其作用是什么?##
-
: 传统的权限设置仅有三种身份(ower、group、other),搭配三种权限(read、write、execute),并没有办法单纯针对某一个用户或某一个组来设置特定的权限需求。为了解决这一问题,就提出了ACL的办法。
-
ACL就是Access Control List的缩写,中文意思就是访问控制列表,其主要作用可以用来提供除传统的ower、group、others的read、write、execute权限之外的具体权限的设置。ACl可以针对单一用户、单一文件或目录进行读写执行等权限的设置,可以实现更加灵活的权限设置,这样的权限设置对于有特殊权限需求的使用情况是非常有帮助的。
-
ACl可以进行一下三种控制权限操作:
-
- 1、对特定用户和文件/目录设定权限
2、对特定的组合文件/目录设置权限
3、对指定目录文件及其下新建的文件/目录设置默认的权限
## 二、ACL启动 ##
- 1、对特定用户和文件/目录设定权限
-
CentOS7中,无论是操作系统安装时还是之后手工创建的文件系统(xfs、ext4)均会开启ACL功能。
-
CentOS6及之前的版本,仅操作系统安装时创建的文件系统才会默认开启ACL,手工创建的文件系统,需要手工开启ACL功能。
-
启动方式:
-
- mount -o acl /dev/sda1 取消的方式,重新挂载时不指定即可
mount -o remount,acl /dev/sda1
以上两种方式开启的ACL可以通过mount |grep sdaX
tune2fs -o acl /dev/sda7
取消的方式 tune2fs -o ^acl /dev/sda1
使用以上方式开启的ACL可以通过tune2fs -l /dev/sda1|grep option
## 三、ACL设置技巧 ##
- mount -o acl /dev/sda1 取消的方式,重新挂载时不指定即可
-
ACL的设置主要是通过以下两条命令实现的:
-
- getfacl:用于取得某个文件/目录的ACL设置
setfacl:用于设置某个目录/文件的ACL规定
- getfacl:用于取得某个文件/目录的ACL设置
-
1、getfacl命令
getfacl命令大多只是用来查询文件/目录的ACL设置的,其他使用较少。查询的命令为:getfacl filename
- 以下为getfacl查询结果的输出格式:
-
第一至三行显示文件名,拥有者,所属组信息 第四行显示文件的特殊权限位信息 第五、七、十行显示文件的基础权限位,对应于文件原有权限位的用户、组和其他字段。 第六、八行显示新增的用户名、组名及相应权限 第九行显示有效的权限掩码,仅限制新增的组和用户的有效权限。 (文件权限不受有效权限掩码的影响) 第十一至第十五行显示与被设置的目录相关的默认ACL
-
2、setfacl命令
-
命令格式:setfacl 参数 作用对象 目标文件/目录
-
参数介绍:
-
- -m:修改文件当前的ACL,不可与-x参数合用
-x:从文件的ACL中单独移除一条权限
-b:移除文件的全部ACL
-k:删除默认的ACL
-d:为目录设置默认的ACL(该参数只对目录有效)
-R:递归设置ACL,其子目录也将会被设置
- eg1:针对特定用户权限的设置
- -m:修改文件当前的ACL,不可与-x参数合用
-
命令格式:setfacl -m u:username列表:[rwx] filename
- eg2:针对特定用户组权限的设置
-
命令格式:setfacl -m g:grouprname列表:[rwx] filename
## 四、 有效权限mask##
-
有效权限mask的意思就是对新增的用户或组所设置的权限,必须要存在于mask权限内才会生效。意思就是说新增用户或组的有效权限是其设定的权限与mask的权限取合集。再说的直白点就是:mask里有的权限,新增用户或组同时也设置相应权限了,其权限才会有效;mask里没有设置的权限,新增用户或组即使设置了,也是不会生效的。
-
一般情况下最好是将mask的权限设置为:rwx,然后再分别依据不同的用户或组设置不同的权限。
- eg3:针对有效权限mask的设置
-
命令格式:setfacl -m m:[rwx] filename
## 五、默认权限 ##
-
setfacl命令中的 -d 参数是用来设置默认权限的,但是此设置只对目录有效,不能对文件进行设置。设置后,此目录下新建的子目录及文件都将继承此权限,也就是能够实现递归设置。
- eg4:针对默认权限的设置
-
命令格式: setfacl -m d:u:username列表:[rwx] /…/directoryname
-
-
- setfacl -m d:g:groupname列表:[rwx] /…/directoryname
:
- setfacl -m d:g:groupname列表:[rwx] /…/directoryname
-