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)

  1. if ! use vanilla; then
  2. mv "${D}"${APACHE_MODULES_CONFDIR}/mod_security/modsecurity_*{41_phpids,50_outbound}*/
  3. "${D}"${APACHE_MODULES_CONFDIR}/mod_security/optional_rules || die
  4. 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)的更多相关文章

  1. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  2. centos7 apache httpd安装和配置django项目

    一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...

  3. Linux下apache+phppgadmin+postgresql安装配置

    Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...

  4. apache 虚拟主机详细配置:http.conf配置详解

    apache 虚拟主机详细配置:http.conf配置详解 Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd. ...

  5. Apache下开启SSI配置使html支持include包含

    写页面的同学通常会遇到这样的烦恼,就是页面上的 html 标签越来越多的时候,寻找指定的部分就会很困难,那么能不能像 javascript 一样写在不同的文件中引入呢?答案是有的,apache 能做到 ...

  6. php7+apache的环境安装配置

    因为刚开始接触php,所以要对php的开发环境进行搭建. 1.首先到Apache的官网下载最新版: http://httpd.apache.org/download.cgi: 参照该网址配置Apach ...

  7. windows 7 64bit 下apache php mysql 环境配置

    在64位环境下安装apache,php和配置过程 准备好安装包.(64位版本) Apache 下载地址:http://www.apachelounge.com/download/ Php 下载地址:h ...

  8. Apache + Tomcat集群配置详解 (1)

    一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...

  9. (转)Apache+Tomcat集群配置

    本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...

随机推荐

  1. SQL数据库操作整理

    1.规范 ①关键字与函数名称全部大写: ②数据库名称.表名称.字段名称全部小写: ③SQL语句必须以分号结尾. 2.数据库操作 // 1. 创建数据库,其中[]表示可以省略 CREATE { DATA ...

  2. springIOC源码解析之Bean的创建

    上一篇讲到了beanFactory的配置文件的解析和beanFactory的创建,都集中到了obtainFreshBeanFactory();这一句代码里了,本篇主要讲bean的创建过程 public ...

  3. 解决request中文乱码问题

    因为request请求都是ISO-8859-1,而jsp页面是采用UTF-8编码,所以当传递的参数有中文时,页面会出现乱码,但是可以将取到的数据通过String的构造函数使用指定的编码类型重新构造一个 ...

  4. sqllocaldb 的使用记录

    sql脚本是一个文件大约也就几MB,要是有一种文件存储数据就好了,后来了解到了sqllocaldb,但是没有深入研究大概知道有这么一个东西.这次翻出来还是自家小姑姑要做winfrom但是苦于sqlse ...

  5. giihub上的关于js的43道题目

    参考 https://github.com/lydiahallie/javascript-questions

  6. jdk tomcat

    vi /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_121export JRE_HOME=/usr/java/jdk1.8.0_121/jreexp ...

  7. VUE中嵌套路由

    官网地址:https://router.vuejs.org/zh-cn/essentials/nested-routes.html 路由嵌套一般使用在后台管理系统中 给一个比较简单的小案例 <! ...

  8. 默认约束 default

    default :初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值.  例子:create table tb6(   id int primary key auto_increment ...

  9. java 单例模式之线程安全的饿汉模式和懒汉模式

    转载博主:thankyou https://blog.csdn.net/twj13162380953/article/details/53869983 理解: 饿汉式获取实例的步骤简单所以线程更安全. ...

  10. kettle5.4ODBC和OCI连接配置

    1.kettle 5.4 使用JDBC连接的时候报错(测试不同的数据库,发现只是连接11gRAC 的时候会报JDBC的错误) 具体报错如下 java.sql.SQLException: 建数据库连接出 ...