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