LAMP(7限定某个目录禁止解析php、 限制user_agent、 PHP相关配置、PHP扩展模块
限定某个目录禁止解析php防止***上传一个目录文件php,网站会从而解析php,对我们的网站有很大的危险。
因此,我们需要在能上传文件的目录直接禁止解析PHP代码
http://s1.运维网.com/images/20180319/1521426912565332.png
禁止步骤
1.编辑虚拟主机配置文件:增添内容
核心配置文件内容
php_admin_flag engine off //禁止解析PHP这行即可
//加上这个deny是可以防止解析我们xxx.php(.*)源代码
Order deny,allow
Deny from all
修改完后:
改完了配置文件需要重新加载一下:
/usr/local/apache2.4/bin/apachectl -t(检测)
/usr/local/apache2.4/bin/apachectl graceful (加载)
创建upload目录:(在/data/wwwroot/111.com/下创建)
cd /data/wwwroot/111.com
mkdir upload
复制admin.php到upload下并改名为test.php
http://s1.运维网.com/images/20180319/1521427242748465.png
测试:
http://s1.运维网.com/images/20180319/1521427438400994.png
此时只是显示test.php源代码
http://s1.运维网.com/images/20180319/1521428101585828.png
http://s1.运维网.com/images/20180319/1521428234883668.png
去掉这个标签内容,再测试,连访问的权限都没有
http://s1.运维网.com/images/20180319/1521428334436134.png
测试
http://s1.运维网.com/images/20180319/1521428413970342.png
限制user_agent
user_agent:为浏览器的标识
当很多用户同时访问同一个站点,这样会很消耗服务器资源
http://s1.运维网.com/images/20180319/1521429258407205.png
针对user_agent做访问控制步骤:
1.编辑虚拟主机配置文件:增添内容
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT}.*curl.*
RewriteCond %{HTTP_USER_AGENT}.*baidu.com.*
RewriteRule.*-
限制.*curl.或者.*baidu.com.这两个user_agent的访问
http://s1.运维网.com/images/20180319/1521429331233913.png
改完了配置文件需要重新加载一下:
/usr/local/apache2.4/bin/apachectl -t(检测)
/usr/local/apache2.4/bin/apachectl graceful (加载)
测试:
http://s1.运维网.com/images/20180319/1521429414478375.png
在日志文件可以看出:user_agent是我们的定义的curl
http://s1.运维网.com/images/20180319/1521429625717692.png
指定user_agent进行测试 curl -A(加-A选项)
curl -A "cansheng" -x192.168.136.133:80 'http://111.com/admin.php' -I
http://s1.运维网.com/images/20180319/1521429782205198.png
http://s1.运维网.com/images/20180319/1521429833194911.png
访问日志查看user_agenthttp://s1.运维网.com/images/20180319/1521429998966083.png
curl 的常用选项意义:
-A :指定user_agent
-I :显示状态码
-x:相当省略了hosts
PHP相关配置
http://s1.运维网.com/images/20180319/1521438098200802.png
查看我们的配置文件位置:(111.com虚拟主机)
(1)网页上查看:
首先得在 /data/wwwroot/111.com/index.php下编辑添加
phpinfo();
http://s1.运维网.com/images/20180319/1521441025291316.png
网页上查看信息:
http://s1.运维网.com/images/20180319/1521441147495336.png
cp/usr/local/src/php-5.6.30/php.ini-development /usr/local/php/etc/php.ini
http://s1.运维网.com/images/20180319/1521441355222359.png
http://s1.运维网.com/images/20180319/1521441377954834.png
复制后则会出现这样的信息http://s1.运维网.com/images/20180319/1521441404302268.png
这就是我们配置文件php.ini的位置
(2)命令行查看
usr/local/php/bin/php -i|grep -i "loaded configuration file"
http://s1.运维网.com/images/20180319/1521441577935981.png
(上面的PHP Warning:这个不是报错。需要取消的话编辑php.ini。找到data.timezonehttp://s1.运维网.com/images/20180319/1521442239891173.png
把PHP里的一些函数禁掉:
步骤:
1.修改配置文件:vim /usr/local/php/etc/php.ini
增添要禁止的函数
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
http://s1.运维网.com/images/20180319/1521442705519366.png
禁止了phpinfo()函数后再次访问111.com/index.php(内有phpinfo())则不会显示函数的内容:
http://s1.运维网.com/images/20180319/1521442944480696.png
http://s1.运维网.com/images/20180319/1521443577755971.png
配置error_log (不让错误信息显示在浏览器中)
http://s1.运维网.com/images/20180319/1521443583650882.png
1.修改display_errors = Off
http://s1.运维网.com/images/20180319/1521443607138658.png修改以后就不会把错误信息显示在浏览器中
2.定义错误日志的路径:
(1)确保:log_errors =On
http://s1.运维网.com/images/20180319/1521443936139208.png
(2)路径:error_log = /tmp/log/php/php_errors.log(自定义路径)
http://s1.运维网.com/images/20180319/1521445474314252.png
(3)定义error_log级别:error_reporting
http://s1.运维网.com/images/20180319/1521444356446086.png
http://s1.运维网.com/images/20180319/1521444431637640.png
创建 错误日志路劲文件:
http://s1.运维网.com/images/20180319/1521445742148723.png
并修改权限:
http://s1.运维网.com/images/20180319/1521445764845662.png
测试:
http://s1.运维网.com/images/20180319/1521445899215823.png
http://s1.运维网.com/images/20180319/1521445927479253.png
配置open_basedir:(安全选项)
open_basedir:作用是将网站限制在指定的目录里,就算***黑了这个网址也只能在这个目录下操作,影响不了其他目录下的网站。(一台服务器可以跑多个网站)
步骤:
1.修改配置文件,增加内容。
增加限定所在目录(多个目录用“:”隔开
http://s1.运维网.com/images/20180319/1521446823142300.png
http://s1.运维网.com/images/20180319/1521446940925890.png
测试:
故意把限定目录改成不存在的一个目录:
http://s1.运维网.com/images/20180319/1521447004814800.png
运行: curl -x192.168.136.133:80 111.com/index.php -I
(index.php是在111.com目录下的)
http://s1.运维网.com/images/20180319/1521447032295271.png报错。
错误日志内容显示:
http://s1.运维网.com/images/20180319/1521447146564296.png
正确修改完后
http://s1.运维网.com/images/20180319/1521446823142300.png
访问正常:
http://s1.运维网.com/images/20180319/1521447237746851.png
如果我们的服务器上有很多个网站都在同一个目录,那么直接修改php.ini就不是这么合适。php.ini是针对所有的站点的。
解决方法:
对单个虚拟主机设置open_basedir
步骤:
修改虚拟主机配置文件:
vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
增添内容:
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
http://s1.运维网.com/images/20180319/1521447907445647.png
php_admin_value可以定义php.ini里面的参数:
http://s1.运维网.com/images/20180319/1521448060827472.png
这样两台虚拟主机都限定在各自的目录下
(/tmp 目录基本都得添加到限制目录中,这个是因为一些临时限制文件一般的都是先存放在/tmp,不加tmp则类似图片上传也不能正确使用)
(切记:每次修改完配置文件都要检测和加载
/usr/local/apache2.4/bin/apachectl -t(检测)
/usr/local/apache2.4/bin/apachectl graceful (加载)
)
PHP扩展模块安装
PHP动态扩展模块
当我们的需求变更时,我们的模块在一开始配置完成后没有变更时的模块,那么就需要动态扩展:
http://s1.运维网.com/images/20180319/1521450435985669.png
查看PHP目前都加载了什么模块
/usr/local/php/bin/php -m
http://s1.运维网.com/images/20180319/1521448620120047.png
下面安装一个redis的模块( 放在/usr/local/src/目录下)
1.先下载redis 的包:
http://s1.运维网.com/images/20180319/1521448832797129.png
2.修改一下名字:
mv develop phpredis-develop.zip
http://s1.运维网.com/images/20180319/1521448931956994.png
3.解压:
unzip phpredis-develop.zip
4.进入到包里:
cd phpredis-develop
5.生成configure文件
/usr/local/php/bin/phpize
http://s1.运维网.com/images/20180319/1521449219930119.png
yum install -y autoconf
安装完成后再执行/usr/local/php/bin/phpize
http://s1.运维网.com/images/20180319/1521449425482314.png
6.执行
./configure --with-php-config=/usr/local/php/bin/php-config
http://s1.运维网.com/images/20180319/1521449520278559.png
7.make
8.makeinstall
http://s1.运维网.com/images/20180319/1521449672988969.png
安装完后:生成有redis.so这个文件,这正是我想要的
但是此时我们的php并没有加载到这个模块
http://s1.运维网.com/images/20180319/1521449824308814.png
9.配置,让php加载这个redis模块:
(1)查看扩展模块存放目录,(我们可以在php.ini中去自定义该路径)
/usr/local/php/bin/php -i |grep extension_dir
http://s1.运维网.com/images/20180319/1521450035421275.png
下载的模块都是默认放在这里的:
(2)编辑php.ini
vim /usr/local/php/etc/php.ini
增加一行配置(可以放到文件最后一行)
extension = redis.so
http://s1.运维网.com/images/20180319/1521450278822889.png
最后就可以查看到php加载了这个模块
http://s1.运维网.com/images/20180319/1521450371264111.png
(编译一个扩展模块的时候,如果如果自带的源码包里(php)的ext目录下有我们想要的模块,那么就可以直接在ext编译它 ,不用下载,先进入该包然后执行生成configure文件这里开始的步骤
)
页:
[1]