为什么 www-data 需要执行权限才能将上传的文件写入目录?
Why does www-data need execute access to write uploaded files to a directory?
当任何人学习如何设置用于 public 访问的媒体上传文件夹的权限时,他们可能会本能地认为应该将其设置为 777
或 666
由于在野外存在所有不正确的教程。
所以,今天我决定要了解设置 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
总结
阅读:
允许列出目录的内容。
写入:
允许在目录中创建、修改或删除文件。
执行:
如果您知道文件名,则允许访问目录中的文件。
当任何人学习如何设置用于 public 访问的媒体上传文件夹的权限时,他们可能会本能地认为应该将其设置为 777
或 666
由于在野外存在所有不正确的教程。
所以,今天我决定要了解设置 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
总结
阅读: 允许列出目录的内容。
写入: 允许在目录中创建、修改或删除文件。
执行: 如果您知道文件名,则允许访问目录中的文件。