news 2026/3/1 20:16:16

Linux 命令:setfacl

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 命令:setfacl

Linux 命令:setfacl

setfacl 是 Linux 中设置文件/目录扩展访问控制列表(ACL)的专用命令,核心作用是突破 Linux 传统u/g/o(所有者/所属组/其他用户)的3级权限限制,为单个用户、单个用户组精准配置自定义权限,实现精细化的文件权限管控(如给非所有者、非所属组的指定用户分配读权限,给特定组分配读写执行权限),是多用户、多业务场景下Linux权限管理的核心工具,与getfacl配套使用实现ACL权限的「查看-配置-管理」。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

核心背景

Linux 传统权限仅支持所有者、所属组、其他用户三个维度的权限分配,无法为单独的用户/组做精细化权限配置,存在明显的权限管控短板:

  • 场景1:想给用户tom分配文件/data/file.txt的读权限,但tom既不是文件所有者,也不在所属组,传统权限只能将其归为「其他用户」,无法单独配置;
  • 场景2:想给用户组dev分配目录/data/code的读写权限,给用户组test分配仅读权限,传统权限无法为多个组分别配置不同权限。

ACL(Access Control List,访问控制列表)正是为解决该问题设计,通过setfacl可为任意单个用户、任意单个用户组、默认继承规则配置独立的rwx权限,突破3级权限限制,实现精细化、颗粒化的权限管控,而setfacl就是实现ACL权限配置的核心命令。

核心特点

  1. 突破传统权限限制:支持为单个用户、单个用户组配置独立权限,不再受u/g/o三维限制;
  2. 细粒度权限管控:可分别为读(r)、写(w)、执行(x)配置权限,精准控制访问范围;
  3. 支持默认ACL规则:可为目录配置默认ACL,新创建的子文件/子目录会自动继承该规则,无需重复配置;
  4. 递归应用权限:支持对目录及其下所有子文件、子目录递归配置ACL权限,适配批量权限分配;
  5. 权限叠加生效:ACL权限与传统u/g/o权限叠加,满足权限的多重组合需求;
  6. 配套查看工具:与getfacl命令无缝配合,前者配置ACL,后者查看ACL,形成完整权限管理闭环。

基本语法

setfacl 语法围绕用户/组指定、权限配置、作用范围设计,核心分为给用户配置ACL给用户组配置ACL配置默认ACL三类,支持单文件、多文件、目录等所有文件系统对象:

# 基础语法:给指定用户/组配置ACL权限setfacl[选项][u:用户名:权限][g:组名:权限]文件/目录# 核心语法:递归配置ACL权限(目录)setfacl[选项]-R[u:用户名:权限][g:组名:权限]目录# 核心语法:配置默认ACL规则(仅目录,子文件自动继承)setfacl[选项]-d[u:用户名:权限][g:组名:权限]目录

关键标识说明

  1. 权限指定标识:
    • u:用户名:权限:为单个用户配置ACL权限,如u:tom:rwx
    • g:组名:权限:为单个用户组配置ACL权限,如g:dev:rw
    • d::默认ACL规则标识,仅对目录有效,新创建的子文件/目录自动继承,如d:u:tom:r
  2. 权限值:与传统权限一致,支持r(读,4)、w(写,2)、x(执行,1),可组合使用(如rwrwx),也可使用数字权限(如6代表rw7代表rwx);
  3. 通配符:支持*匹配多个文件/目录,如setfacl u:tom:r *.txt

常用选项

setfacl 选项围绕递归应用、默认规则、权限覆盖、操作反馈设计,功能聚焦且无冗余,日常使用掌握6个核心选项即可覆盖99%的权限管理场景,其中递归-R和默认-d是高频组合:

选项核心作用实用场景
-R递归应用ACL权限为目录及其下所有子文件、子目录批量配置ACL权限,无需逐个指定
-d配置默认ACL规则为目录配置默认权限,新创建的子文件/子目录自动继承,适合长期固定权限策略
-m新增/修改ACL权限规则保留原有ACL规则,新增或修改指定用户/组的权限(默认选项,可省略
-x删除指定用户/组的ACL权限规则仅删除目标用户/组的ACL权限,保留其他用户/组的规则
-b删除所有ACL权限规则清空文件/目录的所有ACL配置,恢复到传统u/g/o权限状态
-v详细模式,输出权限配置的详细过程验证权限配置是否成功,排查批量配置时的异常问题
-n不更新传统权限的掩码(mask)避免ACL权限配置影响传统u/g/o的掩码权限,保持权限独立

关键默认行为

-m是setfacl的默认选项,即直接执行setfacl u:tom:r file.txt等价于setfacl -m u:tom:r file.txt,日常使用可省略,简化命令。

经典实操示例

setfacl 的使用场景集中在精细化权限配置,核心分为「给用户配权限」「给组配权限」「递归配权限」「默认ACL规则」四大类,所有示例均搭配getfacl验证配置结果,形成「配置-验证」闭环,贴合真实多用户运维场景。

前置准备

  1. 查看文件/目录的传统权限:用ls -l确认基础权限,作为ACL配置的参考;
  2. 查看文件/目录的ACL权限:用getfacl查看当前ACL配置,无配置时仅显示传统权限相关信息;
  3. 准备测试对象:创建测试文件test.txt和测试目录test_dir,用于ACL配置测试。
# 查看传统权限ls-l test.txt test_dir# 查看ACL权限(初始无配置,仅显示基础信息)getfacl test.txt test_dir

场景1:核心基础——给单个用户配置ACL权限

为非所有者、非所属组的指定用户配置独立ACL权限,突破传统u/g/o限制,是setfacl最基础、最常用的场景。

# 给用户tom配置test.txt的读+写权限(等价于setfacl -m u:tom:rw test.txt)setfacl u:tom:rw test.txt# 验证ACL配置结果(用getfacl查看,新增user:tom:rw-规则)getfacl test.txt# 给用户jerry配置test_dir的读+执行权限(目录执行权限为进入权限)setfacl u:jerry:rx test_dir

场景2:核心基础——给单个用户组配置ACL权限

为指定用户组配置独立ACL权限,实现对多个用户的批量权限管控,比传统所属组更灵活(可配置多个组)。

# 给用户组dev配置test.txt的读+写+执行权限setfacl g:dev:rwx test.txt# 给用户组test配置test_dir的仅读权限setfacl g:test:r test_dir# 验证ACL配置结果(新增group:dev:rwx、group:test:r--规则)getfacl test.txt test_dir

场景3:高频实战——递归给目录配置ACL权限

通过-R选项,为目录及其下所有已存在的子文件、子目录递归配置ACL权限,适配批量权限分配场景(如给开发组配置项目目录的全量权限)。

# 递归给用户组dev配置test_dir及其下所有子文件的读+写+执行权限setfacl -R g:dev:rwx test_dir# 递归给用户tom配置test_dir及其下所有子文件的读权限setfacl -R u:tom:r test_dir# 验证目录内子文件的ACL配置(已继承递归配置的权限)getfacl test_dir/*

场景4:核心实战——配置目录的默认ACL规则

通过-d选项为目录配置默认ACL规则(仅对目录有效),新创建的子文件/子目录会自动继承该规则,无需为新文件重复配置ACL,是长期权限策略的核心配置方式。

# 给test_dir配置默认ACL规则:用户tom拥有读+写权限,用户组dev拥有读+写+执行权限setfacl -d u:tom:rw -d g:dev:rwx test_dir# 验证默认ACL规则(getfacl显示default:开头的规则)getfacl test_dir# 测试继承效果:在test_dir内创建新文件new.txt和新目录new_dirtouchtest_dir/new.txtmkdirtest_dir/new_dir# 验证新文件/新目录的ACL权限(已自动继承默认规则)getfacl test_dir/new.txt test_dir/new_dir

场景5:组合用法——递归+默认ACL规则配置

-R(递归配置现有文件)和-d(配置默认规则)组合,实现「现有文件批量配置+新文件自动继承」的全量权限管控,是项目目录、数据目录的标准ACL配置方式。

# 对test_dir:递归给dev组配rwx权限(现有文件)+ 配置默认rwx权限(新文件继承)setfacl -R -d g:dev:rwx test_dir# 验证:现有文件有group:dev规则,目录有default:group:dev规则getfacl test_dir test_dir/*

场景6:修改已有ACL权限规则

保留原有ACL规则,仅修改指定用户/组的权限(直接重新执行setfacl命令即可,自动覆盖原有规则)。

# 原有配置:tom对test.txt有rw权限getfacl test.txt# 修改tom的权限为仅读(直接重新配置,自动覆盖)setfacl u:tom:r test.txt# 验证修改结果(tom的权限已变为r--)getfacl test.txt

场景7:删除指定用户/组的ACL权限规则

通过-x选项,仅删除目标用户/组的ACL权限,保留其他用户/组的ACL规则,不影响传统权限。

# 删除用户tom的ACL权限(仅指定u:用户名,无需写权限)setfacl -x u:tom test.txt# 删除用户组dev的ACL权限(仅指定g:组名,无需写权限)setfacl -x g:dev test_dir# 验证删除结果(对应规则消失,其他规则保留)getfacl test.txt test_dir

场景8:清空所有ACL权限规则

通过-b选项,删除文件/目录的所有ACL权限规则,恢复到仅传统u/g/o权限的状态,适合ACL配置混乱后的重置。

# 清空test.txt的所有ACL权限规则setfacl -b test.txt# 清空test_dir的所有ACL权限规则(包括默认规则)setfacl -b test_dir# 验证结果(getfacl仅显示传统权限,无任何ACL规则)getfacl test.txt test_dir

场景9:数字权限配置

支持用数字表示权限(与传统权限数字一致:r=4、w=2、x=1),与字符权限效果完全一致,适合习惯数字权限的场景。

# 数字权限6=rw,给用户tom配置test.txt的rw权限setfacl u:tom:6 test.txt# 数字权限7=rwx,给用户组dev配置test_dir的rwx权限setfacl g:dev:7 test_dir# 验证结果(与字符权限配置一致)getfacl test.txt test_dir

高频组合用法

setfacl 常与getfacl(查看ACL)、ls -l(查看传统权限)、chown(修改所有者)、chgrp(修改所属组)搭配,形成Linux完整的权限管理流程,覆盖从基础权限到精细化权限的所有管控需求。

组合1:基础权限+ACL权限综合配置

先配置文件的传统u/g/o基础权限,再为指定用户/组配置ACL精细化权限,实现双层权限管控。

# 步骤1:修改test_dir的所有者为root,所属组为admin(传统权限)chownroot:admin test_dir# 步骤2:配置传统权限:所有者rwx,所属组rx,其他用户无权限chmod750test_dir# 步骤3:配置ACL权限:给用户tom配rx,给用户组dev配rwxsetfacl -R -d u:tom:rx -d g:dev:rwx test_dir# 步骤4:验证所有权限(传统+ACL)ls-l test_dir getfacl test_dir

组合2:ACL权限备份与恢复

getfacl将文件/目录的ACL权限导出为文本文件(备份),再通过setfacl从文本文件导入ACL权限(恢复),适合服务器迁移、权限备份场景。

# 步骤1:将test_dir的ACL权限导出到acl_backup.txt(备份)getfacl test_dir>acl_backup.txt# 步骤2:清空test_dir的ACL权限(模拟权限丢失)setfacl -b test_dir# 步骤3:从备份文件导入ACL权限(恢复,--restore指定备份文件)setfacl --restore=acl_backup.txt# 步骤4:验证恢复结果(ACL权限与备份前一致)getfacl test_dir

组合3:批量给多个用户配置ACL权限

通过shell循环,配合用户列表,为多个用户批量配置相同的ACL权限,适配多用户统一权限管控场景。

# 定义需要配置权限的用户列表users=("tom""jerry""mike")# 循环为每个用户配置test_dir的rx权限foruserin"${users[@]}";dosetfacl -R -d u:$user:rx test_dirdone# 验证批量配置结果getfacl test_dir

与传统权限(chmod/chown)的核心区别

setfacl(ACL权限)与chmod/chown(传统权限)都是Linux权限管理工具,但管控维度、灵活性、适用场景完全不同,二者是互补关系,而非替代关系,核心区别如下:

工具/权限管控维度权限粒度核心能力适用场景
chmod/chown(传统权限)所有者、所属组、其他用户,共3维粗粒度,仅支持三维整体配置配置基础的rwx权限,修改所有者/所属组简单权限管控场景,单用户/单组操作
setfacl(ACL权限)可对任意单个用户、任意单个用户组配置,无维度限制细粒度,精准到单个用户/组突破3维限制,配置默认继承规则,递归批量配置多用户、多业务精细化权限管控场景,如开发/测试环境、共享目录

权限生效原则

ACL权限与传统权限叠加生效,且ACL权限优先级高于传统权限

  1. 若用户是文件所有者,优先应用传统所有者权限,忽略ACL中对该用户的配置;
  2. 若用户不是所有者,但属于某个配置了ACL的组,优先应用ACL组权限;
  3. 若用户配置了单独的ACL权限,优先应用该用户的ACL权限;
  4. 以上均不满足,才应用传统的「其他用户」权限。

关键注意事项

  1. 文件系统支持ACL:部分Linux文件系统默认未开启ACL支持(如ext3),需通过tune2fs -o acl 分区名开启,ext4、xfs等主流文件系统默认开启;
  2. 仅目录可配置默认ACL:-d(默认ACL规则)仅对目录有效,对文件使用会报错,新文件/目录仅继承父目录的默认ACL;
  3. 递归仅作用于已存在的文件:-R仅对目录下已存在的子文件/子目录生效,新创建的文件需配合-d(默认ACL)才能继承权限;
  4. 不要随意清空默认ACL:清空目录的默认ACL后,新创建的文件将不再继承任何ACL权限,需重新配置;
  5. ACL权限不影响传统权限:修改/删除ACL权限,不会改变文件的传统u/g/o权限,二者相互独立;
  6. 根目录慎用ACL:对/根目录配置ACL权限时需谨慎,避免因权限配置错误导致系统服务无法访问核心文件;
  7. 配合getfacl使用:ACL权限无法通过ls -l完全查看(仅显示+号标识存在ACL),必须用getfacl查看完整的ACL配置。

快速识别ACL权限

ls -l查看文件/目录权限时,若权限列末尾有**+号**,表示该文件/目录配置了ACL权限,无+号则无ACL配置:

# 权限列末尾+号,说明配置了ACL权限ls-l test.txt# 输出示例:-rw-rw-r--+ 1 root root 0 月 日 时:分 test.txt

总结

setfacl 是 Linux 中精细化权限管理的核心工具,核心价值是突破传统u/g/o三维权限限制,为任意单个用户、单个用户组配置精准的ACL权限,实现多用户、多业务场景下的颗粒化权限管控,同时支持默认继承、递归批量配置等实用功能,是开发/测试环境、共享目录、多用户服务器的必备工具,核心要点可总结为:

  1. 核心功能:为单个用户/组配置ACL权限,配置目录默认ACL规则(自动继承),递归批量配置权限,与getfacl形成「配置-查看」闭环;
  2. 最常用法:u:用户名:权限(用户配置)、g:组名:权限(组配置)、-R(递归)、-d(默认规则),四者是日常运维的高频组合;
  3. 权限特性:与传统权限叠加生效,ACL权限优先级更高,仅目录可配置默认ACL,递归仅作用于已存在的文件;
  4. 工具互补:与chmod/chown(传统权限)互补,传统权限做基础管控,ACL权限做精细化管控;
  5. 避坑关键:文件系统需支持ACL,默认ACL仅对目录有效,用ls -l+号快速识别ACL,用getfacl查看完整配置。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 1:00:07

亲测有效的酒吧互动点歌系统案例分享

智能点歌系统:让酒吧互动更嗨的神器 需求唤醒引言 在酒吧,音乐是点燃气氛的关键。然而,传统的点歌方式往往效率低下,容易导致顾客等待时间过长,影响整体体验。熹乐互动软件的智能点歌系统正是解决这一痛点的高效工具…

作者头像 李华
网站建设 2026/3/1 19:57:31

亲测有效!清吧互动大屏点歌实践分享

智能点歌:让清吧互动更上一层楼的秘密武器企业内容团队在清吧活动中常常面临的一个痛点是,如何提升现场氛围并保持观众的参与度。传统的点歌方式往往效率低下,难以满足现代消费者对即时互动的需求。熹乐互动软件的智能点歌功能正是解决这一痛…

作者头像 李华
网站建设 2026/2/28 21:22:46

知识图谱是啥?与关系型数据库有何区别?

知识图谱是一种结构化的语义知识库,以符号化方式刻画现实世界中的概念及其关联,其核心单元为“实体—关系—实体”三元组。 知识图谱——Knowledge Graph,伴随人工智能的持续演进,其应用广度与影响力日益提升,然而&am…

作者头像 李华
网站建设 2026/2/27 10:05:55

最近在搞路径规划项目,发现A*这玩意儿真是又好用又有趣。今天咱们用Matlab从头撸个带自定义地图的A*路径规划,保证代码比教程还清楚,直接开整

A*算法路径规划 A星Matlab路径规划 自定义栅格 可自行更改绘制栅格地图,自定义起始点目标点位置、未知障碍物位置 matlab实现 详细注释! 先来个灵魂草图:地图用栅格表示,0能走,1是墙,起点终点自己定。Matla…

作者头像 李华
网站建设 2026/3/1 0:11:16

宕机智能诊断利器来了,助你告别 Linux 宕机分析“三座大山”

前言 Linux 系统突发宕机是运维人员和开发者经常面临的难题。面对复杂的内核日志和内存转储文件,传统分析方式往往耗时费力且需要深厚的内核知识。本文将介绍阿里云操作系统控制台的宕机智能诊断功能,并展示其如何通过 AI 技术简化宕机分析流程。 传统…

作者头像 李华