我有一个需要访问的服务帐户/var/log/audit/audit.log
,并且由于该用户不应该属于该root
组,我也不想更改文件的所有权或组,所以我决定实施文件 ACL。
问题是,当auditd
旋转文件时,旋转的文件没有根据手册页acl(5)
和setfacl(1)
.
这是父目录的文件 ACL,包括默认 ACL:
> getfacl /var/log/audit
# file: var/log/audit
# owner: root
# group: root
user::rwx
user:srv_usr:r-x
group::---
mask::r-x
other::---
default:user::rwx
default:user:srv_usr:r--
default:group::---
default:mask::r--
default:other::---
当auditd
旋转文件时,ACL 变为:
> getfacl /var/log/audit/audit.log
# file: var/log/audit/audit.log
# owner: root
# group: root
user::rw-
user:srv_usr:r-- #effective:---
group::---
mask::---
other::---
如您所见,有效权限是不允许该帐户执行任何操作。
让我相信正在发生一些奇怪的事情的是,当我以 root 身份在该路径中手动创建文件时,将应用以下 ACL:
> touch /var/log/audit/test
> getfacl /var/log/audit/test
# file: var/log/audit/test
# owner: root
# group: root
user::rw-
user:srv_usr:r--
group::---
mask::r--
other::---
此 ACL 与文档中的内容相匹配acl(5)
:
新对象继承包含目录的默认 ACL 作为其访问 ACL。
文件 ACL 与默认 ACL 匹配/var/log/audit
。
发生了什么?
答案1
您的问题是 Linux ACL 使用组权限位存储掩码。
轮换后,该组的权限将被删除,因为auditd 不支持 ACL,并且认为它正在为该组设置权限。因此,掩码变为空 ( mask::---
),有效权限为空 ( #effective:---
)。
另请参阅这个问题:文件上的 ACL 掩码和标准组权限有何关系?