原创系统笔记

Linux ACL文件访问控制权限

本文阅读 5 分钟
首页 系统笔记 正文

一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的,能够对很多人同时生效。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。

通俗来讲,基于普通文件或目录设置 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--
原创文章,作者:張旭,如若转载,请注明出处:http://www.zxbke.cn/45.html/