前面我们学习了网站前端tomcat,apache,nginx的安全优化,我们知道我们搭建的是lamp,lnmp。动态网站架构。中间还有一个php.这个也是要做安全优化的,同样是一个重点。这点儿是内容比较多,不过没关系,我们只要了解其原理,优化起来也同样简单。有童鞋可能看到我前面基础一直在重复Linux下一切皆文件,现在到服务我一直在重复每个服务的原理!因为这是我们怎么做的基础!下面我看下PHP原理图:

linux 下php的安全优化_第1张图片

从上面图上我们可以不难看出,Apache是通过libphp5.so模块的方式跟PHP连接的,nginx是通过fastCGI的方式连接的。但是PHP工作方式都是一样的,所以我把PHP的安全优化放在他们的后面。

PHP是干什么的?这个是我们首先要明白的。这里我不引用官方文档解释,PHP我们都知道他是一门语言,既然他是一门语言所以他的功能就是用来编译和解析PHP文件的了同时他还负责连接数据库!这样的推理是不是很简单。现在我们知道了他功能。看看他是怎么工作的。

我们知道当我们是静态文件的时候,我们的前端web服务器自己会处理发给客户端浏览器,如果是动态的文件,我们的前端Web服务器会通过模块libphp5.so发给phpphp来进行编译解析在给我们的前端,如果要读数据库或者写数据库,那就由他来在联系数据库。

Nginx是通过fastCGI的方式来抛给php.其他的都一样。现在问题来了!一个人访问的时候的,PHP要进行编译一次,那么十个人呢?不是要进行十次编译,这样的话太慢了,于是我们可以把php的编译缓存起来,不是快很多了。所以我们的第一个优化点是不是出来了(PHP的缓存的加速)。

操作步骤:

linux 下php的安全优化_第2张图片

1.修改字符集w_0005.gif

echo "export LC_ALL=C" >> /etc/profile

source /etc/profile

2.安装perl相关软件w_0017.gif

yum install perl-devel –y

wKioL1breHyBXJfwAABCloNEMuA335.png



3.上传软件包,安装xcache缓存加速模块w_0039.gif

tar xjf xcache-1.3.2.tar.bz2

cd xcache-1.3.2

/application/php/bin/phpize 

./configure --enable-xcache --with-php-config=/application/php/bin/php-config 

make && make install


ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

  xcache.so 有这个包就是安装好了

linux 下php的安全优化_第3张图片wKiom1brepOhRAhcAAA16VflNfo710.pnglinux 下php的安全优化_第4张图片

4.数据库的缓存软件w_0024.gif

 数据库与php之间的缓存软件 memcached


tar xf memcache-2.2.5.tgz 

cd memcache-2.2.5

/application/php/bin/phpize 

./configure --with-php-config=/application/php/bin/php-config 

make && make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

memcache.so 有这个包就是安装好了 注意这个是客户端软件(就是安装在php服务器上)

######################################

linux 下php的安全优化_第5张图片linux 下php的安全优化_第6张图片linux 下php的安全优化_第7张图片

5.PDO软件的安装w_0017.gif

tar zxf PDO_MYSQL-1.0.2.tgz 

cd PDO_MYSQL-1.0.2

/application/php/bin/phpize 

 ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql

make && make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

pdo_mysql.so有这个包就是安装好了

############################################

wKioL1brlx3jRv49AAAhRzetW8Y064.png

wKioL1brl1KTRugqAAAgmwdDjGY769.png

wKiom1brlsKzfqYqAAAh7NPML8c518.png

wKioL1brl1OAZo_wAAApHOJK7Hs767.png

wKiom1brlsODnYEDAAAgY-6ZbPI917.png

wKioL1brl1ODF9tnAAA_13uwqK8559.png

6.ImageMagick安装此软件是个图像处理软件w_0039.gif


首先安装库

yum install perl-devel -y

tar xf ImageMagick.tar.gz 

cd ImageMagick-6.5.1-2/

./configure

make && make install

###################################################

wKioL1brl_GgkkJkAAAjhiyUU7Q234.pngwKioL1brmF6ChIyUAAAw-zr1s-k033.pngwKioL1brmI3iFQEYAAAgKHH3RP8367.png

7.安装imagick-2.3.0php扩展w_0039.gif

tar xzf imagick-2.3.0.tgz 

cd imagick-2.3.0

/application/php/bin/phpize 


 ./configure --with-php-config=/application/php/bin/php-config


make && make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

imagick.so 有这个即可

################################################################################

linux 下php的安全优化_第8张图片wKiom1brmqSxUxWRAAAsDu8rCBg815.pngwKioL1brm5fyD2BmAAA7LNP0iR4916.png8.更改配置文件w_0003.gif

首先备份php.ini 然后做以下修改

修改PHP配置文件php.ini

找到819行取消注释,将等号右边的路径换成如下

819 extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"

结尾插入以下内容

;####2014.9.11 chaiyanpang####

extension = memcache.so

extension = pdo_mysql.so

extension = imagick.so

;####2014.9.11 chaiyanpang####

检查

ps -ef |grep php-fpm

pkill php-fpm

ps -ef |grep php-fpm

/application/php/sbin/php-fpm 重启即可

apache 同样的配置

到此写一个phpinfo程序测试,如果模块里以上三个模块就安装好了

#######################################################

wKioL1brnNnxTsmMAAApVtU5hug381.pngwKioL1brnjmQnI7xAAAyd6AVCzM870.pnglinux 下php的安全优化_第9张图片

linux 下php的安全优化_第10张图片

9.配置xcache缓存加速器w_0021.gif

修改php配置文件

  配置时我们可以参考xcache的配置模板xcache.ini,此文件位于Xcache安装程序中

# vim /usr/local/php/lib/php.ini

  然后添加如下内容

extension_dir= /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

[xcache-common]

extension = xcache.so


[xcache.admin]


xcache.admin.enable_auth = On

xcache.admin.user = "xcache"

xcache.admin.pass = ""


[xcache]

xcache.shm_scheme ="mmap"

xcache.size=60M

xcache.count =1

xcache.slots =8K

xcache.ttl=0

xcache.gc_interval =0

xcache.var_size=4M

xcache.var_count =1

xcache.var_slots =8K

xcache.var_ttl=0

xcache.var_maxttl=0

xcache.var_gc_interval =300

xcache.test =Off

xcache.readonly_protection = On

xcache.mmap_path ="/tmp/xcache"

xcache.coredump_directory =""

xcache.cacher =On

xcache.stat=On

xcache.optimizer =Off


[xcache.coverager]

xcache.coverager =On

xcache.coveragedump_directory =""


生成Xcache缓存文件

# touch /tmp/xcache

# chmod 777 /tmp/xcache

3、生成Xcache管理员的秘密(MD5密文)

# echo -n "123456" | md5sum

e10adc3949ba59abbe56e057f20f883e

  然后将上述生成的MD5密文粘贴到php.ini文件中xcache.admin.pass = ""选项,xcache.admin.pass= "e10adc3949ba59abbe56e057f20f883e"


通过phpinfo来验证PHP是否支持Xcache

#######################################################################

linux 下php的安全优化_第11张图片

linux 下php的安全优化_第12张图片

linux 下php的安全优化_第13张图片

10.优化php.ini参数w_0022.gif

php.ini 参数调整

修改安全模式338行

safe_mode = On

safe_mode_gid = Off

关闭危险函数

385 disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

关闭php版本信息

435 expose_php = Off

关闭注册全局变量

703 register_globals = Off

打开防止SQL注入

756 magic_quotes_gpc = On

关闭测试错误提示

538 display_errors = Off

打开日志

559 log_errors = On

643 error_log = /app/log/php_errors.log

部分资源限制参数优化

max_execution_time = 30 每个脚本最大允许执行时间

memory_limit = 128M  每个脚本使用最大内存

max_input_time = 60  每个脚本等待输入数据的时间

upload_max_filesize = 2M 上传单个文件大小

allow_url_fopen = Off 禁止打开远程地址

cgi.fix_pathinfo=0  防止Nginx文件类型错误解析漏洞

session会话共享存储设置

session.save_handler = memcache

session.save_path = "tcp://192.168.1.12:11211"

注意

1)192.168.1.120:11211 为memcached数据库缓存的IP及端口

2)上述适合lamp lnmp

php.ini优化至此

php-fpm是管理fastcgi的一个管理器。Web服务器同fastcgi这个工具连接到php。web服务器是通过fastcgi-pass 客户端连接到fastcgi这个工具,fastcgi这个工具在连接到php上的客户端,PHP上产生守护进程php-fpm进程。他是C/S模式。

php-fpm参数

pm.max_children = 1024 允许最大子进程数

pm.start_servers = 16 表示有多少个进程数

本节内容有点儿多,但是如果大家把原理弄清楚,其实也很简单的,不是嘛!希望大家努力!写这节的内容我花费了2天时间!有什么不懂的请联系博主:QQ1807074965w_0014.gif