导读:本期聚焦于北京SEO公司创作的《如何在CentOS系统中使用访问控制列表ACL限制文件和目录访问权限》,敬请观看详情。传统Linux文件权限只能针对用户、用户组和其他人三类身份设限,当遇到需要让某个特定账号临时读写某目录却又不能改动原有属组的情况便束手无策。CentOS提供的访问控制列表机制突破了这种限制,它允许管理员为单个用户或用户组单独设置读、写、执行权限,且能递归应用到子目录。本文梳理挂载支持、命令用法与常见误区,帮你用ACL精准管控服务器上的敏感路径,避免权限过大引发的安全风险。

在CentOS系统中,基础的Linux权限模型依靠所有者、所属组和其他人三种身份来控制文件与目录的访问,但在实际运维里经常会碰到更细粒度的需求。比如某台服务器上有一个共享目录,原本属于开发组,现在需要让测试组的个别成员也能写入,却又不能把整个测试组拉进开发组,否则权限会扩散。这时候传统的chmod和chown就不够用了,必须借助文件系统层面的访问控制列表,也就是ACL,来给具体的用户或组附加独立权限规则。

如何在CentOS系统中使用访问控制列表ACL限制文件和目录访问权限

一、确认文件系统与挂载选项对ACL的支持

并不是所有CentOS环境下的文件系统都默认开启ACL功能。早期 ext3、ext4 在挂载时如果没有指定 acl 选项,使用 setfacl 命令就会报错提示操作不支持。你可以通过 mount 命令查看当前分区挂载参数,或者检查 /etc/fstab 文件中的配置项。如果某个分区没有 acl 标记,需要手动添加并重新挂载,否则后面所有的ACL设置都无法生效。

以 ext4 文件系统为例,假设根分区对应的设备是 /dev/sda1,我们可以在 /etc/fstab 里将对应行的挂载选项改为 defaults,acl,随后执行 mount -o remount / 使其生效。对于 XFS 文件系统,CentOS 7 及之后版本默认就支持ACL,无需额外挂载参数,但确认一下总没有坏处。只有底层文件系统真正支持,用户态的 acl 工具包才能把权限记录写进磁盘inode的扩展属性中。

安装ACL工具也很简单,CentOS 自带 yum 包管理器,执行 yum install acl 即可获得 setfaclgetfacl 两个核心命令。前者用于设置和修改ACL规则,后者用于查看已有规则。缺少这两个命令时,系统虽然内核支持ACL,但管理员无法便捷操作,因此这一步是基础环境准备中不可省略的环节。

二、setfacl与getfacl命令的实战用法

设置ACL最常用的命令是 setfacl,其基本语法为 setfacl -m 规则 文件或目录。规则格式通常是 u:用户名:权限g:组名:权限,权限部分用 r、w、x 组合表示。例如要让用户 zhangsan 对 /data/share 目录有读写执行权限,可以运行 setfacl -m u:zhangsan:rwx /data/share。这条命令不会影响原所有者和组的权限,只是额外附加了一条针对 zhangsan 的允许规则。

若希望ACL递归应用到目录下所有已存在的子文件和子目录,需要加上 -R 参数,写成 setfacl -R -m u:zhangsan:rwx /data/share。但要注意,递归仅对执行命令时已有的内容生效,后续新建的文件不会自动继承,除非设置默认ACL。默认ACL通过 d: 前缀来声明,例如 setfacl -m d:u:zhangsan:rwx /data/share,这样之后在该目录里创建的任何文件都会带上对应的继承权限。

查看规则使用 getfacl 命令,直接跟上文件路径即可。输出内容里除了标准的 owner、group、other 权限行,还会出现 user:zhangsan:rwx 这样的额外条目,以及 default: 开头的继承项。当我们怀疑某个用户访问被拒时,第一反应应是 getfacl 核对实际生效规则,而不是反复改 chmod。下面是一段查看与设置的示例:

# 查看目录现有ACL
getfacl /data/share

# 给用户 lisi 添加读和执行权限
setfacl -m u:lisi:rx /data/share

# 设置默认ACL让新建文件继承读权限
setfacl -m d:u:lisi:r /data/share

删除某条ACL规则可以用 -x 参数,例如 setfacl -x u:zhangsan /data/share 会移除 zhangsan 的附加权限。如果要清空全部扩展ACL恢复成传统权限模样,则使用 setfacl -b /data/share。在批量维护脚本里,先 -b 再重新 -m 是一种安全的重置思路,能避免旧规则残留造成权限混乱。

三、ACL与传统权限及umask的相互影响

很多人误以为ACL是一条独立平行的权限系统,其实它是在传统权限检查之后做更细的判断。当一个进程访问文件时,内核先按所有者、组、其他人的顺序匹配,若命中则以此为准;若未命中但存在对应ACL条目,则按ACL条目裁决。因此如果文件其他人位设为无权限,而ACL明确给了某用户读权限,该用户依然可读,这是因为ACL条目优先级在具体匹配身份时高于 other 类别。

umask 也会影响ACL继承效果。默认ACL里的掩码(mask)条目决定了最大有效权限,如果 mask 是 r-x,那么即便给用户设了 rwx,实际生效也只有 r-x。setfacl 在设置用户权限时通常会自动计算并更新 mask,但手动修改或递归操作偶尔会让 mask 收缩,导致意料之外的拒绝访问。用 setfacl -m m:rwx 路径 可以显式放宽掩码,这条在排错时非常关键。

另外,使用 cp、mv 等命令时ACL处理行为不同。mv 在同一文件系统内移动文件会保留ACL,跨文件系统则丢失;cp 默认不保留,需加 --preserve=acl 参数。打包工具 tar 在CentOS较新版本里加上 --acls 选项也能备份扩展权限。忽视这些差异,往往在迁移数据后发现权限控制失效,却又查不出原因,所以制定备份和同步方案时必须把ACL纳入考虑。

# 跨目录复制并保留ACL
cp --preserve=acl /data/share/file.txt /backup/file.txt

# 用tar归档时包含ACL
tar --acls -czf share.tar.gz /data/share

综合来看,CentOS的ACL机制是传统权限极好的补充,它解决了多用户多组场景下精细化管控的难题。只要理清挂载支持、命令语法以及和umask掩码的关系,就能在共享目录、临时授权、应用隔离等场景中既保证协作顺畅又守住安全边界。日常运维中建议将关键路径的 getfacl 输出纳入配置审计,防止人员变动后废弃权限长期悬挂。

ACLCentOS文件权限修改时间:2026-08-18 16:54:50

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。