国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Nginx > 正文

爛泥:nginx、php-fpm、mysql用戶權限解析

2024-08-30 12:27:37
字體:
來源:轉載
供稿:網(wǎng)友
爛泥:nginx、php-fpm、MySQL用戶權限解析

本文首發(fā)于爛泥行天下

前幾天學習了,在nginx下搭建WordPRess博客。在《爛泥:使用nginx利用虛擬主機搭建WordPress博客》文章中,我們特別提到了有關程序運行在哪個用戶下面。

這篇文章我們就特別來講解下,nginx、php-fpm以及mysql運行在各個用戶下的配置。

先來做個說明:nginx本身不能處理PHP,它只是個web服務器。當接收到客戶端請求后,如果是php請求,則轉發(fā)給php解釋器處理,并把結果返回給客戶端。如果是靜態(tài)頁面的話,nginx自身處理,然后把結果返回給客戶端。

Nginx下php解釋器使用最多的就是fastcgi。一般情況nginx把php請求轉發(fā)給fastcgi管理進程處理,fastcgi管理進程選擇cgi子進程進行處理,然后把處理結果返回給nginx。

在這個過程中就牽涉到兩個用戶,一個是nginx運行的用戶,一個是php-fpm運行的用戶。如果訪問的是一個靜態(tài)文件的話,則只需要nginx運行的用戶對文件具有讀權限或者讀寫權限。

而如果訪問的是一個php文件的話,則首先需要nginx運行的用戶對文件有讀取權限,讀取到文件后發(fā)現(xiàn)是一個php文件,則轉發(fā)給php-fpm,此時則需要php-fpm用戶對文件具有有讀權限或者讀寫權限。

首先,我們來查看nginx運行在什么用戶下。使用ps命令進行查看,如下:

ps aux|grep nginx

clip_image001

通過上圖我們可以很明顯的看到nginx的父進程是運行在root用戶下的,而子進程時運行在nobody用戶下,而且只有一個子進程。這個和我們在nginx的配置文件中,配置的一致。如下:

more /usr/local/nginx/conf/nginx.conf

clip_image002

注意:nginx如果沒有配置運行用戶的話,默認是使用nobody用戶運行。使用nobody運行nginx安全性是比較高的。

以上是nginx的運行用戶。

現(xiàn)在我們來查看下php-fpm的運行用戶,使用ps命令。如下:

ps aux |grep php-fpm

clip_image003

通過上圖,我們可以看到php-fpm的父進程運行在root用戶下,而子進程全部運行在apache用戶下。

我們再來看看mysql數(shù)據(jù)庫運行在哪個用戶下面,使用ps命令查看。如下:

ps aux |grep mysql

clip_image004

通過上圖我們可以看到,mysql運行在mysql用戶下,而且其PID確實和保存在/var/run/mysqld/mysqld.pid中的一樣。

以上就是nginx、php-fpm、mysql的運行在各個用戶下的情況。

我們來開始測試實際生產環(huán)境中的配置,在《爛泥:使用nginx利用虛擬主機搭建WordPress博客》文章中我們已經配置好了,虛擬主機a.ilanni.com。如下:

clip_image005

我們來看看a.ilanni.com虛擬主機根目錄的所屬用戶及用戶組,如下:

clip_image006

在實際生產環(huán)境中,我們一般的配置是nginx與php-fpm都運行在nobody用戶下,而且網(wǎng)站的根目錄也要屬于nobody用戶,并且根目錄對nobody用戶具有所有權限。

這樣配置是最安全的,因為nobody用戶最安全。即使黑客攻破了網(wǎng)站,但是也不能登錄系統(tǒng)。

現(xiàn)在我們先不進行任何配置,使用各自的默認用戶發(fā)表一篇文章來看看實際的效果。

對于wordpress發(fā)表文章,我一般都是通過windows live writer這個博客客戶端發(fā)表的。

我們現(xiàn)在還是通過這個客戶端來發(fā)表一篇只有文字沒有圖片的文章,如下:

clip_image007

clip_image008

通過上圖,我們可以很明顯的看到,這篇測試文字的文章已經成功發(fā)布。

接下來我們再來測試一篇圖文并茂的文章,如下:

clip_image009

clip_image010

通過上圖,我們可以看到帶有圖片的文章是沒有辦法發(fā)布的。windows live writer已經提示出錯。

為什么帶有圖片的文章就不能發(fā)布呢?

其實這個問題很簡單,文章中的圖片需要先上傳到網(wǎng)站的根目錄下,然后才能正常訪問。現(xiàn)在php-fpm運行在apache用戶下,而問題是apache用戶對虛擬主機a.ilanni.com根目錄沒有訪問權限,更沒有寫入權限。

所以就會出現(xiàn)上述的問題,windows live writer不可以發(fā)布帶有圖片的文章。

那么如何解決這個問題呢?

其實很簡單的,我們在前面都已經說了。nginx涉及到兩個用戶,一個是nginx運行的用戶,一個是php-fpm運行的用戶。如果訪問的是一個靜態(tài)文件,則只需要nginx運行的用戶對文件具有讀取權限。

而如果訪問的是一個php文件,則首先需要nginx的運行用戶對文件有讀取權限,讀取到文件后發(fā)現(xiàn)是一個php文件,則轉發(fā)給php-fpm,此時則需要php-fpm用戶對文件具有讀取權限。

我們現(xiàn)在需要做的就是統(tǒng)一naginx與php-fpm運行用戶為nobody,然后把nginx的虛擬主機a.ilanni.com網(wǎng)站根目錄對nobody用戶及nobody用戶組具有所有權限。

nginx已經運行在nobody用戶下,我們就不進行調整了。我們來調整php-fpm運行用戶,php-fpm我們是通過yum方式進行安裝的。而且使用的還是默認配置,該配置文件為/etc/php-fpm.d/www.conf。

現(xiàn)在開始編輯該文件,修改其運行的用戶級用戶組。如下:

vi /etc/php-fpm.d/www.conf

clip_image011

編輯完畢后,重啟php-fpm。如下:

/etc/init.d/php-fpm restart

ps aux|grep php-fpm

clip_image012

通過上圖,我們可以看到目前php-fpm已經運行在nobody用戶。

php-fpm運行用戶修改完畢后,我們現(xiàn)在來修改虛擬主機的根目錄用戶及用戶組。如下:

chown nobody:nobody -R a.ilanni.com/

clip_image013

虛擬主機a.ilanni.com根目錄所屬用戶及用戶組修改完畢后,也要注意修改nobody對虛擬主機a.ilanni.com根目錄的權限。

通過上圖我們可以看到,目前nobody用戶已經對虛擬主機a.ilanni.com根目錄已經具有控制權限。

以上權限修改完畢后,我們再來通過windows live writer發(fā)布圖文文章。如下:

clip_image014

通過上圖,我們可以看到。該文圖文章已經被成功的發(fā)布到wordpress中。我們再來看下,wordpress中的圖片存放位置。

ll /ilanni/a.ilanni.com/wp-content/uploads/2014/09

clip_image015

以上就是nginx、php-fpm、mysql在實際使用過程中用戶的配置。按理說,文章到這我們就應該結束了。

但是為了更能和我們的實際生產環(huán)境相結合,我們來延伸下。如果說我們現(xiàn)在這個wordpress是一個項目,該項目正在開發(fā)。而開發(fā)人員我們是沒有在linux系統(tǒng)中開通相關賬戶的,只開通了一個FTP賬戶。

但是開發(fā)人員又要上傳代碼和修改相關的代碼,怎么辦呢?

這個就需要結合Vsftpd虛擬名用戶來進行設置。有關這方面的資料,可以參考我以前的文章《爛泥:vsftpd虛擬用戶與匿名用戶配合使用》。

先來安裝vsftpd,使用yum方式。安裝完畢后,我們就來配置vsftpd。

具體配置后的文件內容如下:

vi /etc/vsftpd/vsftpd.conf

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

idle_session_timeout=600

ftpd_banner=http.

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

listen=YES

listen_port=2121

pasv_min_port=6000

pasv_max_port=6150

userlist_enable=YES

tcp_wrappers=YES

guest_enable=YES

guest_username=nobody

pam_service_name=vsftpd

user_config_dir=/etc/vsftpd/vu_conf

virtual_use_local_privs=yes

其中guest_enable=YES表示啟用vsftpd虛擬用戶,就是所有登錄到FTP的用戶在系統(tǒng)都是虛擬用戶。

guest_username=nobody表示虛擬用戶對應的系統(tǒng)用戶為nobody用戶。

virtual_use_local_privs=yes表示啟用vsftpd虛擬用戶,并且虛擬用戶和本地用戶有相同的權限。

pam_service_name=vsftpd啟用vsftpd驗證。

然后再配置vsftpd虛擬用戶的目錄,如下:

vi vu_conf/ilanni

local_root= /ilanni/a.ilanni.com

通過上述配置后vsftpd的虛擬用戶ilanni,就已經對nginx的虛擬主機a.ilanni.com根目錄具有完全控制權限。

從而也就達到了通過vsftpd控制項目的目的。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 滨海县| 丁青县| 深州市| 张家界市| 江孜县| 潜山县| 永年县| 长白| 濮阳县| 温泉县| 普陀区| 板桥市| 黑龙江省| 施甸县| 巨野县| 盐池县| 申扎县| 望江县| 三江| 随州市| 分宜县| 依安县| 西贡区| 县级市| 洛川县| 灵台县| 炎陵县| 康定县| 荔波县| 昌平区| 东海县| 文登市| 安顺市| 乃东县| 荔波县| 临猗县| 阿克| 咸阳市| 博野县| 贵港市| 林西县|