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