为什么 www-data 需要执行权限才能将上传的文件写入目录?

Why does www-data need execute access to write uploaded files to a directory?

当任何人学习如何设置用于 public 访问的媒体上传文件夹的权限时,他们可能会本能地认为应该将其设置为 777666由于在野外存在所有不正确的教程。

所以,今天我决定要了解设置 correct/secure 文件夹访问权限的整个想法。

我发现在我的 Ubuntu 20.04 服务器上我需要分配 700(或 770,如果所有者是真实用户)以允许上传 move_uploaded_file() .

为什么 www-data 需要 execute 访问 write 文件?

我最好的假设是,因为 move_uploaded_file() 是 PHP 的函数,它实际上是在目标文件夹中执行该函数(即使对该函数的实际调用是在一个完全不同的 folder/file位置)。

因为我最初的假设从来都不正确,所以我决定问一下。

原因是对于目录,执行位用于访问该目录中的文件。读取权限用于列出内容。举个例子:

johan@eden:~/example$ mkdir test
johan@eden:~/example$ echo 123 > test/example.txt
johan@eden:~/example$ cat test/example.txt 
123
johan@eden:~/example$ chmod a-x test
johan@eden:~/example$ cat test/example.txt 
cat: test/example.txt: Permission denied

总结

阅读: 允许列出目录的内容。

写入: 允许在目录中创建、修改或删除文件。

执行: 如果您知道文件名,则允许访问目录中的文件。