当前位置: 主页 > 日志 > Linux >

PureFTPd管理工具登录后出现500错误问题的分析解决

 现象是:

成功登录PureFTPd管理工具后,一直在加载页面,过了很长时间服务器返回500错误。

通过追踪index.php代码发现,问题出现在如下代码段:

		// Read the userfile for example '/etc/passwd'
		// todo check security settings of php
		$filename = $UsersFile;
		$fh = fopen($filename,"r"); // 我发现这里打开文件/etc/passwd失败了,返回空

		$iNrofunixusers = 0;

		while (!feof ($fh)) // 最终问题出在这里,$fh为空,造成这里死循环,最终导致500错误
		{
			$line = fgets($fh,4096);

			$data = explode(":",$line);

			$user = trim($data[0]);
			$user_id = trim($data[2]);


			if ($user[0] != '#' &&
					strlen($user) != 0 &&
					strlen($user_id) != 0)
			{
				if(compare_array($user,$BlacklistUsers) == -1) // no hit
				{
					$unix_users[$iNrofunixusers] [0] = $user;
					$unix_users[$iNrofunixusers] [1] = $user_id;
					$iNrofunixusers++;
				}
			}
		}
		fclose($fh);

进行简单的Fix如下:

while (!feof ($fh)) 改为 while ($fh && !feof ($fh))

 

这下可以顺利进入PureFTPd管理后台了。但是Uid和Gid的下拉列表的内容仍旧无法显示,这样就无法修改ftp用户所属的系统用户和用户组。

问题还是出在 fopen('/etc/passwd',"r")失败上。很奇怪,/etc/passwd的权限是-rwxr--r--,因此apache用户应该是有权限读取该文件的。

折腾了很长时间一直找不到原因...

后来突然想起之前为了防止虚拟主机之间旁注的发生,限制了虚拟主机的文件操作目录仅为站点目录,详见这里http://www.redicecn.com/html/wangluoanquan/20110904/330.html

给open_basedir加上/etc/目录,重启Apache,这下Uid和Gid列表中显示出正常的数据了。

 


 

[日志信息]

该日志于 2011-11-19 22:27 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “PureFTPd管理工具登录后出现500错误问题的分析解决” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部