通常情況下,我們執行web應用的伺服器有centos、ubuntu、debian等等的linux發行版本。這時候,構成服務架構所必須的nginx、php和mysql等應用的許可權控制就顯得非常重要,各個服務對**目錄的許可權要求各不相同,缺少某些許可權會造成服務無法讀寫或執行的錯誤,降低了許可權要求又會存在被入侵修改的隱患。這裡我們就來總結一下nginx、php-fpm和mysql等等這些服務的許可權劃分。
php的執行框架通常都是結合nginx組成lnmp或者結合apache組成lamp的架構,這裡用nginx作為例子講述一下nginx服務執行所需要的許可權。
我們知道,nginx本身不能解析php的語法,所以nginx對於靜態檔案(如html等)會直接解析返回結果,但是對於php的檔案,nginx會轉交給php的直譯器php-fpm進行處理,處理完後再返回響應給客戶端瀏覽器。
因此,我們**目錄下需要統一nginx和php的服務所需許可權。
①如果統一使用root使用者,則一般遊客賬戶無法訪問應用,而nginx配置成以root執行的話會存在很大的安全隱患,一旦被攻擊就會被獲取root身份進行系統的一切操作。
②而如果統一將**目錄許可權全部設定為rwxrwxrwx,則存在使用者直接通過瀏覽器修改**目錄的隱患。
所以最好的辦法就是統一歸類到乙個新的使用者組裡面,通過給該使用者組分配nginx和php執行必要的許可權,來實現對web應用的許可權目錄管理。通常情況下,許多團隊都會把這個使用者組取名www,由www使用者來統一管理**目錄許可權。
我們可以看到nginx的配置檔案nginix.conf裡面劃分的執行許可權就是配置到了www使用者下,因此nginx的子程序也是由www使用者執行,可以通過ps aux | grep nginx來檢視:
可以看到nginx的主程序是root,其餘子程序均是www的使用者
nginx.conf的配置:
同樣的,php的執行方式也是由主程序root執行,在子程序池(pool)裡面配置由www使用者執行,具體配置在php根目錄下的etc\php-fpm.conf下,新增兩行:
user = www
group = www
即可,同樣用ps aux | grep php可以檢視程序使用的使用者身份:
通過ps aux | grep mysql可以看到mysql服務是執行在mysql使用者下的,該服務只需要我們在php**連線mysql時帶上mysql的使用者名稱密碼即可,不需要統一為www,因為資料層需要與業務邏輯層隔離開,保證底層資料的安全。mysql的授權主要是在mysql服務內新增使用者和劃分許可權,用來控制php不同業務以不同許可權範圍的身份去連線,確保資料安全。
nginx配置:
user www www;
php-fpm:
user = www
group = www
**:
nginx php fpm負載均衡和效能測試
一直知道nginx本身能進行負載均衡,但沒有測試過,今天實驗了下,以下是筆記記錄 規劃3臺web伺服器,做負載均衡,由於之前已經有一台虛擬機器,因此我現在增加2臺.依次進行以下操作 1.e盤建立乙個servers目錄初始化vagrant init 2.配置檔案vagrantfile,增加了2臺虛擬機...
nginx php fpm負載均衡和效能測試
一直知道nginx本身能進行負載均衡,但沒有測試過,今天實驗了下,以下是筆記記錄 規劃3臺web伺服器,做負載均衡,由於之前已經有一台虛擬機器,因此我現在增加2臺.依次進行以下操作 1.e盤建立乙個servers目錄初始化vagrant init 2.配置檔案vagrantfile,增加了2臺虛擬機...
ThinkPHP函式詳解 M方法
thinkphp函式詳解 m方法 m方法用於例項化乙個基礎模型類,和d方法的區別在於 1 不需要自定義模型類,減少io載入,效能較好 2 例項化後只能呼叫基礎模型類 預設是model類 中的方法 3 可以在例項化的時候指定表字首 資料庫和資料庫的連線資訊 d方法的強大則體現在你封裝的自定義模型類有多...