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为12312311.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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章