2018-3-7 Linux学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-3-7 Linux学习笔记相关的知识,希望对你有一定的参考价值。

11.28 限定某个目录禁止解析php

  • 背景:出于安全考虑的原因,一般而言,静态文件所在的能上传文件的目录下是不允许存放PHP文件的,因为这样就可以禁止该目录下解析php,防范可能通过php解析的入侵.
  • 配置某个目录禁止解析php的方法:
  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 配置文件增加如下内容:
    <Directory /data/wwwroot/123.com/upload>
    php_admin_flag engine off
    </Directory>
    技术分享图片
  • 重新加载配置文件:
    /usr/local/apache2.4/bin/apachectl -t
    /usr/local/apache2.4/bin/apachectl graceful
  • 配置后的测试:
    curl -x127.0.0.1:80 ‘http://123.com/upload/admin.php
    技术分享图片
  • 结论:curl测试时直接返回了php源代码,说明admin.php并未得到解析.

11.29 限制user_agent

  • 背景:有时我们的网站会受到cc攻击,它简单说是攻击者控制成千上万很多台主机/服务器同时访问网站,大量耗费网站服务器的带宽等资源,造成服务器不堪受负而停止服务.这类攻击其实也是正常的访问,只不过是短时间内高频率的访问,目的就是为了搞垮你的网站.这类攻击有个特点就是它们的user_agent基本上是一致的,所以为了防止此类攻击,我们可通过设置限制user_agent的方法.
  • 配置限制user_agent的方法:
  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 配置文件增加如下内容:
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
    RewriteRule .* - [F]
    </IfModule>
  • 以上配置中:
    NC: 表示忽略大小写
    OR: 表示或者之意,不写则各行(条件)是并且的关系
    F: Forbidden之意,禁止访问
    技术分享图片
  • 重新加载配置文件:
    /usr/local/apache2.4/bin/apachectl -t
    /usr/local/apache2.4/bin/apachectl graceful
  • 配置后的测试:
    curl -x127.0.0.1:80 ‘http://123.com/admin.php
    curl -A "baidu.com" -x127.0.0.1:80 ‘http://123.com/upload/admin.php‘ -I
    curl -A "qq.com" -x127.0.0.1:80 ‘http://123.com/admin.php‘ -I
    技术分享图片
    tail -n 5 /usr/local/apache2.4/logs/123.com-access_20180306.log
    查看日志再次验证了被拒绝的2条访问的user_agent分别包含curl和baidu.com.
    技术分享图片
    结论:curl直接测试(此是user_agent包含curl)和指定user_agent为baidu.com时均返回403代码,说明限制user_agent成功.user_agent为qq.com时则返回200代码,不受限制,访问成功.

  • 知识点
    (1)user_agent可以理解为浏览器标识.
    (2)curl -A "123123"  表示指定user_agent为123123

    11.30/11.31 php相关配置

  • 之前所学的都是关于apache的配置,这一节学习php相关配置.
  • 1.查看php配置文件位置
    /usr/local/php/bin/php -i|grep -i "loaded configuration file"
    技术分享图片
  • 然而(经验说明)通过以上语句查到的有时未必正确,更可靠的方法是在站点(比如123.com)目录下创建一个包含phpinfo()函数的php页面,然后在浏览器中访问它,从而来查看到配置文件位置.
    技术分享图片
    技术分享图片
  • 2.找到php配置文件后,就可编辑它来设置相关配置了.
    vi /usr/local/php7/etc/php.ini
  • (1) 时区配置,设为Asia/Shanghai或者Asia/Chongqing
    date.timezone = Asia/Shanghai
  • (2) 安全相关配置--禁用以下函数,这样即使被上转木马,由于相关函数已被禁用,它也无法执行.
    disable_functions =
    eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo
  • (3) 错误日志相关配置--便利排障时查看
  • 定义错误日志文件:
    error_log = /tmp/php_errors.log
    技术分享图片
  • 错误日志开关:
    log_errors = On
    技术分享图片
  • 当出错时是否网页上显示相关错误信息:
    display_errors = Off
    生产环境中一般设为Off,因为不想留有可能有用信息(比如文件所在目录)给黑客.
    技术分享图片
    此时即使报错,网页上也不会有任何显示,这样就防止信息泄漏.
    技术分享图片
    但运维人员可在已定义的错误日志文件中查看到相关报错信息
    技术分享图片
  • 定义错误报告的级别:
    error_reporting = E_ALL & ~E_NOTICE
    生产环境中一般设为E_ALL & ~E_NOTICE,即除了通知外所有其他错误,警告等信息都记录.
    技术分享图片
  • (4)安全相关参数open_basedir
  • 简单说php.ini中的open_basedir参数,起到限制操作在某个站点目录下的作用.比如一台服务器上有多个站点(每个站点都有一个目录对应),万一某个站点被黑了,如果我们对这个站点设置了open_basedir,那他最多也就能在该站点下折腾,搞不了其他站点.
  • 然而,php.ini中的open_basedir参数是对所有的站点都适用的,假如服务器上只有一个站点,直接配置php.ini中的open_basedir参数是能起到作用,但如果不止一个站点,因为各个站点目录不同,而php.ini中的open_basedir参数只能设置一处,所以它就无能为力了.
  • 这时就借助apache虚拟主机配置文件来针对特定站点设置open_basedir参数.
  • vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 配置文件增加如下内容:
    php_admin_value open_basedir "/data/wwwroot/123.com:/tmp/"
  • 这样就为123.com这个站点设置了open_basedir配置.
    技术分享图片

扩展学习:
apache开启压缩 http://ask.apelearn.com/question/5528
apache2.2到2.4配置文件变更 http://ask.apelearn.com/question/7292
apache options参数 http://ask.apelearn.com/question/1051
apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029

以上是关于2018-3-7 Linux学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

linux学习笔记二

linux学习笔记一

Linux学习笔记

Linux学习笔记

Linux学习笔记

Linux学习笔记(第一周)