Linux如何使用setfacl设置ACL权限_Linux setfacl设置ACL权限方案

阿枫大大_2850

阿枫大大_2850

2026-04-01

378人浏览

原创

setfacl 并非万能,需文件系统支持acl且路径可写;设默认acl(-d)才使新建文件继承权限;mask限制非所有者/组权限,需显式更新;清空acl用-b,备份恢复用--restore。

linux如何使用setfacl设置acl权限_linux setfacl设置acl权限方案

setfacl 不是万能的权限补丁,它只在文件系统启用 ACL 支持且目标路径可写时才生效;直接执行 setfacl -m 却没反应,大概率是底层不支持或权限不足。

检查文件系统是否真正支持 ACL

很多用户跳过这步就开干,结果 setfacl 看似成功、getfacl 却报错或显示无变化。根本原因在于:ACL 是文件系统特性,不是内核默认全开的。

  • 运行 tune2fs -l /dev/your_partition | grep "Default mount options"(把 /dev/your_partition 换成实际挂载点对应设备,如 /dev/sda1),输出里必须含 acl
  • 若没有,需修改 /etc/fstab,在对应挂载项的 options 字段加 acl,例如:/dev/sda1 /data ext4 defaults,acl 0 2,然后执行 sudo mount -o remount /data
  • 临时启用(不改 fstab)可用 sudo mount -o remount,acl /mount/point,但重启后失效

给单个用户设读写权限,但新创建的文件不继承?

这是最常被忽略的坑:setfacl -m u:alice:rw file 只影响当前文件,对目录下后续新建文件完全无效。要让子文件自动获得权限,必须设「默认 ACL」(default ACL),且仅对目录有效。

  • 先确保目标是目录(比如 /shared),不是普通文件
  • 执行 setfacl -d -m u:alice:rwx /shared —— 注意 -d 参数,它表示“默认”,后续在此目录中新建的文件/子目录会自动带上该规则
  • 已有子内容不会自动更新,需额外加 -R: setfacl -R -m u:alice:rwx /shared(设当前权限) + setfacl -R -d -m u:alice:rwx /shared(设默认权限)
  • 注意:默认 ACL 不会改变已存在文件的访问权限,只影响未来创建项

权限没生效?可能是 mask 掩码锁住了

ACL 中的 mask 是一道隐形闸门,它限制了所有非所有者、非所属组条目的最大有效权限。即使你写了 u:bob:rwx,如果 mask 是 r--,bob 实际只有读权限。

  • 运行 getfacl /path,查看输出里是否有 mask::rwx 这一行;若权限比预期窄,就是它在起作用
  • 手动刷新 mask:执行 setfacl --mask -m mask::rwx /path(把 rwx 换成你需要的最大权限组合)
  • 更省事的做法是加 --mask 参数让 setfacl 自动重算:setfacl -m u:bob:rwx --mask /path
  • 某些旧版工具(如老内核或 NFS 挂载)可能不自动更新 mask,必须显式触发

批量删 ACL 或恢复基础权限

调试时加了一堆规则,想一键清空?别用 chmod,它不碰 ACL;也别只删用户项,残留的 mask 或 default 仍可能干扰后续操作。

  • 彻底清除所有扩展 ACL(保留 owner/group/other 基础权限):setfacl -b /path
  • 只删默认 ACL(不影响当前文件权限):setfacl -k /path
  • 递归清理整个目录树:setfacl -R -b /dir,但注意:若目录有 default ACL,子目录新建文件仍会继承——所以建议先 -k 再 -b
  • 误操作后想回滚?提前用 getfacl -R /dir > acl-backup.txt 备份,恢复时用 setfacl --restore=acl-backup.txt

ACL 的复杂性不在命令本身,而在 mask、default、递归作用域三者的叠加效果。一次 setfacl 调用可能同时触发三类变更,而 getfacl 输出里的 mask:: 和 default: 行就是唯一真相来源——别信 ls -l 结尾那个 + 号,它只告诉你“有 ACL”,不告诉你“具体是什么”。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5247

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2308

6

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.07

357

5

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3890

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3333

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2493

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5990

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5642

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3313

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习