準確設定 php-fpm子進程使用者 提高網站安全性 防止被掛木馬

來源:互聯網
上載者:User
正確設定 php-fpm子進程使用者 提高網站安全性 防止被掛木馬

核心總結:php-fpm子進程所使用的使用者,不能是網站檔案所有者。凡是違背這個原則,則不符合最小許可權原則。

?

根據生產環境不斷反饋,發現不斷有php網站被掛木馬,絕大部分原因是因為使用權限設定不合理造成。因為伺服器軟體,或是php程式中存在漏洞都是難免的,在這種情況下,如果能正確設定Linux網站目錄許可權,php進程許可權,那麼網站的安全性實際上是可以得到保障的。

?

那麼,造成網站被掛木馬的原因是什嗎?

?

1. ftp串連資訊被破解,對這個原因,可行的辦法就是使用非常複雜的FTP使用者名稱(不要使用常用的使用者名稱),如果是固定作業,可考慮使用iptables防火牆限制來源IP。但是一些情景下,可能需要使用VPN以便遠程維護。 即網站維護者需要使用FTP修改網站檔案時,必須先登入到IDC機房的VPN伺服器上,再進行後續的操作。

?

2. 網站伺服器軟體/配置/php程式存在漏洞,被利用
在討論這個問題前,先說明檔案及進程許可權的幾個概念:

A.?FTP使用者對網站目錄具有最大修改許可權,那麼網站的檔案所有者一定屬於FTP, 這是毋庸置疑的,?否則如何修改檔案呢?

B.?php-fpm進程,nginx進程對網站檔案至少需要有讀取許可權,例如,以下命令即可查看這兩個進程所使用的帳號:



通過,我們可以發現,nginx和php-fpm子進程帳號是nobody。

?

我們再查看網站檔案目錄的許可權:

發現網站檔案所有者是www帳號,那說明:

|?nginx和php對網站只有讀取許可權,無寫入許可權

l?如果php程式需要對網站某些檔案有寫入許可權,需要手工將檔案或目錄許可權修改為777

l?因為php-fpm子進程是以nobody運行,那麼php-fpm產生的新檔案所有者也是nobody,?這時ftp使用者將無法修改這些檔案,解鈴還需系鈴人,當php組建檔案後,需要調用chmod("/somedir/somefile",?0777)將檔案許可權修改為777,以便FTP使用者也可以修改這個檔案。

l?經常有開發人員找我請求重設php產生的檔案的許可權。

?

l?如果php-fpm子進程以網站檔案所有者使用者運行,那意味著php-fpm進程對整個網站目錄具有可寫入權限,噩夢也就由此開始。

?

但是我們發現,有不少系統管理員為了省事,違背了Linux最小化許可權的原則,設定php-fpm進程以網站檔案所有者帳號運行,當然這樣可能會方便php開發人員(php-fpm進程對整個網站目錄具有可寫入權限),但是這樣一來,Linux體系的檔案系統許可權原則將被打破,所有的安全措施將形同虛設。可以想象的是,萬一php程式中有漏洞,攻擊者上傳木馬,便可以修改網站的所有檔案,網站首頁被黑,也就不足為怪了。

?

退一步,如果我們設定了較嚴格的許可權,就算php程式中存在漏洞,那麼攻擊者也只能篡改許可權為777的目錄,其它的檔案是無法被改寫的,網站不就就得更安全了嗎?

?

核心總結:php-fpm子進程所使用的使用者,不能是網站檔案所有者。凡是違背這個原則,則不符合最小許可權原則。

?

經過我參閱網上關於nginx,?php-fpm配置的文章教程和市面上的一些書籍,發現有不少人受這些文章的誤導,直接讓php-fpm子進程以網站所有者帳號運行,例如張宴的《實戰nginx?取代apache的高效能Web伺服器》一書的52頁中,存在以下設定:

www

www


而在第50頁,設定網站檔案所有者也為www使用者:

chown?-R?www:www?/data0/htdocs/blog

顯然,此書的這部分內部,對初學者有誤導,針對這個問題,我已經向本書作者發郵件,希望其能在第二版中進行強調聲明,以免由於過度寬鬆的許可權配置,造成一些安全隱患。

?

官方提供的設定檔中,php-fpm子進程使用nobody使用者,這完全是合理的,無須修改。

?

那麼nginx的子進程使用者,如何設定合理? 我的建議是也使用nobody(對錯誤記錄檔寫入等無影響),設定方法如下:

nginx.conf檔案第一行設定為user????nobody;?,?再執行nginx?-s?reload即可。

?

php-fpm子進程使用者佈建方法:

編輯檔案php-fpm.conf(一般位於/usr/local/php/etc/php-fpm.conf,?視安裝參數為準),找到user、group兩個參數的定義,將其設定為nobody(預設已經是nobody),再重啟php-fpm進程即可。

?

?

網站可寫目錄的特殊注意

這裡的可寫,是相對php-fpm子進程而言。一個網站最容易出安全問題的即是可寫目錄,如果可寫目錄許可權能控制嚴格,安全係數也將大大提高。

我們認為,一個網站可寫目錄主要分為以下幾種:

1. php資料緩衝目錄,如discuz的forumdata目錄,就存放了大量資料快取檔案。此類目錄一般會禁止使用者直接存取,但是discuz在這個目錄下又存放了不少js,?css檔案,我們並不能簡單地拒絕使用者訪問這個目錄。顯然,這個目錄下的所有檔案,不能直接交給php解析,我們後面會給出解決方案。

2. 附件上傳目錄。顯然此類目錄需要開啟訪問,但不能交由php引擎解析(即這個目錄下的所有檔案均視為普通靜態檔案)。

3. 靜態檔案組建目錄,這類目錄下的檔案全部應視為靜態檔案。

4. 日誌目錄, 一般都會拒絕使用者直接存取之。

?

也就是說對網站開發人員而言,需要對可寫目錄實現動靜分離,不同效能的檔案,應該區別對待之,這樣也就方便系統管理員,設定合理的nginx規則,以提高安全性。

?

簡單地去掉php檔案的執行許可權,並不能阻止php-fpm進程解析之。

?

接下來,根據以上總結,系統管理員如何配置nginx的目錄規則,才更安全呢?

1. 資料緩衝目錄?/cache/
這個目錄的特點是需要777許可權,無須提供給使用者訪問,那麼可以按以下參考配置nginx

location?~?"^/cache"?{

return?403;

}

?

location?~?"\.php$"?{

fastcgi_pass?127.0.0.0:9000;

....................

}

?

這時,任何使用者將無法訪問/cache/目錄內容,即使

2. 附件上傳目錄?attachments

此目錄的特點是需要開放存取權限,但所有檔案不能由php引擎解析(包括尾碼名改為gif的木馬檔案)

location?~?"^/attachments"?{

?

}

?

location?~?"\.php$"?{

fastcgi_pass?127.0.0.0:9000;

....................

}

?

注意,上面對attachments目錄的location定義中是沒有任何語句的。nginx對Regex的location匹配優先順序最高,任何一個用Regex定義的location,?只要匹配一次,將不會再匹配其它Regex定義的location。

?

現在,請在attachments目錄下建立一個php指令檔,再通過瀏覽器訪問安,我們發現瀏覽器提示下載,這說明nginx把attachments目錄下的檔案當成靜態檔案處理,並沒有交給php?fastcgi處理。這樣即使可寫目錄被植入木馬,但因為其無法被執行,網站也就更安全了。

?

顯然,重要的php設定檔,請勿放在此類目錄下。

?

3. 靜態檔案組建目錄?public
這些目錄一般都是php產生的靜態頁的儲存目錄,顯然與附件目錄有類似之處,按附件目錄的使用權限設定即可。

可以預見的是,如果我們設定了較嚴格的許可權,即使網站php程式存在漏洞,木馬指令碼也只能被寫入到許可權為777的目錄中去,如果配合上述嚴格的目錄許可權控制,木馬也無法被觸發運行,整個系統的安全性顯然會有顯著的提高。

?

但是網站可寫目錄的作用及許可權,只有開發人員最為清楚。這方面需要php開發人員和系統管理員積極溝通。我們使用的方式是:項目上線前,開發人員根據以文檔形式提供網站可寫目錄的作用及許可權,由系統管理員針對不同目錄進行使用權限設定。任何一方修改了網站目錄許可權,但未體現到文檔中,我們認為是違反工作流程的。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.