ACL是Access Control List 的缩写,主要的目的是提供传统的owner、group、other的read、write、execute权限之外的具体权限设置.
ACL可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助.
那么ACL主要可以针对那些方面来控制权限呢?它主要可以针对几个项目:
* 用户(user):可以针对用户来设置权限;
* 用户组(group): 针对用户组来设置其权限;
* 默认属性(mask): 还可以在该目录下在新建新文件/目录是设置新数据的默认权限.
<1>如何启动ACL
由于ACL是传统UNIX-like操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行.目前绝大数的文件系统都有支持ACL的功能.
那我们如何查看你的文件系统是否支持ACL呢?我们可以这样看:
[root@sqj2015 ~]# mount //直接查看挂载参数的功能
/dev/vda1 on / type ext4 (rw)
…………
##这里我们没有看到ACL
[root@sqj2015 ~]# dumpe2fs -h /dev/vda1 | grep ‘mount options’
dumpe2fs 1.41.12 (17-May-2010)
Default mount options: user_xattr acl
## 由mount单纯去查询不见得可以看到实际的选项,由于目前新的distribution经常会主动加人某些默认功能.
若你的系统默认不会帮你加上acl的支持呢?那么你可以这样操作:
[root@sqj2015 ~]# mount -o remount,acl /
[root@sqj2015 ~]# mount
/dev/vda1 on / type ext4 (rw,acl)
##这样就加入了!但是如果你想要每次开机都生效,则需要这样:
[root@sqj2015 ~]# vi /etc/fstab
/dev/vda1 / ext4 defaults,acl 1 1
<2>ACL设置技巧
在文件系统启动ACL支持后,接下来该如何设置与查看ACL呢?很简单,利用以下2个命令就可以了:
getfacl:查看某个文件/目录的ACL设置项目;
setfacl:设置某个目录/文件的ACL规定;
setfacl语法
setfacl [参数] 目标文件名
参数:
-m : 设置后续的acl参数给文件使用,不可与-x合用;
-x : 删除后续的acl参数,不可与-m 合用;
-b : 删除所有acl设置参数;
-k : 删除默认acl参数;
-R : 递归设置acl,亦即包括子目录都会被设置起来;
-d : 设置默认acl参数,只对目录有效,在该目录新建的数据会引用此默认值.
接下来,就来看看setfacl的设置方式:
**针对特定用户的方式:
##设置规定: “u:[用户账号列表]:[rwx]”如下,设置sqj权限为rw:
[root@sqj2015 ~]# touch acl_test
[root@sqj2015 ~]# ll acl_test
-rw-r–r–. 1 root root 0 Mar 21 13:44 acl_test
[root@sqj2015 ~]# setfacl -m u:sqj:rw acl_test
[root@sqj2015 ~]# ll acl_test
-rw-rw-r–+ 1 root root 0 Mar 21 13:44 acl_test
##是否看到了不同,在权限部分多了个+.
[root@sqj2015 ~]# setfacl -m u::rwx acl_test
[root@sqj2015 ~]# ll acl_test
-rwxrw-r–+ 1 root root 0 Mar 21 13:44 acl_test
##若无用户列表,则代表设置该文件所有者,所以上面显示root的权限变成了rwx了.
但我们具体怎么查看设置的ACL呢?如下:
[root@sqj2015 ~]# getfacl acl_test
# file: acl_test
# owner: root
# group: root
user::rwx
user:sqj:rw-
group::r–
mask::rw-
other::r–
**针对特定用户组的方式:
##设置规定: “g:[用户组列表]:[rwx]”,例如,针对sqj组权限rx:
[root@sqj2015 ~]# setfacl -m g:sqj:rw acl_test
[root@sqj2015 ~]# getfacl acl_test
# file: acl_test
# owner: root
# group: root
user::rwx
user:sqj:rw-
group::r–
group:sqj:rw-
mask::rw-
other::r–
**针对有效权限mask的设置方式:
##mask 它的意思是用户或组所设置的权限必须存在与mask的权限设置范围内才能生效,此即有效权限.
##设置规定: “m:[rwx]”,例如针对刚才的文件规定为仅有r权限:
[root@sqj2015 ~]# setfacl -m m:r acl_test
[root@sqj2015 ~]# getfacl acl_test
# file: acl_test
# owner: root
# group: root
user::rwx
user:sqj:rw- #effective:r–
group::r–
group:sqj:rw- #effective:r–
mask::r–
other::r–
##sqj用户、sqj组与mask的集合仅有r存在,因此sqj仅具有r的权限而已,并不存在w的权限,这就是mask的功能.
**针对默认权限的设置方式:
##设置规定:”d:[ug]:用户列表:[rwx]”
[root@sqj2015 ~]# mkdir acl_test1
[root@sqj2015 ~]# setfacl -m d:u:sqj:rw acl_test1/
[root@sqj2015 ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:sqj:rw-
default:group::r-x
default:mask::rwx
default:other::r-x
[root@sqj2015 ~]# cd acl_test1
[root@sqj2015 acl_test1]# touch test
[root@sqj2015 acl_test1]# ll test
-rw-rw-r–+ 1 root root 0 Mar 21 14:16 test
[root@sqj2015 acl_test1]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:sqj:rw-
group::r-x #effective:r–
mask::rw-
other::r–
##通过这个”针对目录来设置默认ACL权限”的选项,我们可以让这些属性继承到子目录下面.