這篇文章給大家分享的是有關(guān)Linux下PHP網(wǎng)站服務(wù)器安全配置如何加固防護(hù)的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
東方網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),東方網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為東方上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的東方做網(wǎng)站的公司定做!
PHP被廣泛用于各種Web開發(fā)。而當(dāng)服務(wù)器端腳本配置錯(cuò)誤時(shí)會(huì)出現(xiàn)各種問題。現(xiàn)今,大部分Web服務(wù)器是基于Linux環(huán)境下運(yùn)行(比如:Ubuntu,Debian等)。
本文詳細(xì)總結(jié)了PHP網(wǎng)站在Linux服務(wù)器上面的安全配置,包含PHP安全、MySQL數(shù)據(jù)庫(kù)安全、web服務(wù)器安全、木馬查殺和防范等,很好很強(qiáng)大很安全。(如果需要深入的安全部署建議找專業(yè)做安全的國(guó)內(nèi)公司如:Sinesafe,綠盟,啟明星辰等等都是比較不錯(cuò)的專業(yè)做網(wǎng)站安全的公司)
PHP安全配置
1. 確保運(yùn)行php的用戶為一般用戶,如www
2. php.ini參數(shù)設(shè)置
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo #禁用的函數(shù)
expose_php = off #避免暴露PHP信息
display_errors = off #關(guān)閉錯(cuò)誤信息提示
register_globals = off #關(guān)閉全局變量
enable_dl = off #不允許調(diào)用dl
allow_url_include = off #避免遠(yuǎn)程調(diào)用文件
session.cookie_httponly = 1 #http only開啟
upload_tmp_dir = /tmp#明確定義upload目錄
open_basedir = ./:/tmp:/home/wwwroot/#限制用戶訪問的目錄
open_basedir參數(shù)詳解
open_basedir可將用戶訪問文件的活動(dòng)范圍限制在指定的區(qū)域,通常是其家目錄的路徑,也可用符號(hào)"."來代表當(dāng)前目錄。注意用open_basedir指定的限制實(shí)際上是前綴,而不是目錄名。
舉例來說: 若"open_basedir = /home/wwwroot", 那么目錄"/home/wwwroot"和"/home/wwwroot1"都是可以訪問的。所以如果要將訪問限制在僅為指定的目錄,請(qǐng)用斜線結(jié)束路徑名。
注意:
從網(wǎng)上獲取的資料來看,open_basedir會(huì)對(duì)php操作io的性能產(chǎn)生很大的影響。研究資料表明,配置了php_basedir的腳本io執(zhí)行速度會(huì)比沒有配置的慢10倍甚至更多,請(qǐng)大家自己衡量
open_basedir也可以同時(shí)設(shè)置多個(gè)目錄, 在Windows中用分號(hào)分隔目錄,在任何其它系統(tǒng)中用冒號(hào)分隔目錄。當(dāng)其作用于Apache模塊時(shí),父目錄中的open_basedir路徑自動(dòng)被繼承。
MySQL安全設(shè)置
1. MySQL版本的選擇
在正式生產(chǎn)環(huán)境中,禁止使用4.1系列的MySQL數(shù)據(jù)庫(kù)。至少需要使用5.1.39或以上版本。
2. 網(wǎng)絡(luò)和端口的配置
在數(shù)據(jù)庫(kù)只需供本機(jī)使用的情況下,使用–skip-networking參數(shù)禁止監(jiān)聽網(wǎng)絡(luò) 。
3. 確保運(yùn)行MySQL的用戶為一般用戶,如mysql,注意存放數(shù)據(jù)目錄權(quán)限為mysql
vi/etc/my.cnf user = mysql
4. 開啟mysql二進(jìn)制日志,在誤刪除數(shù)據(jù)的情況下,可以通過二進(jìn)制日志恢復(fù)到某個(gè)時(shí)間點(diǎn)
vi/etc/my.cnf log_bin = mysql-bin expire_logs_days = 7
5. 認(rèn)證和授權(quán)
(1) 禁止root賬號(hào)從網(wǎng)絡(luò)訪問數(shù)據(jù)庫(kù),root賬號(hào)只允許來自本地主機(jī)的登陸。
mysql>grantallprivilegeson*.* toroot @localhost identified by'password'withgrantoption; mysql>flush priveleges;
(2) 刪除匿名賬號(hào)和空口令賬號(hào)
mysql>USE mysql; mysql>deletefromuserwhereUser=; mysql>deletefromuserwherePassword=; mysql>deletefromdb whereUser=;
web服務(wù)器安全
確保運(yùn)行Nginx或者Apache的用戶為一般用戶,如www,注意存放數(shù)據(jù)目錄權(quán)限為www
防止sql注入
if( $query_string ~* ".*[\;'\<\>].*"){ return404; }
關(guān)閉存放數(shù)據(jù)上傳等目錄的PHP解析
location ~* ^/(attachments|data)/.*\.(php|php5)${ deny all; }
針對(duì)Apache:關(guān)閉圖片目錄/上傳等目錄的PHP解析
order allow,deny Deny from all
木馬查殺和防范
php木馬快速查找命令
grep-r --include=*.php '[^a-z]eval($_POST'/home/wwwroot/ grep-r --include=*.php 'file_put_contents(.*$_POST\[.*\]);'/home/wwwroot/
利用find mtime查找最近兩天或者發(fā)現(xiàn)木馬的這幾天,有哪些PHP文件被修改
find-mtime -2 -typef -name \*.php
防范:
1. 做好之前的安全措施,比如禁用相關(guān)PHP函數(shù)等
2. 改變目錄和文件屬性
find-typef -name \*.php -execchomd 644 {} \; find-typed -execchmod755 {} \; chown-R www.www /home/wwwroot/www.waitalone.cn
3. 為防止跨站感染,需要做虛擬主機(jī)目錄隔離
(1) nginx的簡(jiǎn)單實(shí)現(xiàn)方法
利用nginx跑多個(gè)虛擬主機(jī),習(xí)慣的php.ini的open_basedir配置:
open_basedir = ./:tmp:/home/wwwroot/
注:/home/wwwroot/是放置所有虛擬主機(jī)的web路徑
黑客可以利用任何一個(gè)站點(diǎn)的webshell進(jìn)入到/home/wwwroot/目錄下的任何地方,這樣對(duì)各個(gè)虛擬主機(jī)的危害就很大
例如: /data/www/wwwroot目錄下有2個(gè)虛擬主機(jī)
修改php.ini
open_basedir = ./:/tmp:/home/wwwroot/www.sinesafe.com:/home/wwwroot/back.sinesafe.com
這樣用戶上傳webshell就無法跨目錄訪問了。
(2) Apache的實(shí)現(xiàn)方法,控制跨目錄訪問
在虛擬機(jī)主機(jī)配置文件中加入
php_admin_value open_basedir "/tmp:/home/wwwroot/www.sinesafe.com"
感謝各位的閱讀!關(guān)于“Linux下PHP網(wǎng)站服務(wù)器安全配置如何加固防護(hù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!