1. 程式人生 > >詳解nginx、php-fpm和mysql用戶權限

詳解nginx、php-fpm和mysql用戶權限

最好 article 獲取 設置 .com 組成 例子 控制 amp

通常情況下,我們運行web應用的服務器有CentOS、Ubuntu、Debian等等的Linux發行版本。這時候,構成服務架構所必須的Nginx、php和MySQL等應用的權限控制就顯得非常重要,各個服務對代碼目錄的權限要求各不相同,缺少某些權限會造成服務無法讀寫或運行的錯誤,降低了權限要求又會存在被入侵修改的隱患。這裏我們就來總結一下nginx、php-fpm和mysql等等這些服務的權限劃分。

一、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來查看:

技術分享圖片

可以看到nginx的主進程是root,其余子進程均是www的用戶

nginx.conf的配置:

技術分享圖片

二、php的權限配置

同樣的,php的運行方式也是由主進程root運行,在子進程池(pool)裏面配置由www用戶執行,具體配置在php根目錄下的etc\php-fpm.conf下,添加兩行:
user = www
group = www
即可,同樣用ps aux | grep php可以查看進程使用的用戶身份:

技術分享圖片

三、MySQL服務的權限配置

通過ps aux | grep mysql可以看到MySQL服務是運行在mysql用戶下的,該服務只需要我們在php代碼連接mysql時帶上mysql的用戶名密碼即可,不需要統一為www,因為數據層需要與業務邏輯層隔離開,保證底層數據的安全。mysql的授權主要是在mysql服務內新增用戶和劃分權限,用來控制php不同業務以不同權限範圍的身份去連接,確保數據安全。

技術分享圖片

四、總結

nginx配置:
user www www;

php-fpm:
user = www
group = www

轉自:https://blog.csdn.net/dream_successor/article/details/78615825?locationNum=8&fps=1

詳解nginx、php-fpm和mysql用戶權限