POSIX sticky bit 应该拒绝 root 追加吗?

Should POSIX sticky bit deny appending by root?

POSIX 目录权限包括“粘性”位 (S_ISVTX),即 described 限制删除或重命名文件的所有者或 root。这通常用于 /tmp/var/tmp 等目录,这些目录可能具有 drwxrwxrwt 权限以允许所有用户创建临时文件,但防止其他非根用户删除这些文件。

我的问题是关于 root 权限修改普通用户在标有粘性位的目录中创建的文件。

假设,普通用户在受粘性位保护的 /var/tmp 中创建文件(在本地非 NFS 文件系统上,没有 SELinux 限制):

echo "something" > /var/tmp/somefile

但随后 root 尝试附加到此文件:

echo "else" >> /var/tmp/somefile

当我在某些 Linux 系统(例如 Debian-11、ArchLinux)上尝试此操作时,会产生 bash: /var/tmp/somefile: Permission denied 错误。这似乎是对超级用户更改本地文件系统中文件的权力的意外限制。 Linux 的其他版本(例如 Debian-10、Debian-9、Fedora-35)似乎没有此限制,尽管文件系统设置没有明显差异。

我找不到任何文档表明粘滞位应该阻止 root 修改这样的文件。例如,支持 chmodsys/stat.h 的 POSIX 文档除了删除受粘性保护的文件外,很少提及其他行为。

谁能给我指出当超级用户试图修改标有粘滞位的目录中的文件时粘滞位应该如何表现的任何官方文档,或者哪些系统设置会影响此行为?

已找到答案

您显示的行为似乎取决于 fs.protected_regular Linux 内核参数,由 this commitfs.protected_fifos 一起引入,目的是修复安全漏洞.

解决方案:

sudo sysctl fs.protected_regular=0

资源:

Since it is a patch, it probably won't be documented in more detail.

https://askubuntu.com/questions/1250974/user-root-cant-write-to-file-in-tmp-owned-by-someone-else-in-20-04-but-can-in/1251030#1251030
https://unix.stackexchange.com/questions/503111/group-permissions-for-root-not-working-in-tmp