[原创]最新LAMP搭建与安全思考(最新组件)...
chameleon
|
1#
chameleon 发表于 2007-06-29 13:22
[原创]最新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 望不吝赐教! |