打造Linu_下超级安全的LAMP服务器.doc_第1页
打造Linu_下超级安全的LAMP服务器.doc_第2页
打造Linu_下超级安全的LAMP服务器.doc_第3页
打造Linu_下超级安全的LAMP服务器.doc_第4页
打造Linu_下超级安全的LAMP服务器.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

打造Linux下超级安全的LAMP服务器编前:本文全面细致的介绍了在Linux下加固apache+php+mysql的方法,通过仔细阅读本文,你可以快速掌握安全配置apache,php,和mysql的方方面面,还有chroot这个前沿而强悍的技术,依靠这些知识,完全可以让你的WWW服务器在层出不穷的SQL注射(SQL Injection)和CSS跨站脚本攻击(Cross Site Script)中屹立不倒 从动网的几个漏洞到独孤剑客的网站被黑,脚本攻击闹的沸沸扬扬,可见它在网络攻击中终于显现出他的重要性了。由于程序开发人员无意或有意的不小心,用Perl、PHP、ASP等编写的脚本就会出现这样或那样的错误,轻则导致泄露路径,重则导致整个服务器被攻陷甚至蔓延到整个网络。难道我们就非得把所用的脚本读N遍,认真的分析?我相信不是人人都有这等功力的,就算有这样的功力也不会枉费那么多的时间和精力。 你可能会问:“我既想用网上免费的程序,又不想因此受到重创。难道就没有一个两全的办法?” 针对windows主机,我们可以使用IISLockdown,SecureIIS之类的 针对*nix主机给大家提出两个方案,一个就是给apache装上mod-security模块,另外一个办法就是把LAMP放置在一个chroot jail环境中。当然,最强的还是把两个方案结合在一起咯:) 下面,让我们一起来分享这两个方案前提:我们只需要有普通的linux操作经验,包括vi的使用等首先,我们先弄清楚几个概念什么是Debian:一个完全自由的Linux操作系统,他最令我心仪的就是他的apt包管理工具,让你安装或者升级软件无忧!如果你是CERNET用户的话,推荐你到电子科大或者我的网站升级,CHINANET用户可以在升级什么是LAMP:就是Linux Apache MySQL Php的缩写,几乎是最强的架站组合什么是chroot:是change root的缩写,就是把一个进程守护程序限制在某个特定的root环境中执行,这个被chroot了的程序几乎接近无法访问任何超出了这个root的任何文件或空间,这个root目录(也就是下面我们说到的jail)包含了执行进程守护程序所需要的所有文件,在你正确配置之后,绝大多数的入侵者是不可能跳出jail而接触到外面的文件的。这样我们就可以最大限度的限制入侵者保护自己。本文主要涉及到的软件makejail /makejail/是一个自动把建立jail所需要的程序放到jail内的软件,使用python编写,他有debian和openbsd的版本Zend Performance Suit Zend公司开发的一套给PHP加速的东西,包括一个代码优化器(optimizer)和一个加速器(accelerator),还有cache功能,很好使的,有了他,php程序跑起来就跟飞一样!可以申请30天试用版本的,如果你觉得好用的话就买下来吧:)mod-security /他是apache的一个模块,他有请求过滤,日志审计等功能,可以防止SQL Injection,跨站脚本攻击,很不错的一个模块OK,动手我们假设我们手头上有一个装好的debian woody,并且已经正确设置了了apt源二话不说,先升级到debian sarge,也就是testing版本,我觉得这个版本还是不错的,因为他的软件比较新,而且有security支持,最主要这个版本的软件列表包含makejail这个软件首先su到root升级系统并安装apache,php,mysql,gd更新apt源,我在教育网,所以使用中科大的apt源速度很快rootdebian /apt-get update (如图update.jpg)再更新所有软件包rootdebian /apt-get dist-upgrade(如图upgrade.jpg)rootdebian /apt-get install apache php4 php4-gd2 php4-mysql mysql-server mysql-client并且把extension=gd.so和extension=mysql.so加到php.ini中你的系统就已经装上了apache-1.3.27,php-4.1.2,mysql-4.0.13这样一个基本的LAMP就起来了,简单吧。再加一个系统用户,这个用户是我们等会chroot要用的rootdebian /adduser -home /chroot/apache -shell /dev/null -no-create-home -system -group chrapax接着我们编辑httpd.conf文件并做一些修改,删除多余的apache模块并激活php模块rootdebian /vi /etc/apache/httpd.conf注释掉除了mod_access,mod_auth,mod_dir,mod_log_config,mod_mime,mod_alias之外的所有模块去掉注释LoadModule php4_module /usr/lib/apache/1.3/libphp4.so以支持PHP (如图apache_mod.jpg )设置ServerAdmin 设置ServerName 把下面的Options Indexes Includes FollowSymLinks MultiViews的Indexes去掉,这样避免被别人索引目录把用户和组改成chrapaxUser chrapaxGroup chrapax在下面加上index.php如下 DirectoryIndex index.php index.html index.htm index.shtml index.cgi默认使用中文字符集AddDefaultCharset gb2312 加出错重定向,这样当出现下面的错误的时候,用户就会被重顶向到到你指定的页面ErrorDocument 404 /index.php ErrorDocument 402 /index.phpErrorDocument 403 /index.phpErrorDocument 500 /index.php把signature关掉ServerSignature Off如果signature打开的话,当有人访问到一个被禁止或者不存在的页面的话,会出现一些错误信息的这样的信息,不好,去掉他 (如图403.jpg)如果不需要cgi支持的话,删除ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options ExecCGI -MultiViews Order allow,deny Allow from all这行的注释去掉,因为我们需要PHP支持把AddType application/x-httpd-php .php最后把多余的Alias,Directory,Location都去掉,保存退出OK,apache算是配置完毕,我比较喜欢干净的配置文件,下面的命令可以去掉httpd.conf里#打头的行rootdebian /mv httpd.conf httpd.conf.bakrootdebian /grep -v # httpd.conf.bak httpd.conf到此为止,apache配置文件编辑完毕接着我们开始加固php,我们打开php.inirootdebian /vi /etc/php4/apache/php.ini首先打开安全模式,打开他的好处就是PHP文件只能访问所有者和PHP文件所有着一样的文件,即使在chroot环境下也无法访问jail中属主不一样的文件,类似于php shell这样的后门就没用武之地了哦,phpshell是很流行的php后门,他可以执行系统命令,就象他的名字一样,和shell很接近(如图phpshell.jpg)safe_mode = On如果php程序没有指明需要register_globals的话,最好把register_globals设置为Off,这样可以避免很多安全问题的举个例子吧,我们有一个这样的PHP文件片段叫做test.php/ 前面的代码if ($authorised) / 执行一些受保护的动作/ 其余的代码?如果register_globle是打开的话,入侵者可以通过提交这样一个请求来绕过验证/test.php?authorised=1当然,如果你非得使用register_globle的话,我们在后面同样可以使用mod-security来限制一下的open_basedir =/var/www/上面的设置就限制了fopen(), file()等函数可以操作的目录范围,避免了入侵者非法读取文件,一定要在/var/www后面加/,否则/var/wwww下的文件也能被访问禁止使用phpinfo和get_cfg_var函数,这样可以避免泄露服务信息disable_functions = phpinfo,get_cfg_var如果我们使用了被禁止使用的phpinfo函数的话,我们可以看到这样的错误Warning: phpinfo() has been disabled for security reasons in /var/www/info.php on line 1设置php程序错误日志,这样我们可以很清楚的知道程序问题所在error_reporting = E_ALLlog_errors = Onerror_log = /var/log/php_err.log默认display_error是打开的,我们在jail没弄好之前还是打开他,或许出错信息可以给我们一点提示的,但是在完工之后记得关闭这个选项啊,因为他显示出的一些出错信息有可能会暴露你的物理路径的。在这个过程中,最需要注意的就是不能使用root做为php程序的属主,否则php程序就可以随意访问他的属主,也就是root所有的文件了,这样就完全失去了safe_mode的意义了禁止打开远程地址,记得最近出的php include的那个漏洞吗?就是在一个php程序中include了变量,那么入侵者就可以利用这个控制服务器在本地执行远程的一个php程序,例如phpshell,所以我们关闭这个allow_url_fopen = OffOK,保存退出到此为止,针对php的安全优化基本上完毕,下面我们开始给mysql做手脚吧Debian下用apt装的mysql默认已经禁止从网络连接mysql了的,我们可以从他的配置文件f里看出来,但是得注意一下,RedHat的RPM,FreeBSD的ports安装,skip-networking是注释掉了的,也就是监听3306端口了,要是mysql出了什么问题,别人就可以有机会利用了rootdebian /grep net /etc/mysql/f# The skip-networkin option will no longer be set via debconf menu.# You have to manually change it if you want networking i.e. the serverskip-networking在这个方面Debian做的不错,但是Debian和Freebsd下系统装的mysqld是动态链接的,而RedHat的RPM安装的就是静态的,我们可以通过下面的命令来查看rootdebian file which mysqld/usr/sbin/mysqld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped我们可以看到dynamically linked字样,这样在chroot mysql的时候就比较麻烦了,因为要复制很多的共享库,不过在debian下我们有makejail:)等会我们就可以看到他的威力了接着我们修改mysql数据库里的东西,不过不管怎么样,我们首先得给mysql设置一个密码并修改管理员用户名(默认是root),但一定得记得,无论怎么样修改密码,都会有记录的,如果通过mysqladmin修改,shell的历史记录会有的,如果登陆了mysql之后再修改,在/.mysql_history会记录的,所以我们一定得处理这两个历史记录文件,我们把他们删了,再从/dev/null做个软连接过来就可以解决问题了rootdebian /cd rootdebian lltotal 13K-rw- 1 root root 1.8K Sep 28 21:05 .bash_history-rw- 1 root root 14 Sep 29 09:29 .mysql_history我们可以看到这两个文件里面都记录了东西的,下面我们处理他们rootdebian rm .bash_historyrootdebian rm .mysql_historyrootdebian ln -s /dev/null .bash_historyrootdebian ln -s /dev/null .mysql_history我们再看看rootdebian rootdebian lltotal 10Klrwxrwxrwx 1 root root 9 Sep 29 09:29 .bash_history - /dev/nulllrwxrwxrwx 1 root root 9 Sep 29 09:29 .mysql_history - /dev/null现在可以放心的设置密码了rootdebian mysqladmin -u root password mypasswd这样我们以后root就得通过mypasswd这个密码来访问mysql数据库了然后我们删除多余的数据库并去掉匿名帐号rootdebian mysql -u root -pEnter password:XXXXXXmysql drop database test;mysql use mysql;mysql delete from db;mysql delete from user where not (host=localhost and user=root);mysql flush privileges;然后修改默认的管理员帐号root为你喜欢的,我这里改成fatbmysql update user set user=fatb where user=root;mysql flush privileges;以后我们就得通过fatb帐号访问mysql数据库了rootdebian mysql -u root -pEnter password:ERROR 1045: Access denied for user: rootlocalhost (Using password: YES)rootdebian mysql -u fatb -pEnter password:Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 14 to server version: 4.0.13-log到这里,mysql的安全设置基本上完毕了现在我们安装mod-security,debian下同样很简单,并且自动把模块加到httpd.conf里rootdebian /apt-get install libapache-mod-security默认这个模块是没激活的,编辑一下httpd.conf文件并去掉下面这行的注释LoadModule security_module /usr/lib/apache/1.3/mod_security.so接着在httpd.conf的末尾加上 # 打开或者关闭过滤引擎 SecFilterEngine On # 设置缺省的动作 SecFilterDefaultAction deny,log,status:404 # 把设置传递给字目录 SecFilterInheritance Off # 检测URL编码是否正确 SecFilterCheckURLEncoding On # 检测内容长度以避免堆溢出攻击 SecFilterForceByteRange 32 126 # 日志文件的位置和名字 SecAuditLog logs/audit_log # debug设置 SecFilterDebugLog logs/modsec_debug_log SecFilterDebugLevel 0 # 检测POST数据 SecFilterScanPOST On # 当匹配sh的时候,重新定向到一个特殊的页面,让攻击者知难而退 SecFilter sh redirect:/hack/fu.htm # Only check the body of the POST request #过滤一些敏感的东西,我们使用*是为了攻击者使用/etc/./passwd来绕开检测 SecFilter /etc/*passwd SecFilter /bin/*sh # 防止double dot攻击,也就是类似/openfile.php?path=/././.,虽然这个漏洞看似弱智,但是很多网站都有的,比如CERNET某大学某图片站:) SecFilter ./ # 防止跨站脚本(CSS)攻击 SecFilter ( | )*script SecFilter # 防止SQL插入(SQL Injection)攻击 SecFilter delete(空格| )+from SecFilter insert(空格| )+into SecFilter select(空格| )+from SecFilter union(空格| )+from # 下面是限制了upload.php文件只能用来上传jpeg.bmp和gif的图片 SecFilterInheritance Off SecFilterSelective POST_PAYLOAD !image/(jpeg|bmp|gif) 用好了mod-security,可以使你的网站的安全性大大的提高的,在他带的manual里你可以找到更多的设置的,在光盘中附带了更加详细的规则(mod-security.rule.txt)然后我们装Zend Performance Suit,在安装的时候,他问你使用的用户的时候,记得写chrapax而不是www-dataorder allow,denyallow from 3(你的IP)deny from allOptions All下面重头戏到了,chroot,非常重要的一步,但可能还是比较简单的一步,先把几个python写的配置文件复制到/etc/makejail下rootdebian /etc/makejailcp /usr/share/doc/makejail/examples/apache.py ./然后编辑apache.py文件添加修改相应的信息users=chrapaxgroups=chrapaxpackages=apache,apache-common,php4,php4-gd,mysql-common,libapache-mod-security然后执行makejail命令rootdebian /etc/makejailmakejail apache.py完成之后,我们得先做个软连接并把chrapax从passwd和group文件分离出来rootdebian /etc/makejailln -s /var/chroot/apache /apacherootdebian /etc/makejailgrep chrapax /etc/passwd /apache/etc/passwdrootdebian /etc/makejailgrep chrapax /etc/group /apache/etc/grouprootdebian /etc/makejailcp /etc/mime.types /apache/etc/然后在/etc/init.d里建一个叫chrapax的文件并让他可执行,内容详见光盘中的chrapaxrootdebian /etc/makejailcat /etc/init.d/chrapaxrootdebian /etc/makejailchmod +x /etc/init.d/chrapax接着使用rcconf命令让他在系统启动的时候启动(如图rcconf.bmp)rootdebian /etc/makejailrcconf启动chroot的apacherootdebian /etc/makejail/etc/init.d/chrapax start先测试一下php和mysql连接是否有问题rootdebian /etc/makejailcat /apache/var/www/mysql.php $conn = mysql_connect(localhost, fatb, urpassword) or die; print php can work

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论