Linux ACL权限

ACL权限

简介

UGO权限管理方式只能对属主、同组用户和其他组用户进行权限管理,很难对每个用户或用户组进行权限管理。ACL就是为了这种解决局限性而生的。

所谓ACL 就是访问控制列表(Access Control List),为了与其他的ACL相区别,有时也称文件访问控制列表(FACL)。一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。

支持ACL 需要内核和文件系统的支持。Linux 从2.6版内核开始支持ACL。 不是所有类型的文件系统均支持ACL,但Linux 2.6 内核配合常用的 ext2/ext3/ext4,jfs,xfs,ReiserFS等文件系统,都可以支持ACL。

查看ACL支持

虽然ACL是控制文件的访问权限的,但是它需要分区的支持。所以我们先要查看分区ACL权限是否开启。
dumpe2fs -h /dev/sda3:查看sda3是否开启ACL权限
dumpe2fs命令是查询指定分区详细文件系统信息的命令。
选项:-h:仅显示超级块中信息,而不显示磁盘块组的详细信息。

示例
先使用df -h查看我们当前的分区信息。
Linux ACL权限_第1张图片
我们看到根分区挂载到/dev/sda3下面,所以使用dumpe2fs -h /dev/sda3查看sda3是否开启ACL权限。
在这里插入图片描述
我们看到这种提示信息,因为CentOS7,根分区默认使用的文件系统类型是xfs,而7以前的版本使用的是ext4类型。因此,是因为两个版本系统的根目录使用的文件系统类型不一样。我们可以使用df -Th查看所有分区以及分区的文件系统。
Linux ACL权限_第2张图片

我们使用命令xfs_info查看xfs信息。
Linux ACL权限_第3张图片

CentOS下的ACL

CentOS7默认支持ACL.

  • CentOS7的Linux内核版本3.10.0支持ACL。
  • 默认使用的xfs和ext4文件系统也支持ACL。
  • 软件包acl提供了用于查看和设置ACL的工具。

开启ACL权限

一般都是默认开启的,所以一般不需要我们做。

  1. 临时开启
    mount -o remount,acl /:重新挂载根分区,并且挂载加入ACL权限。

  2. 永久开启
    先修改配置文件 /etc/fstab,在红框的位置加入,acl
    Linux ACL权限_第4张图片
    然后mount -o remount /重新挂载文件系统或者重启系统,使得修改生效。

ACL的查看与设定

设定

设定ACL权限:setfacl 选项 文件名

选项
-m:设定ACL权限
-x:删除指定的ACL权限
-b:删除所有的ACL权限
-d:设定默认的ACL权限
-k:删除默认的ACL权限
-R:递归设定ACL权限

规则

指定ACL模式规则,可用如下形式。

  • [d:]u:uid:perms:为指定的用户(使用UID或者用户名)设置ACL权限
  • [d:]g:gid:perms:为指定的组(使用GID或者组名)设置ACL权限
  • [d:]o:[:]perms:为其他用户设置ACL权限
  • [d:]m:[:]perms:设置有效的访问掩码

其中:

  • 使用d:前缀时用于设置默认ACL(d:前缀只能用于对目录的设置)。
  • perms为r、w、x、-或者其组合。

示例

  • 允许osmond用户对myfile 文件进行读,写,执行
    #setfacl -m u:osmond:rwx myfile

  • 允许osmond 用户对mydir 目录进行读、写、执行
    #setfacl -m u:osmond:rwx mydir

  • 允许 market组对/share/project/marketdir 目录进行读、写
    #setfacl-m g:market:rw /share/project/marketdir

  • 允许lrj用户对/share/docs 目录进行读、写
    #setfacl -m d:u:lrj:rw /share/docs

  • 删除 osmond 用户对 /share/project 目录操作的ACL
    #setfacl -x u:osmond /share/project

  • 对/share/data/目录设置默认ACL:
    允许doc组读、写、执行
    同时对/share/data/目录及其所有子目录递归地设置存取ACL
    允许doc组读、写、执行并禁止staff组读、写、执行
    #setfacl -R -m g:doc:rwx,d:g:doc:rwx,g:staff:--- /share/data

  • 对所有用户和所有组撤销对 myfile 的写权限
    #setfacl -m m::rx myfile

查看

查看ACL权限:getfacle 文件名
getfacl用于查看文件或目录的ACL设置。
Linux ACL权限_第5张图片

mask

最大有效权限mask :mask是用来指定最大有效权限的。
如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。
Linux ACL权限_第6张图片

递归ACL权限

递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
格式:setfacl -m u:用户名:权限 -R 目录名

示例
我们先新建一个test文件夹,在这个文件夹下面新建两个文件aaa和bbb,先查看他们的权限是没有ACL权限的。
Linux ACL权限_第7张图片
我们给test加上ACL权限,并且启用-R递归参数,再次查看这几个文件的信息。Linux ACL权限_第8张图片
但是这个时候我们新建一个文件ccc,查看它的信息:

Linux ACL权限_第9张图片
所以我们每次新建一个文件,都需要重新给目录设定递归ACL权限,这样很麻烦。
所以我们需要使用默认ACL权限。↓

默认ACL权限

默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
格式:setfacl -m d:u:用户名:权限 文件名

示例

Linux ACL权限_第10张图片
我们给test文件夹设定默认ACL权限,setfacl -m d:u:xiaoma:rx test/,然后我们再次在里面新建一个新的文件test,查看它的信息,发现他也支持ACL权限了。


end.

你可能感兴趣的:(Linux)