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

Posted

技术标签:

【中文标题】为啥 www-data 需要执行权限才能将上传的文件写入目录?【英文标题】:Why does www-data need execute access to write uploaded files to a directory?为什么 www-data 需要执行权限才能将上传的文件写入目录? 【发布时间】:2021-05-06 22:36:16 【问题描述】:

当任何人学习在一个用于公共访问的媒体上传文件夹上设置权限的任务时,他们可能会本能地认为它应该设置为777666,因为所有不正确的教程都存在于荒野。

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

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

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

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

由于我的第一个假设从来都不正确,所以我决定问一下。

【问题讨论】:

unix.stackexchange.com/questions/21251/… 应该可以帮助您。尽管该链接讨论了 rwx 权限,但您需要知道数字版本。 4 是读取 (r),2 是写入 (w),1 是执行 (x),您可以将它们相加得到数字。 7 是读/写/执行,6 是读/写,0 什么都不是。 @barmar,好吧,实际上它与 PHP 有关,如果您阅读该帖子,您可以清楚地看到我提到了 PHP 函数 move_uploaded_file()。不过还是谢谢玩!您将获得参与奖!注意:评论用于要求澄清或指出帖子中的问题。过时的 cmets 可能会被删除。 Learn more about comments… 对于我一直使用的目录sudo find /var/www -type d -exec chmod 2770 \; 我很惊讶他们没有为你删除这个问题。正如我曾经问过chmod 770 for directory,他们删除了它并写了lern chmod:):) 【参考方案1】:

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

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

总结

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

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

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

【讨论】:

这是一个很好的答案。当 PHP 引擎需要使用 move_uploaded_file() 访问目标文件夹时,系统会检查其执行权限,因为从技术上讲,它正在该文件夹内执行函数 move_uploaded_file()。我想知道您是否可以在没有执行权限的情况下使用 nano 写入该文件夹,因为它是系统级事件,而不是第三方脚本事件。 @EthanAaronVandal 不确定这是否正确,据我了解,对 example.txt 的任何访问都被阻止,甚至是系统级事件(来自用户缺少文件夹上的执行位)。 那么你总是需要执行来创建或修改?因为这两个操作会构成访问权限,对吧? 没错。如果您不同意,您可以在终端中测试它.. :)

以上是关于为啥 www-data 需要执行权限才能将上传的文件写入目录?的主要内容,如果未能解决你的问题,请参考以下文章

www 数据权限?

nginx php7.2 环境搭建权限问题

text 将文件夹的权限组更改为www-data组

在 Wordpress 中启用 FTP 上传和自动插件安装的权限

为啥使用 sftp 上传文件后文件权限发生变化?

php上传文件到linux服务器,可以上传成功,但是图片本身为啥没有可执行权限呢,怎么设置啊