MySQL 是世界上最流行的開源資料庫系統,而MariaDB(MySQL的一個分支)是世界上發展最快的開源資料庫系統。安裝MySQL伺服器之後,它的預設配置是不安全的,保護它是一般資料庫管理中的基本任務之一。 這將有助於加強和提升整體Linux伺服器安全性,因為攻擊者總是掃描系統任何部分的漏洞,而數... ...
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
以上,就是這篇文章的全部內容。 原文在這裡