Linux 系统访问控制列表ACL
常见的文件系统的一般权限(rwx)、特殊权限(SUID,SGID,STICK)、隐藏权限(chattr)其实有个共性——权限是针对某一类用户设置的。而如果希望对某个指定的用户进行单独的权限控制,那么就需要用文件的访问控制列表来实现啦。基于普通文件或目录设置文件访问控制列表(Access Control Lists,ACL)访问控制策略,通俗来说就是设置指定的特定用户或用户组对某个文件的操作权限。另外如果对某个目录设置了访问控制策略,那么子文件则继承其访问策略,而若对文件设置了访问控制策略则不再继承上级目录的控制策略。
如何设置ACL(文件控制访问列表)
获取文件控制访问列表的方式为:
getfacl FileName
设定文件控制访问列表的命令为setfacl,如果加上-m,就表示设定访问权限,-x表示取消访问权限:
setfacl -m u:USERNAME:MODE FileName
setfacl -m g:GROUPNAME:MODE FileName
如果是取消权限,则无需指定具体的权限,只指定用户名或组名即可:
setfacl -x u:USERNAME:MODE FileName
setfacl -x g:GROUPNAME:MODE FileName
setfacl -b FileName 取消对该文件上的所有ACL权限。
其它:
对用户设置权限实例
#setfacl -m u:username:rw- /test.txt //普通的文件
#setfacl -Rm d:u:username:rw- /test/ //对目录设置
对组设置权限
#setfacl -m g:group:r-- /test.txt
#setfacl -m d:g:group:r-- /test/
查看权限
#getfacl filename/directory //文件或目录名
常用的ls命令是看不到访问控制列表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),而这就意味着这个文件已经被设置有了ACL访问策略。
[root@rhel7 rusky]# ll total 8 drwxrwxr-x+ 2 lxjtest users 6 Jul 21 02:33 lxjtest_mkdirtest drwxrwxrwt+ 2 rusky rusky 6 Jul 20 21:58 testSticky
[rusky@localhost ~]$ cd /root/ -bash: cd: /root/: Permission denied [rusky@localhost ~]$ su - Password: Last login: Mon Nov 27 15:44:08 CST 2017 on pts/1 [root@localhost ~]# setfacl -Rm u:rusky:rwx /root/ [root@localhost ~]# su - rusky Last login: Mon Nov 27 15:44:28 CST 2017 on pts/1 [rusky@localhost ~]$ cd /root/ [rusky@localhost root]$ cat anaconda-ks.cfg [rusky@localhost root]$ ls -ld /root/ dr-xrwx---+ 15 root root 4096 Nov 27 11:21 /root/ getfacl命令用于显示文件的ACL规则,格式为:"getfacl 文件名称"。 [root@localhost ~]# getfacl /root/ getfacl: Removing leading '/' from absolute path names # file: root/ # owner: root # group: root user::r-x user:rusky:rwx group::r-x mask::rwx other::---