将文件访问权限更改为只读,但我仍然可以写入该文件。为什么?

将文件访问权限更改为只读,但我仍然可以写入该文件。为什么?

我正在运行一个使用 buildroot 构建的小型嵌入式系统。当我尝试在目标设备上设置文件权限时,我遇到了这种奇怪的行为。为了说明让我困惑的地方,我尝试了以下更简单的示例

# cd /mydir
# touch tmp.txt
# echo "rubbish" > tmp.txt
# cat tmp.txt
rubbish

# chmod 0444 .
# chmod 0444 tmp.txt
# echo "new-rubbish" > tmp.txt
# cat tmp.txt
new-rubbish

我对此感到非常困惑。如何将文件和目录设置为只读,但仍然可以修改该文件的内容?我在同一目录中有一个可执行文件,当我尝试执行它时,我得到了这个

# chmod 0444 my_binary
# ./my_binary
-sh: ./my_binary: Permission denied

其行为正如我所期望的那样。显然,我对文件访问模型在 Linux 上的工作原理存在一些根本性的误解。谁能解释为什么我能够写入我设置为只读的文件?

答案1

正如您似乎正在这样做,root这说明您有权在目录中写入。root也可以附加到文件,即使它的权限是-r--r--r--.

echo "new-rubbish" > tmp.txt

确实截断文件(正如 JoelDavis 指出的那样),因此它不会删除它并再次写入(使用时bash)。

相关内容