如果服务器上的PHP脚本无法创建目录,通常是因为PHP以apache/nobody身份运行?那么你能从这里说服务器配置错误吗? (或者只是使用标准配置)chmod 777 - 这是一个服务器问题的要求?
出于安全考虑,如果php以用户身份运行,并且如果是,那么这个问题(需要777)是否仍会发生?我不这么认为,但我想我会问...
如果服务器上的PHP脚本无法创建目录,通常是因为PHP以apache/nobody身份运行?那么你能从这里说服务器配置错误吗? (或者只是使用标准配置)chmod 777 - 这是一个服务器问题的要求?
出于安全考虑,如果php以用户身份运行,并且如果是,那么这个问题(需要777)是否仍会发生?我不这么认为,但我想我会问...
所以你可以这样说,服务器配置错误?
号这就是它应该是这样的。由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>
标签内。
但是请注意,正如我之前所说的那样,一个坏脚本和错误的权限,Very Bad Things(TM)可能会发生。
IMO你永远不应该有一个777目录。在没有用户的网络服务器上,这并不重要,但它从来没有必要,应该避免。
debian上的PHP以与apache(www-data)相同的用户和组运行。所以你只需要配置你的文件访问控制,以允许用户做你喜欢的。你永远不应该需要777
其他发行版有类似的配置,但您可以随时修改您的apache2.conf和的php.ini文件得到任何你想要的结果。
问题是,如果用户拥有PHP,用户无法通过FTP删除该目录。有没有办法解决这个问题? – Wesley
当然。将两个用户添加到一个组中,并授予组写入权限。 – Dennis