一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。
为了更直观地看到
ACL
对文件权限控制的强大效果,我们先切换到普通用户,然后尝试进入 root
管理员的家目录中。在没有针对普通用户对
root
管理员的家目录设置
ACL之前,其执行结果如下所示:
[root@localhost ~]# su zhangxu
[zhangxu@localhost root]$ cd /root/
bash: cd: /root/: Permission denied
5.4.1 setfacl命令
setfacl
命令用于管理文件的
ACL
规则,格式为“
setfacl [
参数
]
文件名称”
文件的
ACL 提供的是在所有者、所属组、其他人的读/
写
/
执行权限之外的特殊权限控制,使用
setfacl
命令可以针对单一用户或用户组、单一文件或目录来进行读/
写
/
执行权限的控制。其中,针对目录文件需要使用-R
递归参数;针对普通文件则使用
-m
参数;如果想要删除某个文件的
ACL,
则可以使用-b
参数。下面来设置用户在
/root
目录上的权限:
[root@localhost ~]# su zhangxu
[zhangxu@localhost root]$ cd /root
bash: cd: /root: Permission denied
[zhangxu@localhost root]$ su root
Password:
[root@localhost ~]# setfacl -Rm u:zhangxu:rwx /root
[root@localhost ~]# su zhangxu
[zhangxu@localhost root]$ cd /root
[zhangxu@localhost root]$exit
[root@localhost ~]# ls -ld /root
dr-xrwx---+ 14 root root 4096 Aug 23 16:48 /root
5.4.2 getfacl 命令
getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。
Linux 系统中的命令就是这么又可爱又好记。想要设置 ACL,用的是 setfacl 命令;要想查看 ACL,则用的是 getfacl 命令。下面使用 getfacl 命令显示在 root 管理员家目录上设置的所有 ACL 信息。
[root@localhost ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:zhangxu:rwx
group::r-x
mask::rwx
other::---