MySQL 是世界上最流行的開源數據庫系統,而MariaDB(MySQL的一個分支)是世界上發展最快的開源數據庫系統。安裝MySQL服務器之后,它的默認配置是不安全的,保護它是一般數據庫管理中的基本任務之一。 這將有助於加強和提升整體Linux服務器安全性,因為攻擊者總是掃描系統任何部分的漏洞,而數據庫過去一直是關鍵的目標。一個常見的例子是暴力破解MySQL數據庫的root密碼。 在本指南中,將講解在 Linux 很有用的 MySQL / MariaDB 安全性最佳實踐。
MySQL 安全性安裝
這是安裝 MySQL 服務器后第一個建議的步驟,用於保護數據庫服務器。此腳本通過要求你提供以下內容,有助於提高MySQL服務器的安全性:
- 如果在安裝期間未設置 root 帳戶,請為 root 帳戶設置密碼
- 刪除能從本機之外遠程登錄的 root 賬號,來禁止遠程 root 用戶登錄
- 刪除匿名用戶和測試數據庫,測試數據庫默認情況下所有用戶都能訪問的,甚至是匿名用戶
mysql_secure_installation
運行后,設置root密碼並輸入[Yes/ Y]回答一系列問題,然后按 [Enter]
將數據庫綁定到回環地址
這配置將限制遠程機器訪問,它會告訴 MySQL 服務器只接受 本地(localhost) 的連接。你可以在主配置文件中這樣設置
# vi /etc/my.cnf [RHEL/CentOS]
# vi /etc/mysql/my.conf [Debian/Ubuntu]
OR
# vi /etc/mysql/mysql.conf.d/mysqld.cnf [Debian/Ubuntu]
在 [mysqld] 部分下面添加以下行
bind-address = 127.0.0.1
在MySQL中禁用 LOCAL INFILE
作為安全性強化的一部分, 你需要在主配置文件的 [mysqld] 下用添加這條語句禁用 local_infile 以防止從 MySQL 內部訪問底層文件系統。
local-infile=0
更改MYSQL默認端口
port 變量是用於監聽 TCP/IP 連接的 MySQL 端口號。 MySQL 默認的端口號是 3306 , 但可以在配置文件的 [mysqld] 下面,修改
port=3307
譯者語,如果是系統用 Selinux 的,換端口可能會導致不能啟動。你可以選擇關閉 SeLinux,或者做以下的命令
yum install -y policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 3307
更多 MySQL 與 SeLinux 可以看這里
啟用 MySQL 日志記錄
日志是了解服務器上發生的事情的最佳方式之一,如果發生任何攻擊,你可以輕松地從日志文件中查看任何與入侵相關的活動。您可以通過在 [mysqld] 部分下添加以下變量來啟用MySQL日志記錄
general_log = ON
general_log_file = /var/log/mysql/mysql.log
給配置文件設置適當的權限
確保為所有 MySQL 服務器文件和數據目錄設置適當的權限。比如:讓/etc/my.conf文件只能被 root 用戶寫入。這能阻止其他用戶更改數據庫服務器配置。
chmod 644 /etc/my.cnf
刪除 MySQL Shell 的歷史記錄
你在 MySQL Shell 上執行的所有命令都由 MySQL 客戶端存儲在歷史文件中:〜/ .mysql_history。這可能是很危險,你創建的用戶或者修改用戶密碼時,會在 shell 中輸入的所有用戶名和密碼,而這些都會被記錄到文件中。
cat /dev/null > ~/.mysql_history
不要在命令行直接運行 MySQL 命令
如你所知,你在終端上輸入的所有命令都存儲在歷史文件中,這具體取決於你使用的shell(例如〜/ .bash_history for bash)。獲取了歷史記錄文件的權限的攻擊者可以輕松查看其中記錄的任何密碼。 強烈建議不要在命令行上鍵入密碼,如下所示:
mysql -u root -p123456
當你查看命令行的歷史記錄的最后一行的時,你就會看到密碼顯示在上面
# history
連接 MySQL 適當的方法是:
# mysql -u root -p
Enter password:
創建應用程序專用數據庫用戶
對於每個跑在服務器上的每個應用程序,只給一個用戶訪問指定應用程序的數據庫。例如,如果你有一個 wordpress 的網站,就那 wordpress 的網站的數據庫創建一個特定的用戶。 如下所示:
mysql -u root -p
CREATE DATABASE osclass_db;
CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
FLUSH PRIVILEGES;
exit
並記住要刪除那些不再管理服務器上任何應用程序數據庫的用戶帳戶。
使用其他安全插件和庫
MySQL 包含許多安全插件,用於:驗證嘗試連接mysql服務器的客戶端,密碼驗證和保護敏感信息的存儲,而這些都是免費的。 你可以在這里找到更多
定期修改密碼
這是一條對信息/應用程序/系統的安全性的常見建議。你這樣的頻率取決於你內部的安全策略。這可以防止“窺探者”長時間跟蹤你的活動,讓他們無法訪問你的 MySQL服務器。
USE mysql;
UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
FLUSH PRIVILEGES;
定期更新 MySQL 服務器的包
強烈建議定期升級 MySQL/MariaDB 軟件包,來跟上供應商倉庫中的安全性更新和漏洞修復。通常操作系統默認的包是過時的。
yum update
apt-get update
對 MySQL/MariaDB 服務器進行任何更改后,要重啟服務
systemctl restart mariadb
or
systemctl restart mysql
以上,就是這篇文章的全部內容。 原文在這里