apache的安全增强配置(使用mod_chroot,mod_security)
apache的安全增强配置(使用mod_chroot,mod_security)
作者:windydays 2010/8/17
LAMP环境的一般入侵,大致经过sql注入,上传webshell,本地提权至root,安装rootkit等步骤。采用如下的配置,mod_chroot和单独分区挂载可以让本地提权变得极为困难,而mod-security可以封堵一般的sql注入等应用层攻击。
以下内容是在ubuntu10.04上实践以后总结出来的,直接上命令,就不做过多解释了,水平有限,错误在所难免,欢迎指正。
首先确保apache,php,mysql已经正常工作,出现问题的话,查看/var/log/apache2, /var/log/syslog,/var/log/mysql/error.log尤其是apparmor导致的权限错误,不易发现。
1.mod_chroot的安装,配置
目标是chroot到/var/www。
(1) 安装:
sudo service apache2 stop
sudo apt-get libapache2-mod-chroot
sudo vi /etc/apache2/mod-available/mod_chroot.conf
内容为
<IfModulemod_chroot.c>
LoadFile /lib/libgcc_s.so.1
ChrootDir /var/www
</IfModule>
sudo a2enmodmod_chroot
/etc/apache2/site-enabled/000-default中DocumentRoot改为 /
sudo ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
并把
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
加到/etc/rc.local中
sudo mkdir /var/www/tmp #放session
sudo chmod 1777tmp
sudo mkdir -p /var/www/var/run/mysqld
sudo ln -s / /var/www/var/www
安装好apache,静态页面和php正常后,弄mysql
1),sudo service mysql stop.
2).改/etc/apparmor.d/usr.sbin.mysqld,
把"/var/run/mysqld.sock w,"那一行复制并改为
"/var/www/var/run/mysqld.sock w,"
3),改/etc/mysql/my.cnf
在[client],[mysqld_safe],[mysqld]每一节里socket路径改为
"socket = /var/www/var/run/mysqld/mysqld.sock"
4),sudo servicemysql start.
一些其他问题
date()不正常,解决办法:
sudomkdir -p /var/www/usr/share /var/www/etc
sudo cp -rp /usr/share/zoneinfo /var/www/usr/share/
sudo cp /etc/localtime/var/www/etc/
DNS可能出问题(没试过)
sudo cp /etc/resolv.conf/var/www/etc/resolv.conf
找不到错误页面
sudo cp -rp /usr/share/apache2//var/www/usr/share/
2.mod_security的安装,配置
安装
sudo aptitude install libapache2-mod-security2
sudo cp/usr/share/doc/mod-security-common/examples/rules/modsecurity_crs_10_config.conf /etc/apache2/mods-enabled/mod-security.conf
sudo a2enmod mod-security
sudo apache2ctl stop
修改/etc/apache2/mods-available/mod-security.conf中的debug_log和audit_log路径到合适的位置,并添加如下两行
Include/usr/share/doc/mod-security-common/examples/rules/modsecurity_crs_10_global_config.conf
Include/usr/share/doc/mod-security-common/examples/rules/base_rules/*.conf
sudo apache2ctlstart
#/usr/share/doc/mod-security-common/examples/rules/目录下还有一些规则可用
参照gentoo的ebuild中的如下内容(http://gentoo-portage.com/www-apache/mod_security/ChangeLog)
- if ! use vanilla; then
- mv "${D}"${APACHE_MODULES_CONFDIR}/mod_security/modsecurity_*{41_phpids,50_outbound}*/
- "${D}"${APACHE_MODULES_CONFDIR}/mod_security/optional_rules || die
- fi
modsecurity_*{41_phpids,50_outbound}*的这几个规则还是不要用比较好。
另外,http://www.gotroot.com/tiki-index.php?page=mod_security+rules提供一些规则
3.另外,可以把/var/www/放在一个单独的分区上,用noexec,nosuid,nodev参数挂载,打开mysql的apparmor,可以极大增强安全性。
参考资料:
/usr/share/doc/mod-chroot-common/
http://core.segfault.pl/~hobbit/mod_chroot/index.html
http://server.it168.com/a2010/0714/1077/000001077357.shtml
http://www.howtoforge.com/chrooting-apache2-mod-chroot-debian-etch
/usr/share/doc/mod-security-common
后期补充一些:
chroot的关键是确保/var/www/ ,/var/www/var/www都存在,并且/var/www/var/www 是指向/的符号连接
对apache chroot的过程,我的理解(如有不对,欢迎指正)是
1,先初始化其他模块
2,chroot到/var/www
3, 改变当前目录到/var/www(此时实际上是改变到/var/www/var/www目录下)
4,当http请求到来时,比如http://127.0.0.1/index.php,根据vhost的配置(如果documentroot是/,网页实际放在/var/www/下的话),apache寻找/index.php(实际上是/var/www/index.php)
另外,还有个诊断方法是查看/proc/<apache pid>/root和/proc/<apache pid>/cwd,一个是apache的root路径,一个是apache的当前目录(<apache pid>是apache的pid ),再看看apache的访问日志
apache的安全增强配置(使用mod_chroot,mod_security)的更多相关文章
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...
- centos7 apache httpd安装和配置django项目
一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...
- Linux下apache+phppgadmin+postgresql安装配置
Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...
- apache 虚拟主机详细配置:http.conf配置详解
apache 虚拟主机详细配置:http.conf配置详解 Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd. ...
- Apache下开启SSI配置使html支持include包含
写页面的同学通常会遇到这样的烦恼,就是页面上的 html 标签越来越多的时候,寻找指定的部分就会很困难,那么能不能像 javascript 一样写在不同的文件中引入呢?答案是有的,apache 能做到 ...
- php7+apache的环境安装配置
因为刚开始接触php,所以要对php的开发环境进行搭建. 1.首先到Apache的官网下载最新版: http://httpd.apache.org/download.cgi: 参照该网址配置Apach ...
- windows 7 64bit 下apache php mysql 环境配置
在64位环境下安装apache,php和配置过程 准备好安装包.(64位版本) Apache 下载地址:http://www.apachelounge.com/download/ Php 下载地址:h ...
- Apache + Tomcat集群配置详解 (1)
一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...
- (转)Apache+Tomcat集群配置
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...
随机推荐
- luogu3224 永无乡(动态开点,权值线段树合并)
luogu3224 永无乡(动态开点,权值线段树合并) 永无乡包含 n 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示.某些 ...
- lj的锁
lj的锁 Lj花很大力气设计了一个锁,有一天,lj用这个锁把lbn锁在了一个小房间里,准备把lbn啊掉,现在lbn要逃出这个房间,他需要解开这个锁.在平面上有n个钉子,第i个钉子的位置是(x[i],0 ...
- jmeter如何设置全局变量以及调用方法
当遇到如跨线程组调用变量等情况,需要设置全局变量. 1.打开函数助手 输入需要的值然后点击生成按钮,或者直接使用${__setProperty(newuserid,${userid},)}的格式 设置 ...
- POJ1044 Date bugs
题目来源:http://poj.org/problem?id=1044 题目大意: 与众所周知的”千年虫“类似,某些计算机上存在日期记录的bug.它们的时钟有一个年份周期,每当到达最大值时,就会自动跳 ...
- [Leetcode]006. ZigZag Conversion
public class Solution { public String convert(String s, int nRows) { if (s == null || s.isEmpty() || ...
- 使用shell巧妙高效的批量删除历史文件或目录
背景:有实时产生的数据按小时分文件保存,如“/data/2013/09/18/14.txt”.现需要保留30天的最新数据,而删除所有其它的历史数据.注意“保留30天的最新数据”,可能不是连续的30天, ...
- IE8浏览器总是无响应或卡死崩溃怎么办
IE8浏览器总是无响应或卡死崩溃怎么办 2016-05-11 11:22:31 来源:百度经验 作者:qq675495787 编辑:Jimmy51 我要投稿 IE在打开某些网页的时候经常崩溃或无响应, ...
- SPOJ 3267: DQUERY 树状数组,离线算法
给出q个询问,询问一段区间里面的不同元素的个数有多少个. 离线做,用树状数组. 设树状数组的意义是:1--pos这个段区间的不用元素的种类数.怎么做?就是add(pos,1);在这个位置中+1,就是说 ...
- 宋宝华:swappiness=0究竟意味着什么?
http://mp.weixin.qq.com/s/BixMISiPz3sR9FDNfVSJ6w 本文解释swappiness的作用,以及swappiness=0究竟意味着什么. 内存回收 我们都知道 ...
- Java集合——List集合
1.集合框架的作用 在实际开发中,我们经常会对一组相同类型的数据进行统一管理操作.到目前为止,我们可以使用数组结构,链表结构,二叉树结构来实现. 数组的最大问题在于数组中的元素个数是固定的,要实现动态 ...