一般狀況下,咱們運行web應用的服務器有CentOS、Ubuntu、Debian等等的Linux發行版本。這時候,構成服務架構所必須的Nginx、php和MySQL等應用的權限控制就顯得很是重要,各個服務對代碼目錄的權限要求各不相同,缺乏某些權限會形成服務沒法讀寫或運行的錯誤,下降了權限要求又會存在被入侵修改的隱患。這裏咱們就來總結一下nginx、php-fpm和mysql等等這些服務的權限劃分。php
1、web服務器Nginx權限
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來查看:mysql
能夠看到nginx的主進程是root,其他子進程均是www的用戶nginx
nginx.conf的配置:web
2、php的權限配置
一樣的,php的運行方式也是由主進程root運行,在子進程池(pool)裏面配置由www用戶執行,具體配置在php根目錄下的etc\php-fpm.conf下,添加兩行:
user = www
group = www
便可,一樣用ps aux | grep php能夠查看進程使用的用戶身份:sql
3、MySQL服務的權限配置
經過ps aux | grep mysql能夠看到MySQL服務是運行在mysql用戶下的,該服務只須要咱們在php代碼鏈接mysql時帶上mysql的用戶名密碼便可,不須要統一爲www,由於數據層須要與業務邏輯層隔離開,保證底層數據的安全。mysql的受權主要是在mysql服務內新增用戶和劃分權限,用來控制php不一樣業務以不一樣權限範圍的身份去鏈接,確保數據安全。瀏覽器
4、總結
nginx配置:
user www www;
php-fpm:
user = www
group = www安全
轉自:https://blog.csdn.net/dream_successor/article/details/78615825?locationNum=8&fps=1服務器