登录 注册

登录

问题 关于不能通过FTP管理joomla生成文件的原因

更多
2007年08月16日 17:55 - 2007年08月16日 20:29 #1 作者: leocraft
关于不能通过FTP管理joomla生成文件的原因

其实这个问题很简单,在PHP的safe_mode下产生的文件权限问题。
也就是说发生这个问题,表明你的服务器PHP启用了safe_mode 也就是安全模式。

为什么要启用安全模式

熟悉PHP的朋友们都知道PHP有个safe_mode选项,这个变量是服务器全局变量,它的作用就是,开启后如果操作文件的程序不是由这个用户发起的,那么这个用户就无权更改文件内容。

这个设置的初衷是针对虚拟主机用户的,设想一下,如果一个服务器上边有很多用户,如何防止别的用户来修改你的文件,特别是使用编写PHP脚本方式来修改你的文件,甚至修改系统文件呢。

虚拟主机用户A,B,C WEB服务器的PHP执行程序用户身份是W
假设你是虚拟主机用于A,你通过FTP上传的文件app_a属主为A
如果用户B编写了PHP程序app_b,这个app_b试图来改写app_a
那么app_b的执行者是W,通过PHP safe_mode的拦截 它不可以改变app_a的内容
这样就保护了你的file_a内容不被改变

假如app_a被执行了,执行者是W,他创建了一个文件app_a_w
因为这个文件是被W创建的 那么app_a_w属主是W
现在app_a希望改写app_a_w 他再次执行了 这次执行者是W app_a_w属主也是W
safe_mode 没有拦截


到目前为止看起来还算正常,但是问题随之而来

如果app_b尝试改写由app_a创建的app_a_w 很遗憾 他也会成功的

第二天

用户A通过FTP登陆了
他发现
他没办法改动app_a_w
虽然这个文件在他的FTP目录下……

然后虚拟主机商可能会意识到这个问题
他们把W用户生成文件的权限进一步放宽[这个做法没多少人采用,由于种种原因,主要还是因为这个实现需要通过一种曲折的途径,比较麻烦……]
于是你可以在FTP上删除app_a_w了
但是你不能阻止用户B的app_b抢先从你的目录删除掉app_a_w


这是一个潜在的风险……
但是很多虚拟主机商正在这么做


理由

1.一般来说,用户B不会知道你的app_a_w所在的真实路径
2.就算知道了,一般来说通过app_a也就是说通过程序生成的内容都可以重复生成
3.就算不能重复生成,也不会是什么重要内容,无非就是你的论坛用户上传的图片附件之类……

其实问题的关键也就在上述方案PHP程序执行者,也就是web server的用户是一个固定的第三者。
根本的解决方案就是想办法设定A的程序app_a让A用户来执行,而不是webserver的W来执行。
这样就在实现了安全隔离权限的基础上保证了用户目录下文件属主的一致性。


SUEXEC
在采用了suexec机制的虚拟主机方案里可以实现这一点,web server分别以不同用户权限执行不同用户的PHP程序,那么A的app_a就可以用A身份执行,所产生的文件app_a_w属主也是A用户,也就不存在FTP登陆时候不能删除的问题了。

www.leoneo.com

我的服务器采用的是suexec方式来实现虚拟主机方案
上海电信线路
支持PHP生成文件和目录的删除
支持iconv
如果大家感兴趣的话可以进一步交流,看看有没有可能实现一个兼容joomla的虚拟主机环境,方便喜欢joomla的用户
最后修改: 2007年08月16日 20:29 由 csg0328.

登录 或者   注册一个会员帐号 来参与讨论

更多
2007年08月22日 11:06 #2 作者: yi_xiao
我一直使用的就是这家空间,空间比较稳定,速度也不错.服务方面也很热心.
值得试试哦.

登录 或者   注册一个会员帐号 来参与讨论

版主: bithost