教你用phpBB2配置一个安全的Linux论坛(下)

ZDNet软件频道 时间:2009-11-05 作者:佚名 | ChinaITLab 我要评论()
本文关键词:phpBB2 Linux论坛 Linux
本文继续向大家介绍用phpBB2配置一个安全的Linux论坛。

  二、清除安全漏洞和升级论坛版本

  1. php

  BB2.0.11安全漏洞分析和清除方法:

  phpBB2是一个用php脚本语言编写的论坛,该论坛的低于2.0.11版本有个严重的漏洞,就是 viewtopic.php允许远程执行命令。viewtopic.php是phpBB2论坛脚本文件中的一个,用于查看帖子内容。通过该漏洞攻击者可以在服务上运行任何代码。Net-Worm.Perl.Santy.a是一个使用perl脚本代码编写蠕虫病毒,通过该phpBB2漏洞远程执行系统命令入侵主机,一旦入侵成功并获得运行,就开始向google发送请求,搜索可以入侵的主机。 如果你使用phpBB2版本低于2.0.11,那么需要清除该蠕虫病毒。

  (1)清除病毒步骤:

  打开viewtopic.php文件,在以下代码前加入一行:

  $topic_id = $post_id = false;

  if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) )

  {

  $topic_id = intval($HTTP_GET_VARS[POST_TOPIC_URL]);

  }

  else if ( isset($HTTP_GET_VARS["topic"]) )

  {

  $topic_id = intval($HTTP_GET_VARS["topic"]);

  }

  另外还要将viewtopic.php文件中以下代码:

  $join_sql_table = ( !isset($post_id) ) ? "" : ", "

  . POSTS_TABLE . " p, " . POSTS_TABLE . " p2 ";

  $join_sql = ( !isset($post_id) ) ? "t.topic_id = $topic_id" : "p.post_id = $post_id AND

  t.topic_id = p.topic_id AND p2.topic_id = p.topic_id AND p2.post_id <= $post_id";

  $count_sql = ( !isset($post_id) ) ? "" : ", COUNT(p2.post_id) AS prev_posts";

  $order_sql = ( !isset($post_id) ) ? "" : "GROUP BY p.post_id, t.topic_id,

  t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type,

  t.topic_vote, t.topic_last_post_id, f.forum_name, f.forum_status, f.forum_id,

  f.auth_view, f.auth_read, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete,

  f.auth_sticky, f.auth_announce, f.auth_pollcreate, f.auth_vote, f.auth_attachments

  ORDER BY p.post_id ASC";

  替换为:

  $join_sql_table = ( empty($post_id) ) ? "" : ", "

  . POSTS_TABLE . " p, " . POSTS_TABLE . " p2 ";

  $join_sql = ( empty($post_id) ) ? "t.topic_id = $topic_id" : "p.post_id =

  $post_id AND t.topic_id = p.topic_id AND p2.topic_id = p.topic_id

  AND p2.post_id <= $post_id";

  $count_sql = ( empty($post_id) ) ? "" : ", COUNT(p2.post_id) AS prev_posts";

  $order_sql = ( empty($post_id) ) ? "" : "GROUP BY p.post_id, t.topic_id,

  t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type,

  t.topic_vote, t.topic_last_post_id, f.forum_name, f.forum_status, f.forum_id,

  f.auth_view, f.auth_read, f.auth_post, f.auth_reply, f.auth_edit, f.auth_delete,

  f.auth_sticky, f.auth_announce, f.auth_pollcreate, f.auth_vote,

  f.auth_attachments ORDER BY p.post_id ASC";

  然后点击“开始”-“搜索”-“文件或文件夹”在文件名称中输入“m1h020f”,找到后全部删除即可。截至到目前为止,该蠕虫还没有更新的变种。已经得到了很到的控制。

  2. phpBB2.0.12安全漏洞分析和解决除方法:

  phpBB 2.0.12版本中存在两个安全漏洞,其中一个很严重,允许任意用户都可以获取管理权限,另外一个漏洞会导致服务器路径泄露。第一个漏洞存在于includes/sessions.php文件中,其对$sessiondata["autologinid"]变量的类型及比较操作存在问题,远程攻击者可以通过伪造特别的变量值使用判断用户合法性的操作始终返回真,从而使用任意用户可以在不知道口令的情况下以管理员的身份认证成功。第二个漏洞在于viewtopic.php文件中,由于对消息的过滤不充分,使路径泄露成为可能。远程攻击者可以利用这个漏洞获取管理权限。解决方法,升级版本到2.0.14。

  步骤:

  1.数据库的备份:

  phpBB2本身可以备份自己的数据,点击phpBB2 的论坛管理员控制面板“普通管理”-》“数据库工具管理:备份”-》“选择整体备份选项”,即可完成论坛数据的整体备份,见图-4.

图-4 phpBB2论坛的数据备份

  备份产生的文件是:phpbb_db_backup.sql,可以看出是一个sql文件。

  2. 使用网络备份mysql数据:

  phpBB2本身不能进行网络备份,这时可以使用Mysql数据的导出和导入工具:mysqldump。

  (1)本地备份:

  使用 mysqldump进行备份非常简单,如果要备份数据库” phpbb_db_backup ”,使用命令:

  #mysqldump –u -p phpbb_db_backup >/usr/backups/mysql/ phpbb_db_backup.2005.5.6

  还可以使用gzip命令对备份文件进行压缩:

  #mysqldump phpbb_db_backup | gzip >/usr/backups/mysql/ phpbb_db_backup.2005.5.6。gz

  恢复数据使用命令:

  #mysql –u -p phpbb_db_backup

  2)网络备份

  将MYSQL数据放在一台计算机上是不安全的,所以应当把数据备份到局域网中其他计算机中。假设Mysql服务器IP地址是:192.168.1.3。局域网使用Linux的远程计算机IP地址是192.168.1.17;局域网使用Windows的远程计算机IP地址是192.168.1.18。

  把MYSQL数据备份到使用Linux的远程计算机需要在两端都安装NFS协议(Network File System),远程NFS计算机安装NFS协议后还要修改配置文件:/etc/exports,加入一行:

  /usr/backups/mysql/ 192.168.1.17 (rw, no_root_squash)

  表示将/usr/backups/mysql/目录共享。这个目录具有远程root用户读写权限。保存NFS配置文件,然后使用命令:

  #exportfs -a –r

  然后重新启动NFS服务:

  #service nfsd start

  远程计算机设定后,在MYSQL服务器/mnt 目录下建立一个backup_share目录:

  #mkdir /mnt/backup_share

  将远程的Linux计算机的/usr/backups/mysql/目录挂载到MYSQL服务器的/mnt/backup_share目录下:

  # mount -t nfs 192.168.1.17:/usr/backups/mysql /mnt/backup_share

  将目录挂载进来后,只要进入/mnt/backup_share 目录,就等于到了IP地址:192.168.1.7那部NFS 计算机的/usr/backups/mysql 目录中。下面使用mysqldump把“phpbb_db_backup”备份到远程计算机:

  # mysqldump phpbb_db_backup >/mnt/backup_share/ phpbb_db_backup.2005-5-6

  把MYSQL数据备份到使用Windows的远程计算机需要在Linux端安装Samab协议。然后Windows计算机上建立一个目录(/arc)并且共享,赋予其读写权限。同样在MYSQL服务器/mnt 目录下建立一个backup_share1目录,然后进行挂载:

  # mount -t smbfs -o username=cjh, password=XXXX //192.168.1.18/arc /mnt/backup_share

  3. 升级最新phpBB2论坛版本步骤:

  下载最新版本phpBB-2.0.14解压到一个临时目录,先备份原数据,然后将原来的 config.php 文件覆盖临时目录下的 config.php ,删除原phpBB2安装目录,把最新版本phpBB2移动到/var/www/html/目录下:

  # mv phpBB2 /var/www/html/phpBB2

  然后在浏览器中输入:http://localhost/phpBB2/install/update_to_2014.php升级自动进行,系统如果出现图-5表示升级成功:

图-5 phpBB2 版本升级界面

  升级结束后同样要删除安装文件(防止他人使用这些文件修改系统信息),

  #chmod 644 config.php

  # rm -rf install

  # rm -rf contrib

  然后进行数据恢复,点击phpBB2 的论坛管理员控制面板“普通管理”-》“数据库工具管理:恢复”,即可恢复到论坛数据备份时的状况。

  2.其他安全措施

  1.管理员权限

  phpBB2 的系统管理员具有最大的权限,而该权限可能会与其它的板主权限相冲突而造成不可预期的错误,所以最好不要让系统管理员当版主。另外用root权限运行MYSQL也不太安全,这里推荐使用其他用户运行MYSQL。方法是:

  # mysql -u root -p

  Enter password:xxxxxxxxx

  ………

  mysql>update user set user="cao" where user="root";

  mysql> flush privileges;

  mysql>quit

  Bye

  以后就得通过cao帐号访问mysql数据库了。

  2.php配置文件的安全设定:

  phpinfo和get_cfg_var函数主要用于调试程序是否正常,当LAMP安装结束后应当禁止其使用,编辑php.ini文件加入一行:〕

  disable_functions = phpinfo,get_cfg_var

  这样可以避免泄漏系统服务信息。关于php和Apache其他安全措施可以查看笔者的:教您如何应用PHP开发出安全的应用程序,链接:http://tech.ccidnet.com/pub/article/c1113_a239881_p1.html


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134