这里我们看到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的值(i.e. r--)
[root@localhost ~]# ls -l -rwxr--r--+ 1 root admin 0 Jul 3 23:10 test.sh
Default ACL
上面我们所有讲的都是Access ACL,也就是对文件而言。下面我简单讲一下Default ACL。Default ACL是指对于一个目录进行Default ACL设置,并且在此目录下建立的文件都将继承此目录的ACL。
同样我们来做一个试验说明,比如现在root用户建立了一个dir目录:
[root@localhost ~]# mkdir dir
他希望所有在此目录下建立的文件都可以被john用户所访问,那么我们就应该对dir目录设置Default ACL。
[root@localhost ~]# setfacl -d -m user:john:rw ./dir [root@localhost ~]# getfacl --omit-header ./dir user::rwx group::rwx other::r-x default:user::rwx default:user:john:rwx default:group::rwx default:mask::rwx default: other::r-x
这里我们可以看到ACL定义了default选项,john用户拥有了default的read, write, excute/search permission。所有没有定义的default都将从file permission里copy过来,现在root用户在dir下建立一个test.txt文件。
[root@localhost ~]# touch ./dir/test.txt [root@localhost ~]# ls -l ./dir/test.txt -rw-rw-r--+ 1 root root 0 Jul 3 23:46 ./dir/test.txt [root@localhost ~]# getfacl --omit-header ./dir/test.txt user::rw- user:john:rw- group::rwx #effective:rw- mask::rw- other::r--










