我在 /tmp 目录中遇到了奇怪的行为。尽管属于某个组的用户具有读/写文件的权限,但他不能这样做。
在此示例中,我创建一个新文件/tmp/test.txt
为 user max
。我给它 777 权限并使文件属于该组root
,但用户root
仍然无法编辑它。
su max
touch /tmp/test.txt
chmod 777 /tmp/test.txt
su root
chown max:root /tmp/test.txt
# ls -l /tmp/test.txt
-rwxrwxrwx 1 max root 0 26. Feb 12:08 test.txt
# echo "foobar" > /tmp/test.txt
bash: /tmp/test.txt: Permission denied
当移动test.txt
到不同的目录时,一切都按预期工作。
/tmp
是通过以下选项通过 fstab 安装的 tmpfs:
tmpfs /tmp tmpfs nodev,nosuid,size=5G 0 0
运行ls -l /
时,tmp 文件夹如下所示:
drwxrwxrwt 20 root root 640 26. Feb 12:01 tmp/
我正在运行 Manjaro,一个 Arch Linux 衍生产品。
我在安装 tmpfs 时做错了吗?
您所显示的行为似乎取决于此提交
fs.protected_regular
(我相信在 4.19 版中收敛)引入的 Linux 内核参数,fs.protected_fifos
旨在修复安全漏洞。提交消息的摘录(强调我的):
相同的提交消息还报告了相关的常见漏洞和暴露 (CVE) 编号列表。
因此,如果
userX
被root
授予或以其他方式被授予对 的写访问权限/tmp/file
,并且这/tmp
是一个设置了粘性位的世界可写目录,则它们file
只能在以下情况下打开以进行写操作:userX
是file
;的所有者 或者file
目录/tmp
都归同一个用户所有。在您的测试中,
root
对 有写权限/tmp/test.txt
,但不是文件的所有者,也不是/tmp/test.txt
同/tmp
一个所有者(分别为max
和root
)。该问题似乎与
/tmp
安装方式完全无关。相关文档位于Documentation/sysctl/fs.txt:
也就是说,可以使用以下命令禁用上述保护:
一些测试来支持我们的假设:
与
fs.protected_hardlinks
和不同fs.protected_symlinks
,fs.protected_regular
并且fs.protected_fifos
默认情况下在内核代码中不启用。启用它们是向后不兼容的更改(正如您在此评论中提供的示例所指出的那样),并且据我所知,
systemd
在版本 241 中使用了这个最近的提交。致谢:感谢JdeBP指出正确的方向并对问题发表评论。