linux 下php的安全優化

前面我們學習了網站前端tomcat,apache,nginx的安全優化,我們知道我們搭建的是lamp,lnmp。動態網站架構。中間還有一個php.這個也是要做安全優化的,同樣是一個重點。這點兒是內容比較多,不過沒關係,我們只要瞭解其原理,優化起來也同樣簡單。有童鞋可能看到我前面基礎一直在重複Linux下一切皆文件,現在到服務我一直在重複每個服務的原理!因爲這是我們怎麼做的基礎!下面我看下PHP原理圖:

wKiom1brd1qAtaVoAADwS3FO3wg459.png

從上面圖上我們可以不難看出,Apache是通過libphp5.so模塊的方式跟PHP連接的,nginx是通過fastCGI的方式連接的。但是PHP工作方式都是一樣的,所以我把PHP的安全優化放在他們的後面。

PHP是幹什麼的?這個是我們首先要明白的。這裏我不引用官方文檔解釋,PHP我們都知道他是一門語言,既然他是一門語言所以他的功能就是用來編譯和解析PHP文件的了同時他還負責連接數據庫!這樣的推理是不是很簡單。現在我們知道了他功能。看看他是怎麼工作的。

我們知道當我們是靜態文件的時候,我們的前端web服務器自己會處理髮給客戶端瀏覽器,如果是動態的文件,我們的前端Web服務器會通過模塊libphp5.so發給phpphp來進行編譯解析在給我們的前端,如果要讀數據庫或者寫數據庫,那就由他來在聯繫數據庫。

Nginx是通過fastCGI的方式來拋給php.其他的都一樣。現在問題來了!一個人訪問的時候的,PHP要進行編譯一次,那麼十個人呢?不是要進行十次編譯,這樣的話太慢了,於是我們可以把php的編譯緩存起來,不是快很多了。所以我們的第一個優化點是不是出來了(PHP的緩存的加速)。

操作步驟:

wKiom1brd6HSwgk_AAC57gwz93o920.png

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 有這個包就是安裝好了

wKioL1brexayOcdyAABz46ylmdY390.pngwKiom1brepOhRAhcAAA16VflNfo710.pngwKioL1bre4vQAU8nAABAF41EmBc761.png

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服務器上)

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

wKiom1bre82Qx-c-AABqS5QAmTE676.pngwKiom1brfAbA7ucDAAA2HxrWt-8181.pngwKioL1brfNmyZc_mAABBDrXoVt4832.png

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 有這個即可

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

wKiom1brmm2yu0YHAABX8x6VLvA948.pngwKiom1brmqSxUxWRAAAsDu8rCBg815.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.pngwKioL1brno2hyFPGAAAymBIr2Bw794.png

wKioL1brpIbyvfAlAAC7-WyGBMw999.png

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

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

wKioL1bruY6C_qcUAAD-iibLvDo168.png

wKiom1bruVPTOKCuAABOv8r8mqQ704.png

wKioL1bru6HyrW1pAABFoxe6Cfk737.png

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章