以往的lamp網(wǎng)站向著lnmp成長, 筆者事情情況利用lnmp多年, 在這里很興奮和各人分享一下多年的lnmp網(wǎng)站的php安詳設(shè)置,至于lamp安詳后續(xù)與各人分享,其實(shí)內(nèi)容上八成溝通,這邊著重講php安詳設(shè)置,看內(nèi)容.
1. 利用open_basedir限制虛擬主機(jī)跨目次會(huì)見[HOST=www.server110.com]
open_basedir=/data/site/www.server110.com/:/tmp/
[HOST=test.server110.com]
open_basedir=/data/site/test.server110.com/:/tmp/
如上設(shè)置的意思是www.server110.com下的php措施被限制在open_basedir設(shè)置的兩個(gè)目次下,
不行以會(huì)見到其他目次。假如沒有做以上的設(shè)置,那么test.server110.com與www.server110.com的措施可以相互會(huì)見.
假如個(gè)中一個(gè)站點(diǎn)有裂痕被黑客植入了webshell,那么他可以通過這個(gè)站點(diǎn)拿下同一臺(tái)處事器的其他站點(diǎn),最后掛木馬.
[warning]留意:目次最后必然要加上/. 好比你寫/tmp,你的站點(diǎn)同時(shí)存在/tmp123等等以/tmp開頭的目次,那么黑客也可以會(huì)見到這些目次,別的, php5.3以上支持這個(gè)寫法,5.2不支持。[/warning]
2. 禁用不安詳PHP函數(shù)disable_functions = show_source,system,shell_exec,passthru,exec,popen,proc_open,proc_get_status,phpinfo
克制php執(zhí)行以上php函數(shù),以上php措施可以執(zhí)行l(wèi)inux呼吁, 好比可以執(zhí)行ping、netstat、mysql等等.假如你的系統(tǒng)有提權(quán)bug,效果你分明.
3. 存眷軟件安詳資訊努力存眷linux內(nèi)核、php安詳?shù)刃畔⒉?shí)時(shí)采納錯(cuò)誤
4. php用戶只讀這個(gè)要領(lǐng)是我最推崇的要領(lǐng),可是執(zhí)行之前必然要和php工程師磋商. 為什么?譬喻站點(diǎn)www.server110.com根目任命戶與組為nobody,而運(yùn)行php的用戶和組為phpuser。目次權(quán)限為755,文件權(quán)限為644. 如此,php為只讀,無法寫入任何文件到站點(diǎn)目次下。也就是說用戶不能上傳文件,縱然有裂痕, 黑客也傳不了后門, 更不行能掛木馬. 這么干之前奉告措施員將文件緩存改為nosql內(nèi)存緩存(譬喻memcached、redis等),上傳的文件通過接口傳到其他處事器(靜態(tài)處事器)。
[warning]備注:措施生成當(dāng)?shù)鼐彺媸莻€(gè)很是糟糕的習(xí)慣,利用文件緩存速度遲鈍、揮霍磁盤空間、最重要一點(diǎn)是一般環(huán)境下處事器無法橫向擴(kuò)展.[/warning]
5. 封鎖php錯(cuò)誤日志display_errors = On
改為
display_errors = Off
措施一旦呈現(xiàn)錯(cuò)誤,具體錯(cuò)誤信息便立即展示到用戶面前,,個(gè)中包括路徑、有的甚至是數(shù)據(jù)庫賬號暗碼. 注入滲透暗碼根基上都是通過這個(gè)報(bào)錯(cuò)來猜取。出產(chǎn)情況上強(qiáng)烈封鎖它
6. php上傳疏散將文件上傳到長途處事器,譬喻nfs等。雖然也可以挪用你們寫好的php接口. 縱然有上傳裂痕,那么文件也被傳到了靜態(tài)處事器上。木馬等文件基礎(chǔ)無法執(zhí)行.
舉個(gè)例子:
php站點(diǎn)www.server110.com,目次/data/site/www.server110.com
靜態(tài)文件站點(diǎn)static.server110.com,目次/data/site/static.server110.com
文件直接被傳到了/data/site/static.server110.com,上傳的文件無法通過www.server110.com來會(huì)見,只能利用static.server110.com會(huì)見,可是static.server110.com不支持php.
7. 封鎖php信息expose_php = On
改為
expose_php = Off
不等閑透露本身php版本信息,防備黑客針對這個(gè)版本的php動(dòng)員進(jìn)攻.
8. 克制動(dòng)態(tài)加載鏈接庫disable_dl = On;
改為
enable_dl = Off;
9. 禁用打開長途url
allow_url_fopen = On
改為
allow_url_fopen = Off
其實(shí)這點(diǎn)算不上真正的安詳, 并不會(huì)導(dǎo)致web被入侵等問題,可是這個(gè)很是影響機(jī)能, 筆者認(rèn)為它屬于狹義的安詳問題.
以下要領(lǐng)將無法獲取長途url內(nèi)容
$data = file_get_contents("http://www.baidu.com/");
以下要領(lǐng)可以獲取當(dāng)?shù)匚募?nèi)容
$data = file_get_contents("1.txt");
假如你的站點(diǎn)會(huì)見量不大、數(shù)據(jù)庫也運(yùn)行精采,可是web處事器負(fù)載出奇的高,請你直接查抄下是否有這個(gè)要領(lǐng)。筆者碰著過太多這個(gè)問題,今朝出產(chǎn)情況已全線禁用,假如php工程師需要獲取長途web的內(nèi)容,發(fā)起他們利用curl.
php curl如何利用請查察我之前的文章《PHP利用curl替代file_get_contents》,以及php下curl與file_get_contents機(jī)能比擬.
10.竣事本日lnmp站點(diǎn)的php安詳臨時(shí)講到這里,有問題后續(xù)將繼承增補(bǔ).