细说Linux ACL,解锁高级权限配置

ACL权限概述

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。

它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。

场景

通常无论文件还是目录都会有基础的三类权限

  • 拥有者(owner):文件的创建者或拥有者。
  • 用户组(group):文件所属的用户组。
  • 其他人(others):除拥有者和用户组之外的所有用户。

而无特殊需求的情况下,这三类就基本满足需求了。

但是如果出现了需要有第四类权限的需求,基础权限就无法满足了,这个时候,就需要使用ACL了。

使用

查看ACL权限

使用 getfacl 命令

getfacl 文件/目录名

示例


$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:user:user2:---
default:group::r-x
default:mask::r-x
default:other::r--

$ getfacl 111.log 
# file: 111.log
# owner: root
# group: root
user::rw-
user:user2:---
group::r--
mask::r--
other::r--

操作ACL权限

使用 setfacl 命令>>>>

参数

setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录名

  • -m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
  • -x :删除后续的 acl 参数,不可与 -m 合用;
  • -b :移除所有的 acl 配置参数;
  • -k :移除默认的 acl 参数;
  • -R :递归配置 acl; 既设定的 acl 权限会对目录下所有子文件生效。
  • -d :配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;

>>>>

添加或修改ACL权限


# 对文件test.txt设置user2用户的权限是---
setfacl -m u:user2:--- test.txt

# 对文件1设置user2组的权限是rwx
setfacl -m g:user2:rwx test.txt

结果

$ ll test.txt
# 会发现最后的 . 变成了 +
-rw-r--r--+ 1 root root 0 Aug  6 03:24 test.txt

$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:user2:---
group::r--
group:user2:rwx
mask::r--
other::r--

>>>>

删除ACL权限

setfacl -x u:user2 test.txt

$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
group:user2:rwx
mask::r--
other::r--

setfacl -x g:user2 test.txt

$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--

$ ll test.txt
# 会发现最后的 . 变成了 +
-rw-r--r--+ 1 root root 0 Aug  6 03:24 test.txt

此时我们虽然已经删掉了添加的两条acl,但是在ll的时候,还是有

这个时候就需要用到 -b 了,清除所有acl规则

$ setfacl -b test.txt
$ ll test.txt
-rw-r--r--. 1 root root 0 Aug  6 03:24 test.txt

>>>>

默认ACL权限(default)

default 权限在 ACL(Access Control List)中的继承行为是为了方便和简化权限管理。当我们在一个目录上设置了 default 权限时,这些权限会自动应用于该目录下新创建的文件或子目录。

>修改default权限


# 修改文件夹a的default权限中grop的权限为---
setfacl -d -m g::--- a

$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:group::---
default:other::r--

此时我们再在a目录下创建文件夹

$ mkdir a/dir1
$ getfacl a/dir1
# file: a/dir1
# owner: root
# group: root
user::rwx
group::---
other::r--
default:user::rwx
default:group::---
default:other::r--

可以看到不仅继承了default权限,而且自己的权限也是继承的父目录的default权限

创建文件


$ touch a/file1
$ getfacl a/file1 
# file: a/file1
# owner: root
# group: root
user::rw-
group::---
other::r--

可以看到,文件是没有default权限的,但是自己的权限也是继承自父目录的default权限的,因为文件的满权限也只是666,所以default中的执行权限是无法继承到文件中的。

>添加或修改其他default权限

例如文件夹中所有创建的文件夹或者文件对 user2 的权限都是 r-x


$ setfacl -m d:u:user2:r-x a
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:user:user2:r-x
default:group::r-x
default:mask::r-x
default:other::r--

此时在目录a下创建文件和文件夹


$ mkdir a/dir2
$ getfacl a/dir2
# file: a/dir2
# owner: root
# group: root
user::rwx
user:user2:r-x
group::r-x
mask::r-x
other::r--
default:user::rwx
default:user:user2:r-x
default:group::r-x
default:mask::r-x
default:other::r--

$ touch a/file2
$ getfacl a/file2
# file: a/file2
# owner: root
# group: root
user::rw-
user:user2:r-x      #effective:r--
group::r-x          #effective:r--
mask::r--
other::r--

可以看到,文件夹可以完美继承default权限,但是文件的话,执行权限会无法继承,提示有效的权限是 r–

声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Linux

玩转企业集群运维管理系列:Haproxy 负载均衡集群部署实践

2024-9-13 14:04:26

Linux

Linux三剑客之sed 命令基本用法

2024-11-19 15:51:53

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索