前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。
介紹
像 MySQL 這樣的關系型數據庫管理系統在許多網站和應用程序中都是必不可少的。然而,并非所有用戶都習慣通過命令行來管理他們的數據。
為了解決這個問題,創建了一個名為 phpMyAdmin 的項目,旨在提供一個基于 web 的管理界面作為替代方案。在本指南中,我們將演示如何在 Ubuntu 14.04 服務器上安裝和保護 phpMyAdmin 配置。我們將在 Nginx web 服務器上構建此設置,Nginx 具有良好的性能特性,可以比其他一些 web 服務器更好地處理大量負載。
先決條件
在開始之前,有幾個要求需要解決。
為了確保您有一個堅實的基礎來構建這個系統,您應該先運行我們的 Ubuntu 14.04 初始服務器設置指南。其中,這將指導您設置一個具有 sudo
訪問權限的非根用戶,用于管理命令。
在開始本指南之前,必須滿足的第二個先決條件是在 Ubuntu 14.04 服務器上安裝 LEMP(Linux、Nginx、MySQL 和 PHP)堆棧。這是我們將用來提供 phpMyAdmin 界面的平臺(MySQL 也是我們希望管理的數據庫管理軟件)。如果您的服務器上還沒有 LEMP 安裝,請按照我們的 Ubuntu 14.04 上安裝 LEMP 的教程進行操作。
當您的服務器在按照這些指南后處于正常運行狀態時,您可以繼續閱讀本頁的其余部分。
步驟一 — 安裝 phpMyAdmin
在我們已經準備好 LEMP 平臺的情況下,我們可以立即開始安裝 phpMyAdmin 軟件。這在 Ubuntu 的默認存儲庫中可用,因此安裝過程很簡單。
首先,更新服務器的本地軟件包索引,以確保它具有最新的可用軟件包的引用。然后,我們可以使用 apt
包工具從存儲庫中獲取軟件并在我們的系統上安裝它:
sudo apt-get update
sudo apt-get install phpmyadmin
在安裝過程中,將提示您輸入一些信息。它將詢問您希望軟件自動配置哪個 web 服務器。由于我們使用的 Nginx 不是可用選項之一,您可以按 TAB 鍵跳過此提示。
接下來的提示將詢問您是否希望 dbconfig-common
配置一個數據庫供 phpmyadmin 使用。選擇 “Yes” 繼續。
您需要輸入在 MySQL 安裝期間配置的數據庫管理密碼,以允許這些更改。之后,您將被要求選擇并確認一個新數據庫的密碼,用于保存 phpMyAdmin 自己的數據。
安裝現在將完成。為了使 Nginx web 服務器能夠正確找到并提供 phpMyAdmin 文件,我們只需要通過輸入以下內容在安裝文件和我們的 Nginx 文檔根目錄之間創建一個符號鏈接:
sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html
我們需要處理的最后一件事是啟用 mcrypt
PHP 模塊,phpMyAdmin 依賴于它。這是隨 phpMyAdmin 一起安裝的,因此我們只需要切換它并重新啟動我們的 PHP 處理器:
sudo php5enmod mcrypt
sudo service php5-fpm restart
通過這樣,我們的 phpMyAdmin 安裝現在已經可用。要訪問界面,請在您的 Web 瀏覽器中輸入服務器的域名或公共 IP 地址,后面加上 /phpmyadmin
:
http://server_domain_or_IP/phpmyadmin
!phpMyAdmin 登錄界面
要登錄,請使用有效的 MySQL 用戶的用戶名/密碼對。root
用戶和 MySQL 管理密碼是一個不錯的選擇。然后,您將能夠訪問管理界面:
!phpMyAdmin 管理界面
點擊周圍以熟悉界面。在下一節中,我們將采取措施來保護我們的新界面。
步驟二 — 保護您的 phpMyAdmin 實例
我們服務器上安裝的 phpMyAdmin 實例此時應該是完全可用的。然而,通過安裝一個 web 界面,我們已經將我們的 MySQL 系統暴露給了外部世界。
即使包含了身份驗證屏幕,這也是一個相當大的問題。由于 phpMyAdmin 的流行程度以及它提供訪問的大量數據,這樣的安裝是攻擊者的常見目標。
我們將實施兩種簡單的策略來減少我們的安裝被攻擊和 compromise 的機會。我們將把界面的位置從 /phpmyadmin
更改為其他位置,以規避一些自動化的機器人暴力嘗試。我們還將創建一個額外的、基于 web 服務器級別的身份驗證網關,必須通過它才能到達 phpMyAdmin 登錄界面。
更改應用程序的訪問位置
為了使我們的 Nginx web 服務器能夠找到并提供我們的 phpMyAdmin 文件,我們在之前的步驟中創建了一個符號鏈接,將 phpMyAdmin 目錄鏈接到我們的文檔根目錄。
要更改我們的 phpMyAdmin 接口可以訪問的 URL,我們只需要重命名符號鏈接。進入 Nginx 文檔根目錄以更好地了解我們正在做什么:
cd /usr/share/nginx/html
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar 4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar 4 06:46 index.html
lrwxrwxrwx 1 root root 21 Aug 6 10:50 phpmyadmin -> /usr/share/phpmyadmin
如您所見,我們在此目錄中有一個名為 phpmyadmin
的符號鏈接。我們可以將此鏈接名稱更改為任何我們想要的名稱。這將更改可以從瀏覽器訪問 phpMyAdmin 的位置,有助于隱藏硬編碼機器人的訪問點。
選擇一個不指示位置用途的名稱。在本指南中,我們將命名我們的訪問位置為 /nothingtosee
。為此,我們只需重命名鏈接:
sudo mv phpmyadmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar 4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar 4 06:46 index.html
lrwxrwxrwx 1 root root 21 Aug 6 10:50 nothingtosee -> /usr/share/phpmyadmin
現在,如果您訪問以前的 phpMyAdmin 安裝位置,您將收到 404 錯誤:
http://server_domain_or_IP/phpmyadmin
!phpMyAdmin 404 錯誤
但是,您的 phpMyAdmin 接口將在我們選擇的新位置上可用:
http://server_domain_or_IP/nothingtosee
!phpMyAdmin 登錄界面
設置 Web 服務器身份驗證門
我們安裝中想要的下一個功能是,用戶在看到 phpMyAdmin 登錄界面之前需要通過的身份驗證提示。
幸運的是,大多數 Web 服務器,包括 Nginx,在本機提供此功能。我們只需要修改我們的 Nginx 配置文件以添加細節。
在我們這樣做之前,我們將創建一個密碼文件,用于存儲我們的身份驗證憑據。Nginx 要求使用 crypt()
函數加密密碼。OpenSSL 套件,應該已經安裝在您的服務器上,包括此功能。
要創建加密密碼,請輸入:
openssl passwd
然后您將被提示輸入并確認您希望使用的密碼。然后實用程序將顯示密碼的加密版本,看起來類似于:
O5az.RSPzd.HE
復制此值,因為您將需要將其粘貼到我們將要創建的身份驗證文件中。
現在,創建一個身份驗證文件。我們將稱此文件為 pma_pass
并將其放在 Nginx 配置目錄中:
sudo nano /etc/nginx/pma_pass
在此文件中,您只需要指定您想要使用的用戶名,后跟一個冒號(:),后跟您從 openssl passwd
實用程序中收到的密碼的加密版本。
我們將命名我們的用戶為 demo
,但您應該選擇一個不同的用戶名。本指南的文件如下所示:
demo:O5az.RSPzd.HE
完成后保存并關閉文件。
現在,我們準備修改我們的 Nginx 配置文件。打開此文件以開始編輯:
sudo nano /etc/nginx/sites-available/default
在此文件中,我們需要添加一個新的位置部分。這將針對我們選擇的 phpMyAdmin 接口位置(在本指南中我們選擇了 /nothingtosee
)。
在 server
塊內創建此部分,但不在任何其他塊內。在我們的示例中,我們將在 location /
塊下方放置我們的新位置塊:
server {. . .location / {try_files $uri $uri/ =404;}location /nothingtosee {}. . .
}
在此塊內,我們需要將名為 auth_basic
的指令的值設置為我們的提示將向用戶顯示的身份驗證消息。我們不希望未經身份驗證的用戶知道我們正在保護什么,因此不要提供具體細節。在我們的示例中,我們將只使用 “Admin Login”。
然后,我們需要使用名為 auth_basic_user_file
的指令將我們的 Web 服務器指向我們創建的身份驗證文件。Nginx 將提示用戶輸入身份驗證詳細信息,并檢查輸入的值是否與其在指定文件中找到的值匹配。
完成后,文件應如下所示:
server {. . .location / {try_files $uri $uri/ =404;}location /nothingtosee {auth_basic "Admin Login";auth_basic_user_file /etc/nginx/pma_pass;}. . .
}
完成后保存并關閉文件。
要實施我們的新身份驗證門,我們必須重新啟動 Web 服務器:
sudo service nginx restart
現在,如果我們在 Web 瀏覽器中訪問我們的 phpMyAdmin 位置(如果您已經在使用 phpMyAdmin,則可能需要清除緩存或使用不同的瀏覽器會話),您應該會收到提示,要求輸入您添加到 pma_pass
文件中的用戶名和密碼:
http://server_domain_or_IP/nothingtosee
!Nginx 身份驗證頁面
輸入您的憑據后,您將被帶到正常的 phpMyAdmin 登錄頁面。這一額外的保護層將有助于保持您的 MySQL 日志中不受身份驗證嘗試的干擾,同時還帶來了額外的安全性益處。
結論
現在您可以通過一個相當安全的 Web 界面來管理您的 MySQL 數據庫。這個用戶界面暴露了大部分可以從 MySQL 命令提示符中使用的功能。您可以查看數據庫和模式,執行查詢,并創建新的數據集和結構。