一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的,能够对很多人同时生效。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。
通俗来讲,基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限,更加精准地派发权限。另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL 权限;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL 权限。
在配置ACL之前先备份一下权限信息,具体如下操作:
备份恢复权限
[root@servera /]# getfacl -R home > home.backup.acl //备份权限
[root@servera /]# setfacl --restore home.backup.acl //恢复备份
setfacl 命令
setfacl 命令用于管理文件的 ACL 权限规则,英文全称为“set files ACL”,语法格式为“ setfacl [参数] 文件名称 ”。
ACL 权限提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制。使用 setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用 -R 递归参数;针对普通文件则使用-m 参数;如果要删除某个文件的 ACL,则可以使用 -b 参数。setfacl 命令的常用参数如下表所示。
参数 | 作用 |
---|---|
-m | 修改权限 |
-M | 从文件中读取权限 |
-x | 删除某个权限 |
-b | 删除全部权限 |
-R | 递归子目录 |
例如,普通用户原本是无法进入/root 目录中的,现在为普通用户单独设置一下权限:
[zhangxu@RS net]$ cd /root //普通用户无法进入root家目录
-bash: cd: /root: Permission denied
[root@RS ~]# setfacl -Rm u:zhangxu:rwx /root //设置用户zhangxu对root家目录有读写执行权限
随后再切换到这位普通用户的身份下,现在能正常进入了:
[zhangxu@RS net]$ cd /root //可以进入root的家目录了
[zhangxu@RS root]$ ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates Videos
Desktop Downloads Music Public test
如何查看文件是否设置了ACL ?
常用的 ls 命令是看不到 ACL 信息的,但是却可以看到文件权限的最后一个点( . )变成了加号( ),这就意味着该文件已经设置了 ACL。
[root@servera ~]# ls -ld /root //没有设置ACL之前是 . 结尾
dr-xr-x---. 15 root root 4096 Sep 24 23:07 /root
[root@servera ~]# ls -ld /root //设置ACL之后是 + 结尾
dr-xrwx---+ 15 root root 4096 Sep 24 23:07 /root
getfacl 命令
getfacl 命令用于查看文件的 ACL 权限规则,英文全称为“get files ACL”,语法格式为“ getfacl [参数] 文件名称 ”。
下面使用 getfacl 命令显示在 root 管理员家目录上设置的所有 ACL 信息:
[root@servera ~]# getfacl /root //查看/root的ACL信息
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:zhangxu:rwx //此行为以上设置的ACL权限
group::r-x
mask::rwx
other::---
ACL用户组设置
ACL 权限还可以针对某个用户组进行设置。例如,允许某个组的用户都可以读写/etc/fstab文件:
[root@servera ~]# groupadd vimfstab //创建一个可以编辑fstab的用户组
[root@servera ~]# id zhangxu //查看zhangxu用户的id
uid=1000(zhangxu) gid=1000(zhangxu) groups=1000(zhangxu)
[root@servera ~]# usermod -g vimfstab zhangxu //把用户加入到用户组vimfstab
[root@servera ~]# setfacl -m g:vimfstab:rw /etc/fstab //给用户组设置读写权限
清除ACL
要清空所有 ACL 权限,使用 -b 参数;要删除某一条指定的权限,使用 -x 参数:
[root@servera ~]# getfacl /etc/fstab //查看文件的ACL设置
getfacl: Removing leading '/' from absolute path names
# file: etc/fstab
# owner: root
# group: root
user::rw-
group::r--
group:vimfstab:rw-
mask::rw-
[root@servera ~]# setfacl -x g:vimfstab /etc/fstab //删除指定的权限
[root@servera ~]# getfacl /etc/fstab //再次查看文件的ACL设置已删除
getfacl: Removing leading '/' from absolute path names
# file: etc/fstab
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
不错,值得收藏分享!