国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 操作系統(tǒng) > 正文

【轉(zhuǎn)】正確設(shè)置php-fpm子進(jìn)程用戶,提高網(wǎng)站安全性防掛馬

2024-06-28 13:20:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
【轉(zhuǎn)】正確設(shè)置php-fpm子進(jìn)程用戶,提高網(wǎng)站安全性防掛馬 Posted on 2015-05-21 21:32 龍翔天下 閱讀(...) 評(píng)論(...) 編輯 收藏

原文地址:http://www.myhack58.com/Article/60/61/2013/37209.htm

根據(jù)生產(chǎn)環(huán)境不斷反饋,發(fā)現(xiàn)不斷有PHP網(wǎng)站被掛木馬,絕大部分原因是因?yàn)闄?quán)限設(shè)置不合理造成。因?yàn)榉?wù)器軟件,或是 php 程序中存在漏洞都是難免的,在這種情況下,如果能正確設(shè)置linux網(wǎng)站目錄權(quán)限, php 進(jìn)程權(quán)限,那么網(wǎng)站的安全性實(shí)際上是可以得到保障的。

那么,造成網(wǎng)站被掛木馬的原因是什么?

ftp 連接信息被破解,對(duì)這個(gè)原因,可行的辦法就是使用非常復(fù)雜的FTP 用戶名(不要使用常用的用戶名),如果是固定作業(yè),可考慮使用 iptables防火墻限制來(lái)源 IP 。但是一些情景下,可能需要使用 VPN 以便遠(yuǎn)程維護(hù)。 即網(wǎng)站維護(hù)者需要使用 FTP 修改網(wǎng)站文件時(shí),必須先登錄到 IDC 機(jī)房的 VPN 服務(wù)器上,再進(jìn)行后續(xù)的操作。

網(wǎng)站服務(wù)器軟件/ 配置 /php 程序存在漏洞,被利用,在討論這個(gè)問(wèn)題前,先說(shuō)明文件及進(jìn)程權(quán)限的幾個(gè)概念:

FTP用戶對(duì)網(wǎng)站目錄具有最大修改權(quán)限,那么網(wǎng)站的文件所有者一定屬于 FTP,  這是毋庸置疑的 , 否則如何修改文件呢?

php-fpm進(jìn)程,Nginx進(jìn)程對(duì)網(wǎng)站文件至少需要有讀取權(quán)限,例如,以下命令即可查看這兩個(gè)進(jìn)程所使用的賬號(hào):

php-fpm-security1

php-fpm-security2

通過(guò)上圖,我們可以發(fā)現(xiàn),nginx 和 php-fpm 子進(jìn)程賬號(hào)是 nobody 。

我們?cè)俨榭淳W(wǎng)站文件目錄的權(quán)限:

php-fpm-security3

發(fā)現(xiàn)網(wǎng)站文件所有者是www 賬號(hào),那說(shuō)明:

  • nginx和 php 對(duì)網(wǎng)站只有讀取權(quán)限,無(wú)寫(xiě)入權(quán)限
  • 如果php 程序需要對(duì)網(wǎng)站某些文件有寫(xiě)入權(quán)限,需要手工將文件或目錄權(quán)限修改為 777
  • 因?yàn)閜hp-fpm 子進(jìn)程是以 nobody 運(yùn)行,那么 php-fpm 生成的新文件所有者也是 nobody, 這時(shí) ftp 用戶將無(wú)法修改這些文件,解鈴還需系鈴人,當(dāng) php 生成文件后,需要調(diào)用 chmod(“/somedir/somefile”, 0777) 將文件權(quán)限修改為 777 ,以便 FTP 用戶也可以修改這個(gè)文件。
  • 經(jīng)常有開(kāi)發(fā)人員找我請(qǐng)求重設(shè)php 生成的文件的權(quán)限。
  • 如果php-fpm 子進(jìn)程以網(wǎng)站文件所有者用戶運(yùn)行,那意味著 php-fpm 進(jìn)程對(duì)整個(gè)網(wǎng)站目錄具有可寫(xiě)權(quán)限,噩夢(mèng)也就由此開(kāi)始。

但是我們發(fā)現(xiàn),有不少系統(tǒng)管理員為了省事,違背了Linux 最小化權(quán)限的原則,設(shè)置 php-fpm 進(jìn)程以網(wǎng)站文件所有者賬號(hào)運(yùn)行,當(dāng)然這樣可能會(huì)方便 php 開(kāi)發(fā)人員( php-fpm 進(jìn)程對(duì)整個(gè)網(wǎng)站目錄具有可寫(xiě)權(quán)限),但是這樣一來(lái), Linux 體系的文件系統(tǒng)權(quán)限原則將被打破,所有的安全措施將形同虛設(shè)。可以想象的是,萬(wàn)一 php 程序中有漏洞,攻擊者上傳木馬,便可以修改網(wǎng)站的所有文件,網(wǎng)站首頁(yè)被黑,也就不足為怪了。

退一步,如果我們?cè)O(shè)置了較嚴(yán)格的權(quán)限,就算php 程序中存在漏洞,那么攻擊者也只能篡改權(quán)限為 777 的目錄,其它的文件是無(wú)法被改寫(xiě)的,網(wǎng)站不就就得更安全了嗎?

核心總結(jié):php-fpm 子進(jìn)程所使用的用戶,不能是網(wǎng)站文件所有者。 凡是違背這個(gè)原則,則不符合最小權(quán)限原則。

經(jīng)過(guò)我參閱網(wǎng)上關(guān)于nginx, php-fpm 配置的文章教程和市面上的一些書(shū)籍,發(fā)現(xiàn)有不少人受這些文章的誤導(dǎo),直接讓 php-fpm 子進(jìn)程以網(wǎng)站所有者賬號(hào)運(yùn)行,例如張宴的《實(shí)戰(zhàn) nginx 取代 apache 的高性能 Web 服務(wù)器》一書(shū)的 52 頁(yè)中,存在以下設(shè)置:

www www

官方提供的配置文件中,php-fpm 子進(jìn)程使用 nobody 用戶,這完全是合理的,無(wú)須修改。

那么nginx 的子進(jìn)程用戶,如何設(shè)置合理?我的建議是也使用 nobody (對(duì)錯(cuò)誤日志寫(xiě)入等無(wú)影響),設(shè)置方法如下:

nginx.conf文件第一行設(shè)置為 user nobody; , 再執(zhí)行 nginx -s reload 即可。

php-fpm子進(jìn)程用戶設(shè)置方法:

編輯文件php-fpm.conf (一般位于 /usr/local/php/etc/php-fpm.conf 視安裝參數(shù)為準(zhǔn)),找到 user 、group 兩個(gè)參數(shù)的定義,將其設(shè)置為nobody( 默認(rèn)已經(jīng)是 nobody) ,再重啟 php-fpm 進(jìn)程即可。

網(wǎng)站可寫(xiě)目錄的特殊注意

這里的可寫(xiě),是相對(duì)php-fpm 子進(jìn)程而言。一個(gè)網(wǎng)站最容易出安全問(wèn)題的即是可寫(xiě)目錄,如果可寫(xiě)目錄權(quán)限能控制嚴(yán)格,安全系數(shù)也將大大提高。 我們認(rèn)為,一個(gè)網(wǎng)站可寫(xiě)目錄主要分為以下幾種:

  1. php 數(shù)據(jù)緩存目錄,如 discuz 的 forumdata 目錄,就存放了大量數(shù)據(jù)緩存文件。此類目錄一般會(huì)禁止用戶直接訪問(wèn),但是 discuz 在這個(gè)目錄下又存放了不少 js, CSS 文件,我們并不能簡(jiǎn)單地拒絕用戶訪問(wèn)這個(gè)目錄。顯然,這個(gè)目錄下的所有文件,不能直接交給 php 解析,我們后面會(huì)給出解決方案。
  2. 附件上傳目錄。顯然此類目錄需要開(kāi)啟訪問(wèn),但不能交由php 引擎解析(即這個(gè)目錄下的所有文件均視為普通靜態(tài)文件)。
  3. 靜態(tài)文件生成目錄,這類目錄下的文件全部應(yīng)視為靜態(tài)文件。
  4. 日志目錄, 一般都會(huì)拒絕用戶直接訪問(wèn)之。

也就是說(shuō)對(duì)網(wǎng)站開(kāi)發(fā)人員而言,需要對(duì)可寫(xiě)目錄實(shí)現(xiàn)動(dòng)靜分離,不同性能的文件,應(yīng)該區(qū)別對(duì)待之,這樣也就方便系統(tǒng)管理員,設(shè)置合理的nginx 規(guī)則,以提高安全性。

簡(jiǎn)單地去掉php 文件的執(zhí)行權(quán)限,并不能阻止 php-fpm 進(jìn)程解析之。

接下來(lái),根據(jù)以上總結(jié),系統(tǒng)管理員如何配置nginx 的目錄規(guī)則,才更安全呢?

數(shù)據(jù)緩存目錄 /cache/,這個(gè)目錄的特點(diǎn)是需要777 權(quán)限,無(wú)須提供給用戶訪問(wèn),那么可以按以下參考配置 nginx

location ~ “^/cache” {return 403;}location ~ “.php$” {fastcgi_pass 127.0.0.0:9000;………………..}

這時(shí),任何用戶將無(wú)法訪問(wèn)/cache/ 目錄內(nèi)容。

附件上傳目錄 attachments

此目錄的特點(diǎn)是需要開(kāi)放訪問(wèn)權(quán)限,但所有文件不能由php 引擎解析(包括后綴名改為 gif 的木馬文件)

location ~ “^/attachments” {}location ~ “.php$” {fastcgi_pass 127.0.0.0:9000;………………..}

注意,上面對(duì)attachments 目錄的 location 定義中是沒(méi)有任何語(yǔ)句的。 nginx 對(duì)正則表達(dá)式的 location 匹配優(yōu)先級(jí)最高,任何一個(gè)用正則表達(dá)式定義的 location, 只要匹配一次,將不會(huì)再匹配其它正則表達(dá)式定義的 location 。

現(xiàn)在,請(qǐng)?jiān)赼ttachments 目錄下建立一個(gè) php 腳本文件,再通過(guò)瀏覽器訪問(wèn)安,我們發(fā)現(xiàn)瀏覽器提示下載,這說(shuō)明 nginx 把 attachments 目錄下的文件當(dāng)成靜態(tài)文件處理,并沒(méi)有交給 php fastcgi 處理。這樣即使可寫(xiě)目錄被植入木馬,但因?yàn)槠錈o(wú)法被執(zhí)行,網(wǎng)站也就更安全了。

顯然,重要的php 配置文件,請(qǐng)勿放在此類目錄下。

靜態(tài)文件生成目錄 public

這些目錄一般都是php 生成的靜態(tài)頁(yè)的保存目錄,顯然與附件目錄有類似之處,按附件目錄的權(quán)限設(shè)置即可。可以預(yù)見(jiàn)的是,如果我們?cè)O(shè)置了較嚴(yán)格的權(quán)限,即使網(wǎng)站php 程序存在漏洞,木馬腳本也只能被寫(xiě)入到權(quán)限為 777 的目錄中去,如果配合上述嚴(yán)格的目錄權(quán)限控制,木馬也無(wú)法被觸發(fā)運(yùn)行,整個(gè)系統(tǒng)的安全性顯然會(huì)有顯著的提高。

但是網(wǎng)站可寫(xiě)目錄的作用及權(quán)限,只有開(kāi)發(fā)人員最為清楚。這方面需要php 開(kāi)發(fā)人員和系統(tǒng)管理員積極溝通。我們使用的方式是:項(xiàng)目上線前,開(kāi)發(fā)人員根據(jù)以文檔形式提供網(wǎng)站可寫(xiě)目錄的作用及權(quán)限,由系統(tǒng)管理員針對(duì)不同目錄進(jìn)行權(quán)限設(shè)置。任何一方修改了網(wǎng)站目錄權(quán)限,但未體現(xiàn)到文檔中,我們認(rèn)為是違反工作流程的。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 荥阳市| 亚东县| 鹤庆县| 桃园县| 荥经县| 商都县| 密云县| 隆昌县| 宜良县| 云林县| 新野县| 金华市| 云南省| 红安县| 南宁市| 奉节县| 石柱| 庆安县| 宜川县| 襄汾县| 平凉市| 襄樊市| 万宁市| 金秀| 凤凰县| 苍梧县| 波密县| 比如县| 久治县| 凤山市| 额敏县| 杭锦后旗| 奉贤区| 澳门| 岳池县| 灵寿县| 邮箱| 孟州市| 鹰潭市| 南岸区| 徐闻县|