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--`
posted @   厚礼蝎  阅读(89)  评论(0编辑  收藏  举报
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示