ACL权限设置命令setfacl和getfacl命令(3)

这里需要重点讲一下ACL_MASK,因为这是掌握ACL的另一个关键,在Linux file permission里面大家都知道比如对于rw-rw-r--来说, 当中的那个rw-是指文件组的permission. 但是在ACL里面这种情况只是在ACL_MASK不存在的情况下成立。如果文件有ACL_MASK值,那么当中那个rw-代表的就是mask值而不再是group permission了。 

 让我们来看下面这个例子:  [root@localhost ~]ls -l -rwxrw-r-- 1 root admin 0 Jul 3 23:10 test.sh 

这里说明test.sh文件只有file owner: root拥有read, write, execute/search permission。admin组只有read and write permission

 让用户john也对test.sh具有和root一样的permission。 [root@localhost ~]setfacl -m user:john:rwx ./test.sh  [root@localhost ~]getfacl --omit-header ./test.sh  user::rwx user:john:rwx  group::rw-  mask::rwx other::r--

这里我们看到john已经拥有了rwx的permission,mask值也被设定为rwx,那是因为它规定了ACL_USER,ACL_GROUP和ACL_GROUP_OBJ的最大值,现在我们再来看test.sh的Linux permission,它已经变成了:

[root@localhost ~]ls -l -rwxrwxr--+ 1 root admin 0 Jul 3 23:10 test.sh 

那么如果现在admin组的用户想要执行test.sh的程序会发生什么情况呢?它会被permission deny。原因在于实际上admin组的用户只有read and write permission,这里当中显示的rwx是ACL_MASK的值而不是group的permission。

所以从这里我们就可以知道,如果一个文件后面有+标记,我们都需要用getfacl来确认它的permission,以免发生混淆。
下面我们再来继续看一个例子,假如现在我们设置test.sh的mask为read only,那么admin组的用户还会有write permission吗?

[root@localhost ~]setfacl -m mask::r-- ./test.sh [root@localhost ~]getfacl --omit-header ./test.sh user::rwx user:john:rwx #effective:r-- group::rw- #effective:r--  mask::r-- other::r--

这时候我们可以看到ACL_USER和ACL_GROUP_OBJ旁边多了个#effective:r--,这是什么意思呢?让我们再来回顾一下ACL_MASK的定义。它规定了ACL_USER,ACL_GROUP_OBJ和ACL_GROUP的最大权限。那么在我们这个例子中他们的最大权限也就是read only。虽然我们这里给ACL_USER和ACL_GROUP_OBJ设置了其他权限,但是他们真正有效果的只有read权限。
这时我们再来查看test.sh的Linux file permission时它的group permission也会显示其mask的值(r--)

[root@localhost ~]ls -l -rwxr--r--+ 1 root admin 0 Jul 3 23:10 test.sh  Default ACL

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11954.html