在 cPanel 遇到 Failed to access DBM file 的解決方法

最近我的 cPanel 遇到一個很嚴重的問題,不知道為什麼所有的網站都會導入不正常的資料夾位置。可是這台主機並不是只有我在使用,因此我沒辦法掌握是不是其他使用者做了什麼變動而導致跳轉有問題。

查詢方法

第一步我就先去檢查了 .htaccess,因為通常遇到這個情況第一步都會懷疑是網頁跳轉的問題,所以就去檢查了 Apache 的設定檔,逛了一圈也把檔案移除做了測試,也都沒有讓系統正常。

下一步我就再去找了很多網站的設定檔,不過看起來都是沒有問題的完全找不出原因。

主要問題原因

之後我就懷疑說不定是 cPanel 自己更新造成了系統問題,所以就去查了 /usr/local/apache/logs/error_log,果然不出我所料看到了很多的 error log,而它的錯誤記錄如下

[Fri May 01 00:00:00.842179 2022] [:error] [pid 25393] [client 192.192.192.192:0] [client 192.192.192.192] ModSecurity: collections_remove_stale: Failed to access DBM file "/var/cpanel/secdatadir/shop-global": Permission denied [hostname "papafun.store"] [uri "/img/img01.jpg"] [unique_id "YodWs1BZ-GlNwB88nKpulgAAAAI"], referer: https://cpanel.store/
[Fri May 01 00:00:00.842215 2022] [:error] [pid 25393] [client 192.192.192.192:0] [client 192.192.192.192] ModSecurity: collections_remove_stale: Failed to access DBM file "/var/cpanel/secdatadir/shop-ip": Permission denied [hostname "papafun.store"] [uri "/img/img01.jpg"] [unique_id "YodWs1BZ-GlNwB88nKpulgAAAAI"], referer: https://cpanel.store/

解決方法(一)(不建議使用)

它主要問題是無法讀取 /var/cpanel/secdatadir/ 底下的檔案,有一種解法是把它的檔案權限從 640 改成 777 不過這樣在安全性上面會有問題,因此不太建議這樣改。

[root@127-0-0-1 secdatadir]# ls -all
total 16
drwxrwx--T.   2 root   nobody   98 May 20 22:00 .
drwx--x--x. 116 root   root   8192 May 20 23:25 ..
-rw-r-----.   1 nobody nobody    0 May 20 22:00 nobody-global.dir
-rw-r-----.   1 nobody nobody    0 May 20 22:00 nobody-global.pag
-rw-r-----.   1 nobody nobody    0 May 20 22:00 nobody-ip.dir
-rw-r-----.   1 nobody nobody 1024 May 20 22:26 nobody-ip.pag

解決方法(二)(建議使用)

另一個解法比較建議使用,是把原本使用的 mod_ruid2 模組修改成使用 mod_suexec 模組,它們是相容的模組因此可以修改使用。mod_ruid2 的功能是用來處理 client 端發送的 request,分別讓它以對應的系統使用者執行,因為使用對應的系統使用者處理可以預防程式有漏洞的時候不會造成多網站互相關聯影響網站。

它的解決方法很簡單首先打開 WHM 後台

  • 1. 點選左邊的 Software -> EasyApache4
  • 2. 點選右邊的 Customiza
  • 3. 點選左邊的 Apache Modules 搜尋 mod_ruid2 把它 uninstall
  • 4. 改為搜尋 mod_suexec 把它 install
  • 5. 都處裡好之後直接點選左邊的 Review
  • 6. 確定後就讓它跑一下,出現 Done 就代表成功了

以上都處理完後應該就會看到你的網站正常,並且不會出現錯誤了。

參考資料