[原创]最新LAMP搭建与安全思考(最新组件)...

[原创]最新LAMP搭建与安全思考(最新组件)...

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
-----------------------------------------------------------
可以写如下两个测试页面来判断你目前的环境配置是否正常

<?php
phpinfo();
?>
输入IP看是否能打开PHPINFO页面

<?php
$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
                                                                                              望不吝赐教!
谢谢分享
挺好的!
只是
freetype-2.2.1.tar.gz
gd-2.0.331.tar.gz
jpegsrc.v6b.tar.gz
libpng-1.2.12.tar.gz
zlib-1.2.3.tar.gz
如系统原来有的,就用默认的就成,省事、、、、
安装Cacti安装Snort,这么多东西都装在一台服务器上?不太好吧
呵呵,先装、学习后,再优化!


QUOTE:
原帖由 zqli 于 2007-7-3 14:33 发表
安装Cacti安装Snort,这么多东西都装在一台服务器上?不太好吧

是的,全部装一起的确会对系统开销受到影响...
所以并不建议装一起...
感谢斑竹加精华,给予我的鼓励。。。
搂主加油!顶
感谢,自己来顶一下了...
./configure --help 看下有--enable-trace-vars 吗?我眼花,没找到,但如果加上就编译错误。