2020-01-04

phpMyAdmin 出現 #2002 問題的解決方式

先說明一下,這篇不一定能解決你在使用 phpMyAdmin 時產生的 #2002 問題,因為你不一定跟我遇到這問題的系統環境及需求是一樣的。

前提說明:
因為我待的公司的負責處理網路和系統設定的單位的主管今年二月份要去渡蜜月,公司的高層因為我有網管和系統管理的經歷,希望我在該主管不在公司的期間暫代他處理公司網路、系統和公司有接的案子相關的系統上的設定操作。

剛好最近有個 case 的系統要在今年農曆過年前從在外面租用的空間移回該案子自己公司內的虛擬系統中,所以我組長和資訊部門主管就讓我進行這個移機的處理,測試看看我這方面的能力,還希望我在設定系統的過程記錄一下我的操作歷程和指令記錄,讓資訊部門主管檢閱。

系統環境:
虛擬機上的系統據我組長說已經先由資訊部門主管建置好了,所以我就負責系統上軟體的設定和防火牆的操作。

  • Ubuntu LTS 18.xx(忘了版號)
  • WEB + DB Server, 是分開的
  • WEB
    • Apache2, PHP, phpMyAdmin, mysql-client
  • DB
    • MariaDB (client, server)
    • 僅允許 WEB 連入 MariaDB Service, root
我其實沒怎麼碰過 Debian 的 Linux 系統,以前都是以 RHEL 的 CentOS, Fedora 為主,所以基礎指令是沒什麼差別,但就在防火牆(ufw-xxxx 的 chain 一大堆, webmin + csf 還是比較好用)和 apt 一開始卡了一下,不過也是還好。

其實在拿到這個移機的需求的第一天我就完成了 95% 了,最後在臨近下班時間就卡在 phpMyAdmin 一直無法登入到 DB Server 上。

但實際上我在 DB Server 上設定好 WEB → DB tcp: 3306 放行,也新增 DB User 及權限後,也特別到 WEB Server 上用 mysql -u xxxx -h DB-host -p 的方式來進行連線測試,是可以正常連線。

我也特別寫了一個 php pdo 的連線來測試,也是正常的。

但 phpMyAdmin 就是不行,就是一直出現「#2002 - No such file or directory The server is not responding (or the local server's socket is not correctly configured).」

" The server is not responding " - 我都用 mysql -u xxxx -h DB-host -p 的方式來測試過了,是正常。
" the local server's socket is not correctly configured " - firewall 什麼的都確定沒問題(因為 mysql -u .... 就 ok 呀),有想過是不是跟 RHEL 環境一樣還要開放 httpd_can_network_connect_db 之類的,但我寫 php pdo 連線又正常的。而且 Debian 核心的好像沒有 RHEL 的 SELinux…

所以問題就一定只是在 phpMyAdmin 上…

帶著這鬱悶的感覺先下班了!!

第二天要起床蹲廁所時腦子突然在想前一天的這個問題,然後靈光一閃的想到,我沒檢查 apache access, error 的記錄,搞不好是有什麼執行上的錯誤!!

到公司進行打掃工作與吃完早餐後,就開始進行檢查 apache access, error 的記錄,果然發現 phpMyAdmin 執行時會有以下三個檔案在權限上的警告:
  • /etc/phpmyadmin/config-db.php
  • /var/lib/phpmyadmin/blowfish_secret.php
  • /var/lib/phpmyadmin/config.inc.php
上述三個檔案都會出現「Check group www-data has read access and open_basedir restrictions」的警告訊息。

實際檢查權限後,這三個檔案都是「640 root.www-data」的,在設定上並沒錯…但有關權限,我當下就想到問題了所在了。

原因是因為 apache 的 daemon user, group 我改成了 WEB 上我公司的使用者身份(假設叫 xxxuser 好了)。

而我檢查了一下上述三個有權限問題的檔案,在 phpMyAdmin 的 /etc/phpmyadmin/config.inc.php 在一開始會在有條件的情況下分別載入,但因為 apache 啟動身分 xxxuser 的關係,不是 root 也不是與 www-data 同群組,所以也就載入異常,就讓 config.inc.php 執行失敗。

而 apache 的 daemon 會改用 xxxuser 的原因主要是因為公司用的帳號會上傳系統的網頁程式檔案,所以直接用 xxxuser 身分啟動也能免掉上傳後還要再改權限什麼的問題,而 daemon group 也是用 xxxuser 的 group 我也只是下意識的作法,就目前遇到的狀況,好像應該 daemon 應該要用 xxxuser.root 或 xxxuser.www-data 來啟動會比較好…但我選擇不是改 apache 的啟動身分,而是去改那三個檔案的權限。

會這樣改的理由是這次讓我設定這個移機的系統,事實上我並沒有取得詳細的相關資料,我組長只給我 WEB, DB 的 ip 資料,然後 xxxuser 的建立、DB user 的資料都是我再細問的結果,然後本來我以為這樣就夠了,然後 apache daemon 的啟動身分我還是因為想到之前有讓我幫忙處理其他案子的 server 的設定時有問到過相關的設定的關係。

所以,我就將上述的三個檔案權限改為「644 root.www-data」如此就能讓 phpMyAdmin 正常連線到 DB Server 了…

以上,結案!!

沒有留言: