基于linux系統的web服務器架構聽說過很多年了,也用了好幾年,不過都是用現成的運行環境,比如虛擬主機、共用VPS。親手配置、把玩,我還是第一回,初學過程的曲折在意料之中,反復折磨了兩三天,終于搞清楚一些linux基礎概念和nginx+php配置。今天主要記錄nginx+php環境下,原先理解的很混亂的網站目錄權限設置。
由于對linux文件權限的概念不清楚,遷移網站到VPS上時,擔心設置錯了影響網站安全,剛好之前一個網站被掛了馬,配置服務器時就特別在意這事了。
配置權限的原則是,在保證網站正常運行下,盡量給最低權限。
我的配置:
1、nginx進程用戶是默認用戶wwwboy;(暫時還不知道nginx進程用戶會對服務器什么地方的權限有影響,配置nginx好像都沒碰到權限設置問題)
2、php-fpm 進 程 用 戶 配 置 為wwwboy;
3、網站目錄所有者設置為ftpuser,由于需要在FTP中對網站文件進行下載(讀取)、上傳(寫入),ftpuser肯定對網站目錄有讀寫權限。
關鍵點:php-fpm 子進程所使用的用戶,不能是網站文件所有者。網站文件所有者和php-fpm 進程用戶設為不同的好處是在PHP程序中無法對網站文件進行修改,這樣即使網站被掛馬了,也能降低很多損失,例如,對方無法在你的正常代碼里混入后門。
以前總習慣性地把緩存目錄權限設置為777,這回既然注意到安全問題,就想順便弄清楚一下緩存目錄怎么設置才正確合理并安全。其實,了解清楚linux文件權限分配方式,這個疑惑也就明朗了:
假設網站緩存目錄名為cache,其所有者為ftpuser。緩存文件是由php-fpm 進程執行寫入,相當于用戶wwwboy要在用戶ftpuser的目錄cache里寫文件,不被允許的!因此,要分配給wwwboy對cache目錄的寫權限,chmod o+w -R cache即可,如果ftpuser與wwwboy同一個 用 戶 組, 就 chmod g+w -R cache。緩存目錄不需要執行權限,所以以往設置777權限的做法相當粗糙,不過在使用虛擬主機的時候,自己無法把握服務器上各種設置,777也是最便捷做法了。
緩存目錄需要o+w x,添加x的原因是讀取目錄的時候需要執行權限,否則文件是寫不成功的。除非要生成的文件和寫文件的腳本在同一個目錄內,不需要讀取目錄的權限, 也就不需要執行權限。