0x00 測(cè)試環(huán)境

把持系統(tǒng):CentOS6.5
Web辦事器:Nginx1.4.6
Php版本:Php5.4.26
0x01 Nginx介紹
nginx本身不克不及措置PHP,它只是個(gè)web辦事器,當(dāng)領(lǐng)遭到要求后,假定是php要求,則發(fā)給php詮釋器措置,并把成果返回給客戶端。nginx通常為把要求發(fā)fastcgi治理過(guò)程措置,fastcgi治理過(guò)程選擇cgi子過(guò)程措置成果并返回被nginx。
nginx觸及到兩個(gè)賬戶,一個(gè)是nginx的運(yùn)行賬戶,一個(gè)是php-fpm的運(yùn)行賬戶。假定拜候的是一個(gè)靜態(tài)文件,則只需要nginx的運(yùn)行賬戶對(duì)文件具有讀取權(quán)限;而假定拜候的是一個(gè)php文件,則起首需要nginx的運(yùn)行賬戶對(duì)文件有讀取權(quán)限,讀取到文件后發(fā)現(xiàn)是一個(gè)php文件,則轉(zhuǎn)發(fā)給php-fpm,此時(shí)則需要php-fpm賬戶對(duì)文件具有讀取權(quán)限。
0x02 研究發(fā)現(xiàn)的結(jié)論
1. linux下,要讀取一個(gè)文件,起首需要具有對(duì)文件地點(diǎn)文件夾的履行權(quán)限,然后需要對(duì)文件的讀取權(quán)限。
2. php文件的履行不需要文件的履行權(quán)限,只需要nginx和php-fpm運(yùn)行賬戶的讀取權(quán)限。
3. 上傳木馬后,能不克不及列出一個(gè)文件夾的內(nèi)容,跟php-fpm的運(yùn)行賬戶對(duì)文件夾的讀取權(quán)限有關(guān)。
4. 木馬履行號(hào)令的權(quán)限跟php-fpm的賬戶權(quán)限有關(guān)。
5. 假定木馬要履行號(hào)令,需要php-fpm的賬戶對(duì)響應(yīng)的sh有履行權(quán)限。
6. 要讀取一個(gè)文件夾內(nèi)的文件,是不需要對(duì)文件夾有讀取權(quán)限的,只需要對(duì)文件夾有履行權(quán)限。
0x03 Nginx辦事器觸及到的安然建設(shè)
1. Nginx.conf的建設(shè)
2. php-fpm.conf的建設(shè)
3. nginx和php-fpm的運(yùn)行賬戶對(duì)磁盤的權(quán)限建設(shè)
4. Php.ini的建設(shè)
0x04 常見需要建設(shè)的把持編制
1. 避免一個(gè)目次的拜候
示例:避免拜候path目次
location ^~ /path {
deny all;
}
可以把path換成實(shí)際需要的目次,目次path后是不是帶有"/",帶"/"只避免拜候目次,不帶"/"避免拜候目次中的文件;寄望要放在fastcgi建設(shè)之前。
2. 避免php文件的拜候及履行
示例:往掉落單個(gè)目次的PHP履行權(quán)限
location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}
示例:往掉落多個(gè)目次的PHP履行權(quán)限
location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}
3. 避免IP的拜候
示例:避免IP段的寫法:
deny 10.0.0.0/24;
示例:只承諾某個(gè)IP或某個(gè)IP段用戶拜候,其它的用戶全都避免
allow
x.x.x.x;
allow 10.0.0.0/24;
deny all;
0x05 需要解決的常見標(biāo)題問(wèn)題
1. 讓木頓時(shí)傳后不克不及履行
針對(duì)上傳目次,在nginx建設(shè)文件中加進(jìn)建設(shè),使此目次沒法解析php。
2. 讓木馬履行后看不到非網(wǎng)站目次文件
打消php-fpm運(yùn)行賬戶對(duì)其他目次的讀取權(quán)限。
3. 木馬履行后號(hào)令不克不及履行
打消php-fpm賬戶對(duì)sh的履行權(quán)限。
4. 號(hào)令履行后權(quán)限不克不及太高
Php-fpm賬戶不要用root或加進(jìn)root組。
nginx本身不克不及措置PHP,它只是個(gè)web辦事器,當(dāng)領(lǐng)遭到要求后,假定是php要求,則發(fā)給php詮釋器措置,并把成果返回給客戶端。nginx通常為把要求發(fā)fastcgi治理過(guò)程措置,fastcgi治理過(guò)程選擇cgi子過(guò)程措置成果并返回被nginx。
0x06 Nginx安然建設(shè)方案
1. 點(diǎn)竄網(wǎng)站目次所有者為非php-fpm運(yùn)行賬戶,此處點(diǎn)竄所有者為root。
號(hào)令:
chown -R root:root html/
2. 點(diǎn)竄nginx及php-fpm的運(yùn)行賬戶及組為nobody
nginx.conf
Php-fpm.conf
3. 打消nobody對(duì)所有目次的的讀取權(quán)限,然后添加對(duì)網(wǎng)站目次的讀取權(quán)限
號(hào)令:
chmod o-r –R /
chmod o+r –R html/
4. 打消nobody對(duì)/bin/sh 的履行權(quán)限
chmod 776 /bin/sh
5. 確認(rèn)網(wǎng)站目次對(duì)nobody的權(quán)限為可讀可履行,對(duì)網(wǎng)站文件的權(quán)限為可讀
6. 對(duì)上傳目次或?qū)戇M(jìn)寫文件的目次添加nobody的寫進(jìn)權(quán)限
7. 建設(shè)nginx.conf 對(duì)上傳目次無(wú)php的履行權(quán)限
8. 建設(shè)nginx.conf避免拜候的文件夾,如后臺(tái),或限制拜候ip
9. 建設(shè)nginx.conf避免拜候的文件類型,如一些txt日記文件