web服務器的php安全設置

文中的情形是利用PHP的漏洞遠程執行代碼下載文件寫入服務器並執行.

而正常狀況下運行PHP的用戶(通常就是Web服務器運行用戶)對 Web目錄是沒有寫權限的(除了緩存目錄),而爲了安全通常都用disable_functions在php.ini裏禁用了PHP執行Shell的函數 (也就沒法經過運行PHP WebShell回彈Shell執行Shell命令),另外open_basedir也會限制PHP的文件操做目錄,明確隔離了Web目錄和系統目錄.

就算是緩存目錄,通常也會配置爲不解析PHP,因此即便上傳PHP WebShell到緩存目錄也沒法執行.

若是你非要chmod -R 777 /var/www/html和容許PHP調用Shell命令,那隻能說是本身的問題了.

安全的Web目錄權限設置:
find -type d -exec chmod 755 {} \;
find -type f -exec chmod 644 {} \;
注意:Web目錄用戶不能是Web服務器運行用戶,通常經過yum/apt-get安裝服務的狀況下是這樣的.
編譯安裝LAMP服務的注意要本身新建用戶並指定用戶運行Apache或者Nginx.

在php.ini裏禁用執行Shell的函數和限制PHP文件操做目錄:
disable_functions = passthru,exec,system,shell_exec,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_restore,ini_set,dl,pfsockopen,symlink,popen,putenv
open_basedir=/var/www/html/:/tmp/
更多"安全禁用函數"參考:
http://help.aliyun.com/manual?helpId=87
因 爲默認狀況下PHP的會話文件存放在/tmp下,上傳的文件也會臨時存放在/tmp下,因此須要open_basedir裏設置了/tmp目錄,不過不管 是會話文件存放目錄仍是臨時上傳目錄,均可以在php.ini裏自定義,也能夠爲每一個虛擬主機進行自定義,隔離虛擬主機間的文件操做.
php

相關文章
相關標籤/搜索