設(shè)置安全的nginx+PHP網(wǎng)站目錄權(quán)限
基于linux系統(tǒng)的web服務(wù)器架構(gòu)聽說過很多年了,也用了好幾年,不過都是用現(xiàn)成的運行環(huán)境,比如虛擬主機、共用VPS。親手配置、把玩,我還是***回,初學(xué)過程的曲折在意料之中,反復(fù)折磨了兩三天,終于搞清楚一些linux基礎(chǔ)概念和nginx+php配置。今天主要記錄nginx+php環(huán)境下,原先理解的很混亂的網(wǎng)站目錄權(quán)限設(shè)置。
由于對linux文件權(quán)限的概念不清楚,遷移網(wǎng)站到VPS上時,擔(dān)心設(shè)置錯了影響網(wǎng)站安全,剛好之前一個網(wǎng)站被掛了馬,配置服務(wù)器時就特別在意這事了。
配置權(quán)限的原則是,在保證網(wǎng)站正常運行下,盡量給***權(quán)限。
我的配置:
1、nginx進(jìn)程用戶是默認(rèn)用戶wwwboy;(暫時還不知道nginx進(jìn)程用戶會對服務(wù)器什么地方的權(quán)限有影響,配置nginx好像都沒碰到權(quán)限設(shè)置問題)
2、php-fpm進(jìn)程用戶配置為wwwboy;
3、網(wǎng)站目錄所有者設(shè)置為ftpuser,由于需要在FTP中對網(wǎng)站文件進(jìn)行下載(讀取)、上傳(寫入),ftpuser肯定對網(wǎng)站目錄有讀寫權(quán)限。
關(guān)鍵點:php-fpm 子進(jìn)程所使用的用戶,不能是網(wǎng)站文件所有者。這里推薦一篇關(guān)于權(quán)限設(shè)置的文章《正確設(shè)置網(wǎng)站文件所有者 提高網(wǎng)站安全性 防止被掛木馬》,我就是讀完這篇文章才理解nginx、php-fpm、網(wǎng)站文件權(quán)限之間的關(guān)系以及如何設(shè)置才安全。
上面推薦的文章里也寫了,網(wǎng)站文件所有者和php-fpm進(jìn)程用戶設(shè)為不同的好處是在PHP程序中無法對網(wǎng)站文件進(jìn)行修改,這樣即使網(wǎng)站被掛馬了,也能降低很多損失,例如,對方無法在你的正常代碼里混入后門。
以前總習(xí)慣性地把緩存目錄權(quán)限設(shè)置為777,這回既然注意到安全問題,就想順便弄清楚一下緩存目錄怎么設(shè)置才正確合理并安全。其實,了解清楚linux文件權(quán)限分配方式,這個疑惑也就明朗了:
假設(shè)網(wǎng)站緩存目錄名為cache,其所有者為ftpuser。緩存文件是由php-fpm進(jìn)程執(zhí)行寫入,相當(dāng)于用戶wwwboy要在用戶ftpuser的目錄cache里寫文件,不被允許的!因此,要分配給wwwboy對cache目錄的寫權(quán)限,chmod o+w -R cache即可,如果ftpuser與wwwboy同一個用戶組,就chmod g+w -R cache。緩存目錄不需要執(zhí)行權(quán)限,所以以往設(shè)置777權(quán)限的做法相當(dāng)粗糙,不過在使用虛擬主機的時候,自己無法把握服務(wù)器上各種設(shè)置,777也是最便捷做法了。
[2013-3-25更新]:緩存目錄需要o+wx,添加x的原因是讀取目錄的時候需要執(zhí)行權(quán)限,否則文件是寫不成功的。除非要生成的文件和寫文件的腳本在同一個目錄內(nèi),不需要讀取目錄的權(quán)限,也就不需要執(zhí)行權(quán)限。原理:(此處感謝 @lanisle)
On a directory, the execute permission (also called the "search bit") allows
you to access files in the directory and enter it, with the cd command, for
example. However, note that although the execute bit lets you enter the
directory, you're not allowed to list its contents, unless you also have the
read permissions to that directory.
以上便是對nginx+php網(wǎng)站目錄權(quán)限安全設(shè)置的表述和理解,看起來像菜鳥基礎(chǔ)班的筆記。此外,以往我對開源的偉大魅力不以為然,學(xué)習(xí)使用linux幾天,開始有所體會。