如果服务器上的 PHP 脚本无法创建目录,这通常是因为 PHP 作为 apache/nobody 运行吗?那么你能说服务器配置错误吗?(或仅使用标准配置)
出于安全考虑,如果 php 以用户身份运行会更好,如果是,这个问题(需要 777)是否还会出现?我不这么认为,但我想我会问...
如果服务器上的 PHP 脚本无法创建目录,这通常是因为 PHP 作为 apache/nobody 运行吗?那么你能说服务器配置错误吗?(或仅使用标准配置)
出于安全考虑,如果 php 以用户身份运行会更好,如果是,这个问题(需要 777)是否还会出现?我不这么认为,但我想我会问...
IMO 你不应该有一个 777 目录。在没有用户的网络服务器上这并不重要,但它从来没有必要,无论如何都应该避免。
debian 上的 PHP 以与 apache (www-data) 相同的用户和组运行。所以你只需要配置你的文件访问控制来允许那个用户做你喜欢的事情。你永远不需要 777。
其他发行版具有类似的配置,但您始终可以编辑apache2.conf和php.ini文件以获得所需的任何结果。
那么你能说服务器配置错误吗?
不,这就是它应该的样子。apache 执行的 php 脚本以用户身份运行www-data
(在 Ubuntu 上)。www-data
在整个服务器上几乎没有写入权限。这就是它应该的样子。如果您编写了一个稍微不安全的 php 脚本(例如,容易受到代码注入的影响)并且它以 root 身份运行,恶意访问者可能会清除您的整个硬盘驱动器。
出于安全目的,如果 php 以用户身份运行会更好?
你说的用户是谁?如果是根,请参见上文。如果是具有 root 权限的用户,请参见上文。
这个问题(需要 777)还会出现吗?
问题是您使用的代码需要对外部目录具有完全读取、写入和执行权限。
如果它是一个仅由您的脚本使用的目录,则www-data
应该拥有它。问题解决了。
如果您使用的 php 脚本必须能够访问敏感的系统区域,您可能需要重新考虑执行此操作的方式。php 脚本应该执行的许多任务可以由脚本调度,然后由 cron 作业执行。
最后但并非最不重要的一点是,如果您绝对必须这样做,您可以以任何您想要的用户身份运行 php。只需安装模块mpm_itk_module
并添加
AssignUserId user group
<VirtualHost>
标签内。
但请注意 - 正如我之前所说 - 如果脚本错误和权限错误,可能会发生非常糟糕的事情 (TM)。