【轉】PHP網站(nginx、php-fpm、mysql) 使用者權限解析

來源:互聯網
上載者:User

標籤:service   tcp   bsp   apach   upload   color   使用者權限   讀寫   config   

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

先來做個說明:nginx本身不能處理PHP,它只是個web伺服器。當接收到用戶端請求後,如果是php請求,則轉寄給php解譯器處理,並把結果返回給用戶端。如果是靜態頁面的話,nginx自身處理,然後把結果返回給用戶端。

Nginx下php解譯器使用最多的就是fastcgi。一般情況nginx把php請求轉寄給fastcgi(即 php-fpm)管理進程處理,fastcgi管理進程選擇cgi子進程進行處理,然後把處理結果返回給nginx。

在這個過程中就牽涉到兩個使用者,一個是nginx啟動並執行使用者,一個是php-fpm啟動並執行使用者。如果訪問的是一個靜態檔案的話,則只需要nginx啟動並執行使用者對檔案具有讀許可權或者讀寫權限。

而如果訪問的是一個php檔案的話,則首先需要nginx啟動並執行使用者對檔案有讀取許可權,讀取到檔案後發現是一個php檔案,則轉寄給php-fpm,此時則需要php-fpm使用者對檔案具有有讀許可權或者讀寫權限。

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

ps aux|grep nginx

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

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

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

以上是nginx的運行使用者。

現在我們來查看下php-fpm的運行使用者,使用ps命令。如下:

ps aux |grep php-fpm

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

我們再來看看mysql資料庫運行在哪個使用者下面,使用ps命令查看。如下:

ps aux |grep mysql

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

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

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

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

在實際生產環境中,我們一般的配置是nginx與php-fpm都運行在nobody使用者下,而且網站的根目錄也要屬於nobody使用者,並且根目錄對nobody使用者具有所有許可權。

這樣配置是最安全的,因為nobody使用者最安全。即使駭客攻破了網站,但是也不能登入系統。

現在我們先不進行任何配置,使用各自的預設使用者發表一篇文章來看看實際的效果。

對於wordpress發表文章,我一般都是通過windows live writer這個部落格用戶端發表的。

我們現在還是通過這個用戶端來發表一篇只有文字沒有圖片的文章,如下:

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

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

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

為什麼帶有圖片的文章就不能發布呢?

其實這個問題很簡單,文章中的圖片需要先上傳到網站的根目錄下,然後才能正常訪問。現在php-fpm運行在apache使用者下,而問題是apache使用者對虛擬機器主機a.ilanni.com根目錄沒有存取權限,更沒有寫入許可權。

所以就會出現上述的問題,windows live writer不發行就緒帶有圖片的文章。

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

其實很簡單的,我們在前面都已經說了。nginx涉及到兩個使用者,一個是nginx啟動並執行使用者,一個是php-fpm啟動並執行使用者。如果訪問的是一個靜態檔案,則只需要nginx啟動並執行使用者對檔案具有讀取許可權。

而如果訪問的是一個php檔案,則首先需要nginx的運行使用者對檔案有讀取許可權,讀取到檔案後發現是一個php檔案,則轉寄給php-fpm,此時則需要php-fpm使用者對檔案具有讀取許可權。

我們現在需要做的就是統一 nginx 與 php-fpm 運行使用者為 nobody,然後把nginx的虛擬機器主機a.ilanni.com網站根目錄對nobody使用者及nobody使用者組具有所有許可權。

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

現在開始編輯該檔案,修改其啟動並執行使用者級使用者組。如下:

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

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

/etc/init.d/php-fpm restartps aux|grep php-fpm

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

php-fpm運行使用者修改完畢後,我們現在來修改虛擬機器主機的根目錄使用者及使用者組。如下:

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

虛擬機器主機a.ilanni.com根目錄所屬使用者及使用者組修改完畢後,也要注意修改nobody對虛擬機器主機a.ilanni.com根目錄的許可權。

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

以上許可權修改完畢後,我們再來通過windows live writer發布圖文文章。如下:

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

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

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

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

但是開發人員又要上傳代碼和修改相關的代碼,怎麼辦呢?

這個就需要結合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的使用者在系統都是虛擬使用者。

guest_username=nobody 表示虛擬使用者對應的系統使用者為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控制項目的目的。

 

 

摘自:http://ilanni.blog.51cto.com/526870/1561097

【轉】PHP網站(nginx、php-fpm、mysql) 使用者權限解析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.