lnmp架構下php安全配置分享

    

以往的lamp網站向着lnmp發展, 筆者工做環境使用lnmp多年, 在這裏很高興和你們分享一下多年的lnmp網站的php安全配置,至於lamp安全後續與你們分享,其實內容上八成相同,這邊着重講php安全配置,看內容.html

1. 使用open_basedir限制虛擬主機跨目錄訪問

1 [HOST=www.ttlsa.com]
2 open_basedir=/data/site/www.ttlsa.com/:/tmp/
3  
4 [HOST=test.ttlsa.com]
5 open_basedir=/data/site/test.ttlsa.com/:/tmp/

如上配置的意思是www.ttlsa.com下的php程序被限制在open_basedir配置的兩個目錄下, 不能夠訪問到其餘目錄。若是沒有作以上的配置,那麼test.ttlsa.com與www.ttlsa.com的程序能夠互相訪問. 若是其中一個站點有漏洞被黑客植入了webshell,那麼他能夠經過這個站點拿下同一臺服務器的其餘站點,最後掛木馬.mysql

注意:目錄最後必定要加上/. 好比你寫/tmp,你的站點同時存在/tmp123等等以/tmp開頭的目錄,那麼黑客也能夠訪問到這些目錄,另外, php5.3以上支持這個寫法,5.2不支持。linux

2. 禁用不安全PHP函數

1 disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo

禁止php執行以上php函數,以上php程序能夠執行linux命令, 好比能夠執行ping、netstat、mysql等等.若是你的系統有提權bug,後果你懂得.程序員

3. 關注軟件安全資訊

積極關注linux內核、php安全等信息並及時採起錯誤web

4. php用戶只讀

這 個方法是我最推崇的方法,可是執行以前必定要和php工程師商量. 爲何?例如站點www.ttlsa.com根目錄用戶與組爲nobody,而運行php的用戶和組爲phpuser。目錄權限爲755,文件權限爲 644. 如此,php爲只讀,沒法寫入任何文件到站點目錄下。也就是說用戶不能上傳文件,即便有漏洞, 黑客也傳不了後門, 更不可能掛木馬.  這麼幹以前告知程序員將文件緩存改成nosql內存緩存(例如memcached、redis等),上傳的文件經過接口傳到其餘服務 器(靜態服務器)。redis

備註:程序生成本地緩存是個很是糟糕的習慣,使用文件緩存速度緩慢、浪費磁盤空間、最重要一點是通常狀況下服務器沒法橫向擴展sql

5. 關閉php錯誤日誌

1 display_errors = On
2 改成
3 display_errors = Off

程序一旦出現錯誤,詳細錯誤信息便馬上展現到用戶眼前,其中包含路徑、有的甚至是數據庫帳號密碼. 注入滲透密碼基本上都是經過這個報錯來猜取。生產環境上強烈關閉它shell

6. php上傳分離

將文件上傳到遠程服務器,例如nfs等。固然也能夠調用大家寫好的php接口. 即便有上傳漏洞,那麼文件也被傳到了靜態服務器上。木馬等文件根本沒法執行.數據庫

舉個例子: php站點www.ttlsa.com,目錄/data/site/www.ttlsa.com 靜態文件站點static.ttlsa.com,目錄/data/site/static.ttlsa.com

文件直接被傳到了/data/site/static.ttlsa.com,上傳的文件沒法經過www.ttlsa.com來訪問,只能使用static.ttlsa.com訪問,可是static.ttlsa.com不支持php.

7. 關閉php信息

1 expose_php = On
2 改成
3 expose_php = Off

不輕易透露本身php版本信息,防止黑客針對這個版本的php發動攻擊.

8. 禁止動態加載連接庫

1 disable_dl = On;
2 改成
3 enable_dl = Off;

9. 禁用打開遠程url

1 allow_url_fopen = On
2 改成
3 allow_url_fopen = Off

其實這點算不上真正的安全, 並不會致使web被入侵等問題,可是這個很是影響性能, 筆者認爲它屬於狹義的安全問題.

如下方法將沒法獲取遠程url內容

1 $data = file_get_contents("http://www.baidu.com/");

如下方法能夠獲取本地文件內容

1 $data = file_get_contents("1.txt");

若是你的站點訪問量不大、數據庫也運行良好,可是web服務器負載出奇的高,請你直接檢查下是否有這個方法。筆者遇到過太多這個問題,目前生產環境已全線禁用,若是php工程師須要獲取遠程web的內容,建議他們使用curl.

php curl如何使用請查看我以前的文章《PHP使用curl替代file_get_contents》,以及php下curl與file_get_contents性能對比.

10.結束

今天lnmp站點的php安全暫時講到這裏,有問題後續將繼續補充.小抱怨下,發到本身博客上,百度老是不收錄,仍是oschina靠譜.

 個人博客地址:lnmp架構下php安全配置分享 若是上面連接失效,請點擊:http://www.ttlsa.com/html/2279.html

相關文章
相關標籤/搜索