我在不同的网站托管中都遇到了这个问题,特别是上传脚本,只有当它具有 777 权限时才能上传到文件夹(这很危险)。在测试服务器(在不同的托管网站上)上,755 运行良好。
在另一个网络托管上,PHP 文件函数生成的日志文件有时无法写入,但其他文件却神秘地不受影响(例如,整个星期的日志文件是 655,它们运行良好,但只有今天的日志文件不起作用,除非将其设置为 777)。
我更像是一名应用程序开发人员,而不是服务器后端专家,因此这些行为让我百思不得其解。为什么会发生这种情况?该怎么办?
答案1
某些主机以低权限模式运行 Apache。您必须明确授予 Apache 需要写入的目录的全局写入权限。此外,Apache 进程必须能够读取所有文件,因此同一系统上的任何其他用户都可以读取系统上的文件/目录。授予顶级目录仅需执行权限即可向下遍历它们,从而阻止您列出这些目录中的文件。远程 shell 将无法修改除全局可写入的文件之外的文件。
一些主机以 setuid 模式运行 php,这意味着 php 以您的用户 ID 运行。虽然这为系统上的其他用户提供了更高的安全性,但它现在使您的 webroot 中的每个文件都能够被任何 php 进程修改。远程 shell 将能够修改您的 web 空间中的所有文件。
您需要决定哪一个更安全。以低权限模式运行 apache 可防止 webscript 破坏您的网站,但会使该系统上的其他用户能够读取可能包含您的 wordpress 配置文件(其中包含您的 mysql 用户名/密码/主机名)的文件。
答案2
您的服务器是否由不同的用户运行?您的文件所有权是怎样的?