news 2026/7/2 11:09:32

一文搞懂 Linux ACL:突破传统 UGO 权限的局限

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文搞懂 Linux ACL:突破传统 UGO 权限的局限

Linux 中的ACL(Access Control List,访问控制列表)是对传统 Unix 权限(rwx)的扩展,它可以让一个文件或目录同时针对多个用户或多个组设置不同的权限

如果没有 ACL,一个文件只能设置:

  • 文件所有者(Owner)

  • 所属组(Group)

  • 其他用户(Others)

而 ACL 可以额外指定:

  • 指定某个用户(User)的权限

  • 指定某个组(Group)的权限

  • 默认权限(Default ACL)


一、为什么需要 ACL

假设有如下场景:

文件: report.txt Owner:root Group:dev 权限: -rw-r-----

传统权限表示:

root rw- dev r-- others ---

现在有三个用户:

alice bob tom

要求:

alice 可以读写 bob 只能读 tom 没权限

传统 Linux 权限:

chmod chown chgrp

根本做不到。

只能:

Owner Group Others

三级权限。

ACL 就能做到:

root rw- dev r-- alice rw- bob r-- tom ---

二、ACL 工作原理

Linux 权限实际上变成了:

文件 Owner Group Others │ │ +--------------+ | ACL | |--------------| | user:alice | | user:bob | | group:test | +--------------+

即:

传统权限 + ACL 扩展权限

ACL 信息不会覆盖 chmod 权限,而是附加在 inode 的扩展属性(Extended Attributes,xattr)中

因此:

ls -l

看到:

-rw-r-----+

最后那个:

+

表示:

此文件拥有 ACL。

例如:

-rwxrwx---+

说明:

ACL 存在

三、ACL 分类

Linux ACL 分为:

Access ACL

访问 ACL

用于:

文件 目录

例如:

user:alice:rwx group:test:r-x

另一种:

Default ACL

默认 ACL

只能用于:

目录

作用:

目录中新创建的文件自动继承 ACL。

例如:

dir/ default:user:alice:rwx

以后:

touch dir/a.txt

自动拥有:

user:alice:rwx

四、查看 ACL

命令:

getfacl 文件名

例如:

getfacl test.txt

输出:

# file: test.txt # owner: root # group: root user::rw- user:alice:rwx group::r-- group:dev:r-- mask::rwx other::---

逐项解释:

user::

表示:

Owner 权限

例如:

user::rw-

就是:

root -> rw-

user:alice:rwx

表示:

alice -> rwx

ACL 新增权限。


group::

表示:

文件所属组权限

例如:

group::r--

就是:

dev组 -> r--

group:test:rwx

表示:

test组成员

拥有:

rwx

mask::

ACL 最重要的一项。

例如:

mask::rw-

它表示:

ACL 最大权限。

ACL 中:

所有 group 以及所有 user(除 owner)

都会受到 mask 限制。

例如:

user:alice:rwx mask::rw-

最终:

alice 实际权限: rw-

不是:

rwx

因为:

x 被 mask 去掉

other::

就是:

Others 权限

五、设置 ACL

命令:

setfacl

格式:

setfacl -m 类型:对象:权限 文件

例如:

-m

表示:

modify

给用户增加 ACL

例如:

setfacl -m u:alice:rwx file.txt

查看:

getfacl file.txt

输出:

user:alice:rwx

给组增加 ACL

setfacl -m g:test:r-x file.txt

得到:

group:test:r-x

修改 ACL

再次执行:

setfacl -m u:alice:r--

即可覆盖:

alice rwx ↓ r--

六、删除 ACL

删除某用户:

setfacl -x u:alice file.txt

删除某组:

setfacl -x g:test file.txt

删除全部 ACL:

setfacl -b file.txt

意思:

remove all ACL

恢复普通权限。


七、默认 ACL(Default ACL)

假设:

/project

所有新文件:

alice

都应该有:

rwx

设置:

setfacl -m d:u:alice:rwx /project

查看:

getfacl /project

得到:

default:user:alice:rwx

以后:

touch /project/a.txt

自动继承:

user:alice:rwx

删除默认 ACL:

setfacl -x d:u:alice dir

八、递归设置 ACL

目录:

project/

所有文件:

alice:rwx
setfacl -R -m u:alice:rwx project

递归:

-R

默认 ACL:

setfacl -R -m d:u:alice:rwx project

以后所有新文件继续继承。


九、Mask(ACL 掩码)详解

ACL 中最容易混淆的是mask

例如:

user:alice:rwx mask::r-- other::---

虽然:

alice=rwx

实际上:

Effective r--

查看:

getfacl

可能显示:

user:alice:rwx #effective:r--

为什么?

因为:

实际权限 = ACL权限 AND mask权限

即:

rwx 111 AND r-- 100 = 100 = r--

修改 mask:

setfacl -m m:rwx file

或:

setfacl -m mask:rwx file

十、ACL 与 chmod 的关系

很多人误认为:

chmod 不会影响 ACL

实际上:

会影响 mask 和基础权限。

例如:

chmod g-w file

可能导致:

mask

同步变化。

因此:

ACL 配置后,最好再检查:

getfacl

确认最终有效权限。


十一、ACL 与 umask 的关系

创建文件时:

最终权限 = 程序默认权限 AND ~umask

如果目录设置了Default ACL

  1. 先根据 Default ACL 生成 ACL。

  2. 再结合umask调整基础权限。

  3. 最终形成新文件的访问权限。

因此,Default ACL 与umask会共同影响新建文件的权限


十二、ACL 文件备份与恢复

导出 ACL:

getfacl -R /project > acl.backup

恢复 ACL:

setfacl --restore=acl.backup

这对于迁移目录、灾难恢复或批量复制权限非常有用。


十三、ACL 实战示例

示例 1:多个用户访问同一文件

touch report.txt chmod 640 report.txt setfacl -m u:alice:rw report.txt setfacl -m u:bob:r report.txt getfacl report.txt

效果:

用户权限
Ownerrw-
Groupr--
alicerw-
bobr--
Others---

示例 2:项目目录共享

开发目录:

/project

要求:

  • 所有开发人员属于dev组,可读写。

  • 测试人员tester只读。

  • 新建文件自动继承权限。

配置:

mkdir /project chgrp dev /project chmod 2770 /project # SGID,确保新文件继承 dev 组 setfacl -m g:tester:r-x /project setfacl -m d:g:tester:r-x /project setfacl -m d:g:dev:rwx /project

这样,新建文件会自动继承相应 ACL,减少后续维护工作。


十四、ACL 常用命令速查

功能命令
查看 ACLgetfacl file
增加用户 ACLsetfacl -m u:user:rwx file
增加组 ACLsetfacl -m g:group:rwx file
修改 Masksetfacl -m m:rwx file
删除用户 ACLsetfacl -x u:user file
删除组 ACLsetfacl -x g:group file
删除所有 ACLsetfacl -b file
设置默认 ACLsetfacl -m d:u:user:rwx dir
删除默认 ACLsetfacl -x d:u:user dir
递归设置 ACLsetfacl -R -m u:user:rwx dir
导出 ACLgetfacl -R dir > acl.backup
恢复 ACLsetfacl --restore=acl.backup

十五、最佳实践

  1. 优先使用传统权限模型(Owner、Group、Others),仅在无法满足需求时引入 ACL,以降低管理复杂度。

  2. 项目共享目录建议结合 SGID 与 Default ACL,既能保证新文件继承正确的组,也能自动继承 ACL。

  3. 配置 ACL 后始终使用getfacl验证结果,特别关注mask#effective字段,避免实际权限与预期不符。

  4. 迁移或备份重要目录时同步备份 ACL,否则恢复后可能出现权限异常。

  5. 注意文件系统支持:现代的ext4XFSBtrfs等通常支持 POSIX ACL,但在挂载参数或某些网络文件系统环境下仍需确认 ACL 是否启用。可以使用mounttune2fs或创建测试 ACL 进行验证。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 11:06:14

基于改进YOLO11的天际线检测算法:复杂光照与恶劣天气适配实战

摘要:天际线(Skyline)检测是自动驾驶定位、无人机视觉导航及地理信息系统(GIS)校准的核心前置任务。然而,传统YOLO11在面对逆光/过曝、雾霾/雨雪散射、以及城市夜景人造光源干扰时,常出现轮廓断…

作者头像 李华
网站建设 2026/7/2 11:04:59

USB设备在VMware中“消失”的7种隐性诱因,含vSphere 8.0U2新Bug预警

更多请点击: https://kaifayun.com 第一章:USB设备在VMware中“消失”的现象级诊断全景 USB设备在VMware虚拟机中“突然不可见”或“连接后立即断开”是高频且棘手的问题,其成因横跨宿主机驱动、VMware服务状态、USB控制器配置及权限模型多个…

作者头像 李华
网站建设 2026/7/2 11:01:08

仿iCloud钓鱼攻击深度剖析:从攻击链拆解到多维度防御实战

1. 项目概述:当“官方”通知成为攻击入口 最近在分析一些企业安全事件时,我发现一种利用用户对云服务信任心理的新型钓鱼攻击正在抬头,其核心就是“仿 iCloud 存储告警钓鱼”。攻击者不再简单地伪造一个银行登录页面,而是精心模仿…

作者头像 李华
网站建设 2026/7/2 11:00:18

2026年数字分身定制指南:如何克隆专属盈启鲲鹏

你是否想过,有一天自己不用出镜、不用说话,却能24小时在线“直播”?2026年,这不再是科幻片里的场景。对于中小实体商家来说,成本压力、运营能力不足、直播时长受限,是绕不开的三座大山。而数字分身技术的成…

作者头像 李华
网站建设 2026/7/2 10:59:00

大模型学习路线图:小白也能轻松入门,收藏这份进阶指南

本文提供了一套合理的大模型学习顺序,帮助初学者循序渐进地掌握大模型技术。从Python基础和Transformer架构开始,逐步深入到提示词工程、RAG、LangChain等实用技术,再到Agent、多模态等高级应用。文章强调实践的重要性,建议读者通…

作者头像 李华