Linux setfacl 之谜

Linux setfacl 之谜

我为虚拟机设置的一些 ACL 出现了一个奇怪的问题。我的虚拟机存储在目录 /shared/vms 中。此目录的 ACL 为:

getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:qemu:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:qemu:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

由于某些我确实无法理解的原因,我的最新 VM 没有 qemu 的权限:

getfacl ./demo.qcow2 
# file: demo.qcow2
# owner: root
# group: root
user::rw-
user:qemu:rwx                   #effective:---
group::rwx                      #effective:---
mask::---
other::---

根用户的 umask 是非常宽松的 0022。我为 virt-manager 使用的桌面用户有更严格的限制 0007。但是,这些不应该创建有效的掩码 --- !!!

那么,为什么我拥有这些有效权限?

答案1

有效掩码是通过AND对权限和掩码进行按位运算来计算的。由于您的掩码为---,因此您创建的任何自定义 ACL 条目的所有权限位都将被关闭。要解决此问题,您需要将掩码设置为rwx如下形式:

setfacl -m m::rwx ./demo.qcow2

对任何显示的有效权限不符合您的要求的文件重复此操作。通常,每次更改 ACL 时都会重新计算掩码,但此文件可能是使用该--no-mask选项创建的,或者某些东西可能明确设置了掩码。

相关内容