发现了这个有趣的行为:
root@host~# touch /tmp/some.file
root@host~# chown nobody /tmp/some.file
root@host~# echo 123 >> /tmp/some.file
-bash: /tmp/some.file: Permission denied
如果你运行它/bin/sh(实际上它是/bin/dash),消息看起来有点不同:
sh: 1: cannot create /tmp/some.file: Permission denied
如果文件是在 root 拥有并具有一组权限的目录中创建的ugo=rwx,o+t(通常目录具有这样的一组权限/tmp等/var/tmp,但您可以在任何其他地方创建具有此类所有权和权限的目录),就会发生这样的奇迹 -行为将是相同的)。
在ubuntu版本 20.04(linux程序版本 5.4.0,glibc库版本 2.31)中观察到。
apparmor,selinux 不见了。
谁应对这种行为负责,它记录在哪里?我给出的所谓候选人(ubuntu、linux、glibc)的版本,但也许是其他人的罪魁祸首。
罪魁祸首是一套统称为systemd的程序。
从版本 241 开始, linux 程序选项在启动时默认启用
/proc/sys/fs/protected_regular(从该程序的 4.19 版开始可用)。因此,当满足某些条件时, linux程序会阻止写入文件:
open()传递一个标志O_CREAT满足条件 3.1 和 3.2 的目录默认
/tmp为/var/tmp.“绕过”此限制的可能方法:
禁用选项(错误的解决方案):
在不满足条件 3.1 和 3.2 的目录下创建文件。例如,在
/tmp.链接: