L.A.M.P与安全部署
------作者:小迟 日期:2007.5.20
完善于2007.6.15
实践环境:RHEL AS4-U5
----------------------------------------------------------------------------------------------------------
本篇与上一篇的差别:
1)本篇是上一篇“Linux+Mysql+Php+Gd+Zend+Phpmyadmin+Mysql-gui-tools(L.A.M.P)环境搭建”的深入版本。
2)上一篇是基于AS4-U4环境下的,本篇完全基于AS4-U5
3)更新了部分组件
4)加强了LAMP安全部分的思索
5)改进了上一篇中的不足和错误
所用组件:
Discuz!_5.5.0_SC_GBK.zip
freetype-2.2.1.tar.gz
gd-2.0.331.tar.gz
httpd-2.2.4.tar.tar
jpegsrc.v6b.tar.gz
libpng-1.2.12.tar.gz
mysql-5.0.27.tar.gz
php-5.2.2.tar.bz2
zlib-1.2.3.tar.gz
ZendOptimizer-3.2.8-linux-glibc21-i386.tar.gz
phpMyAdmin-2.9.0.2.zip
mysql-gui-tools-5.0.zip
aide-0.13.1.tar.gz
chkrootkit-0.46a.tar.tar
snort-2.4.2.tar.gz
安装以上前先检查系统默认是否安装了Apache和PHP以及Mysql,最好不要用默认的。
默认的为rpm安装的,而我们实际操作都是通过源码包来安装,所以先卸载掉系统默认安装的。
----------------------------------------------环境搭建----------------------------------------------------
1.安装mysql
# ./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charsets=all
# make
# make install
# cp support-files/my-medium.cnf /etc/my.cnf
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
# groupadd mysql
# useradd -g mysql mysql
初始化数据库:
# cd /usr/local/mysql
# /usr/local/mysql/bin/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql var
# chgrp -R mysql .
# ln -s /usr/local/mysql/bin/mysql /sbin/mysql
# ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
# /etc/rc.d/init.d/mysqld start
设定mysql密码:
# /usr/local/mysql/bin/mysqladmin -u root password '123456'
让系统找到mysql(如果必要的话):
# PATH=$PATH:/usr/local/mysql/bin
# export PATH
# echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
# ldconfig
2.安装apache
# ./configure --prefix=/usr/local/apache
# make
# make install
# /usr/local/apache/bin/apachectl start
3.安装GD库(让PHP支持GIF,PNG,JPEG)包括:
a.安装jpegsrc.v6b.tar.gz(jpeg6)
# mkdir -p /usr/local/jpeg6/bin
# mkdir -p /usr/local/jpeg6/lib
# mkdir -p /usr/local/jpeg6/include
# mkdir -p /usr/local/jpeg6/man1
# mkdir -p /usr/local/jpeg6/man/man1
# mkdir -p /usr/local/man/man1
#./configure --enable-shared --enable-static
#make && make install
b.安装libpng
./configure
make && make install
c.安装 freetype
./configure
make && make install
d.安装zlib
./configure
make && make install
e.安装GD库
./configure --with-jpeg=/usr/local --with-png=/usr/local --with-zlib=/usr/local --with-freetype=/usr/local
make && make install
4.安装PHP:
#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-gd=/usr/local --enable-trace-vars --with-zlib-dir=/usr/local --with-mysql=/usr/local/mysql --enable-mbstring=all --with-config-file-path=/usr/local/php/etc
#make && make test && make install
#cp php.ini-dist /usr/local/php/etc/php.ini
-----------------------------------------------------------
修改Apache配置文件以解析php:
#vi /usr/local/apache/conf/httpd.conf
添加:
AddType application/x-httpd-php .php
在index.htm后面添加index.php作为默认页面
将#ServerName的#去掉,后面改成你自己的IP
将两个"/usr/local/apache/htdocs"改为你的网页存放路径
加入出错重定向
ErrorDocument 404 http://chameleon.icpcn.com
ErrorDocument 402 http://chameleon.icpcn.com
ErrorDocument 403 http://chameleon.icpcn.com
ErrorDocument 500 http://chameleon.icpcn.com
保存httpd.conf并启动Apache
#/usr/local/apache/bin/apachectl start
-----------------------------------------------------------
可以写如下两个测试页面来判断你目前的环境配置是否正常
phpinfo();
?>
输入IP看是否能打开PHPINFO页面
$link=mysql_connect('localhost','mysql','486277');
if(!$link) echo "失败!";
else echo "成功!";
mysql_close();
?>
保存为一个PHP页面并用浏览器打开测试Mysql数据库连通性
-----------------------------------------------------------
5.安装ZendOptimizer-3.2.8加速PHP
#./install.sh
设置中文字符集(如果必要的话):
LANG="zh_CN.GB18030" && LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" && export LANG && export LANGUAGE
至此,LAMP环境算是基本搭建好了,下面来安装论坛:
接下来修改一下相关配置文件:
①编辑Discuz目录里的config.inc.php
$dbhost = 'localhost'; // 数据库服务器 (一般只需修改这里)
$dbuser = 'username'; // 数据库用户名 (一般只需修改这里)
$dbpw = ''; // 数据库密码 (一般只需修改这里)
$dbname = 'discuz'; // 数据库名 (一般只需修改这里)
$dbreport = 0; // send db error report? 1=yes
// 是否发送数据库错误报告? 0=否, 1=是
$pconnect = 0; // 数据库持久连接 0=关闭, 1=打开
②将以下目录权限设置成777:
./templates
./templates/default
./templates/default/*.*
./attachments
./customavatars
./forumdata
./forumdata/cache
./forumdata/templates
./forumdata/threadcaches
./forumdata/logs
③执行安装脚本:
请在浏览器中运行 install.php,即访问 http://您的域名/论坛目录/install.php,然后按页面提示操作来做即可。
安装Phpmyadmin(辅助):
修改配置文件:config.inc.php,找到以下选项:
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['blowfish_secret'] = 'chameleon';(其中的"chameleon"自定义)
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';(mysql主机地址)
$cfg['Servers'][$i]['controluser'] = 'pmausr';(用户)
$cfg['Servers'][$i]['controlpass'] = 'pmapass';(密码)
--------------------------------------------------------------------------------------------------------------
Discuz文件及目录结构与说明:
./users_guide.htm 用户使用说明书(本文档)
./usersguide/ 用户使用说明书内容与图片目录
./upload/ 程序及相关文件(此目录中的内容需上传)
*.php Discuz! 程序
install.php Discuz! 安装脚本
config.inc.php 论坛基本配置,安装前请修改本文件
mail_config.inc.php 邮件发送配置
admin/ 网页新帖调用程序
*.php 系统设置程序目录
attachments/ 系统设置程序集
customavatars/ 空目录,请设置属性 777,用于存放附件
forumdata/ 空目录,请设置属性 777,用于存放上传头像
templates/ 空目录,请设置属性 777,用于存放备份及记录数据
cache/ 空目录,请设置属性 777,用于存放编译模板文件
threadcaches/ 空目录,请设置属性 777,用于存放系统缓存
logs/ 空目录,请设置属性 777,用于存放论坛页面缓存文件
templates/ 空目录,请设置属性 777,用于存放论坛日志文件
default/ 模板文件目录
*.htm 系统默认模板目录
*.lang.php 系统默认模板文件
images/ 系统默认语言包文件
attachicons/ 图片文件目录
avatars/ 附件图标图片目录
common/ 论坛提供头像图片目录
default/ 公用图片目录
smilies/ 系统默认风格图片目录
stats/ Smilies 图片目录
include/ 流量统计图片目录
*.php 引用包含目录
plugins/ 引用包含程序集
./utilities/ 空目录,用于存放插件程序
tools.php 论坛附带工具
upgrade(x).php Discuz!工具箱论坛升级程序
--------------------------------------------------------------------------------------------------------------
安装论坛可能会遇到的问题(只选择常用的):
1)安装后论坛提示 Access denied for user@localhost using password YES',该如何解决?
这个提示意味着您的数据库连接参数设置的不正确,有两种可能:其一为数据库账号或密码错误。其二为数据库账号和密码均正确,但无权访问指定的数据库。遇到此种情况,请您咨询您的空间服务商,针对您的空间该如何配置数据库连接参数。
2)为什么安装成功,进入系统设置后提示 Please delete install.php via FTP?
因为您没有按照说明将 install.php 删除,会产生安全问题,使用 FTP 软件将其删除后这个提示自动消失。
3)运行install.php时一片空白什么都没显示,甚至其他php文件也是一样
打开php.ini查找short_open_tag = Off并改为short_open_tag = On(这是网上流传最多的方法)
就我本人遇到的和这个情况完全一样,但不是通过以上方式来解决的。我重新将论坛php文件传到服务器里并解压,并在config.inc.php文件里去掉了$adminemail,这样居然解决了问题。
--------------------------------------------------------------------------------------------------------------
将自己编译的项目加入到Linux自启动项:
加入到3、4、5三个运行级别
echo "/usr/local/apache/bin/apachectl start">/etc/rc.d/rc3.d/S99apache(中间的99可以自己定义)
echo "/usr/local/apache/bin/apachectl start">/etc/rc.d/rc4.d/S99apache
echo "/usr/local/apache/bin/apachectl start">/etc/rc.d/rc5.d/S99apache
chmod +x /etc/rc.d/rc3.d/S99apache
chmod +x /etc/rc.d/rc4.d/S99apache
chmod +x /etc/rc.d/rc5.d/S99apache
echo "/etc/rc.d/init.d/mysqld start">/etc/rc.d/rc3.d/S93mysql(中间的93可以自己定义)
echo "/etc/rc.d/init.d/mysqld start">/etc/rc.d/rc4.d/S93mysql
echo "/etc/rc.d/init.d/mysqld start">/etc/rc.d/rc5.d/S93mysql
chmod +x /etc/rc.d/rc3.d/S93mysql
chmod +x /etc/rc.d/rc4.d/S93mysql
chmod +x /etc/rc.d/rc5.d/S93mysql
--------------------------------------------------------------------------------------------------------------
安全增强:
1)如果signature打开的话,当有人访问到一个被禁止或者不存在的页面的话,会出现一些错误信息!
ServerSignature Off
2)把多余的Alias,Directory,Location以及用不上的模块都去掉。
3)安装Apache安全增强模块:mod-security (下载地址http://www.modsecurity.org)
它是apache的一个模块,他有请求过滤,日志审计等功能,可以防止SQL Injection,跨站脚本攻击,很不错的一个模块。
安装方法:/usr/local/apache/bin/apxs -cia mod_security.c
4)打开错误重定向页面功能
5)把LAMP放置在一个chroot jail环境中:makejail (下载地址http://www.floc.net/makejail)
是一个自动把建立jail所需要的程序放到jail内的软件,使用python编写。
6)系统本身安全漏洞检测
7)安装Cacti流量监控程序(可选)
8)安装AIDE系统完整性检测工具与chkrootkit程序(个人比较喜欢AIDE)
9)安装Snort入侵检测系统
……
--------------------------------------------------------------------------------------------------------------
小迟网络实验室http://Chameleon.icpcn.com
小迟QQ:181500883
望不吝赐教!