• 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-defaultDocumentRoot改为 /

                   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_logaudit_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/目录下还有一些规则可用

            参照gentooebuild中的如下内容(http://gentoo-portage.com/www-apache/mod_security/ChangeLog

     


           modsecurity_*{41_phpids,50_outbound}*的这几个规则还是不要用比较好。

           另外,http://www.gotroot.com/tiki-index.php?page=mod_security+rules提供一些规则

      

     3.另外,可以把/var/www/放在一个单独的分区上,用noexec,nosuid,nodev参数挂载,打开mysqlapparmor,可以极大增强安全性。

     

    参考资料:

            /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的访问日志



    我的邮箱是 lh2008999 at gmail.com欢迎交流

  • 相关阅读:
    php1
    element ui
    webpack
    vue-router
    vue实例相关2
    vue实例相关
    js笔记2
    js笔记
    不找工作,你的简历也要更新!
    除了做测试,我们还能做些什么呢?
  • 原文地址:https://www.cnblogs.com/windydays/p/2298109.html
Copyright © 2020-2023  润新知