setfacl需文件系统启用acl挂载选项才有效,否则静默失败;设置权限受mask限制,需确保mask允许对应权限;默认acl仅影响新创建文件/目录,不作用于已有内容。

setfacl 能直接修改文件或目录的 ACL 权限,但**不是所有路径都支持**——必须先确认文件系统已启用 acl 挂载选项,否则命令会静默失败或报错“Operation not supported”。
检查并启用文件系统 ACL 支持
ACL 不是“装了工具就能用”,它依赖底层挂载参数。常见错误现象:setfacl -m u:alice:r file 执行后无报错,但 getfacl file 里看不到新条目,或始终显示 mask::---。
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')"查当前挂载点参数,确认输出含acl - 若没有,临时启用:执行
sudo mount -o remount,acl /path/to/mount(把/path/to/mount替换为实际路径,如/或/home) - 要永久生效,编辑
/etc/fstab,在对应分区行的第四列(options)追加acl,例如:UUID=abc123 / ext4 defaults,acl 0 1 - 注意:
xfs文件系统默认启用 ACL,但某些精简版容器镜像或旧内核可能仍需显式挂载
用 setfacl -m 添加用户/组权限
-m 是最常用操作,但它对权限位有隐含约束:设置的权限必须落在当前 mask 范围内才真正生效。很多人设了 u:alice:rw 却发现读不了,就是因为 mask 是 ---。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 基本格式:
setfacl -m u:username:perms file或setfacl -m g:groupname:perms dir - 权限字符用小写
rwx;对目录加执行权才能进入,建议用大写X(仅对已有 x 的项或目录生效) - 一次添加多个条目:用逗号分隔,如
setfacl -m u:alice:rx,g:devs:rwX project/ - 递归设置时加
-R,但注意:它不自动设置子目录的默认 ACL(那是-d的事)
设置默认 ACL(仅对目录有效)
默认 ACL 决定新创建文件/子目录的初始权限,但它**不会影响已有内容**,也**不会自动继承到已存在的子目录中**——这是最容易混淆的点。
- 命令必须带
d:前缀,且目标必须是目录:setfacl -m d:u:bob:r /shared/project - 默认 ACL 只控制“新建项”,比如
touch /shared/project/new.txt后,new.txt会自动拥有u:bob:r条目 - 若想让已有子目录也获得默认 ACL,需单独对其执行
setfacl -m d:u:bob:r existing_subdir/ - 删除默认 ACL 用
setfacl -k dir,不是-x d:u:bob
排查 mask 导致的权限失效
ACL 中的 mask 是一道闸门:任何用户或组的 ACL 权限,只有在 mask 允许的范围内才起效。常见症状是 getfacl 显示权限存在,但实际访问被拒绝。
- 查看当前 mask:
getfacl file | grep mask,若为mask::---,所有扩展 ACL 都无效 - 自动重算 mask:
setfacl --mask file(推荐,安全) - 手动指定 mask:
setfacl -m m:rwx file(慎用,可能过度开放) - 注意:
chmod修改基础权限时也会触发 mask 重算,但仅限于 owner/group/other 三类;ACL 条目不受chmod直接影响
setfacl 命令也会“看起来成功,实际失效”。










