5個MySQL 資料庫的安全防護技巧
MySQL 是廣泛被使用的資料庫, 可以很容易的被安裝使用,
但是安裝完之後, 有許多安全的防護措施沒有顧慮到導致潛在的資訊安全風險或是資訊外洩
這篇文章主要說明 MySQL 提供哪些安全防護措施, MySQL安全運維與部署的時候需要特別注意的地方
1. 一鍵安裝 mysql_secure_installation
MySQL 本身提供 mysql_secure_isntallation供系統管理可以一鍵方式進行安全的配置與部署,
主要提供下列五項安全防護設定:
- Change the root password? [Y/n] y
- Remove anonymous users? [Y/n] y
- Disallow root login remotely? [Y/n] y
- Remove test database and access to it? [Y/n] y
- Reload privilege tables now? [Y/n] y
其中 Reload privilege tables 主要是要讓設定立即生效
2. 檔案權限
- chmod 0660 /etc/my.cnf
- 設定 datadir 檔案權限
[pastacode lang=”markup” manual=”chmod%20700%20%3Cdatadir%3E%0Achown%20mysql%3Amysql%20%3Cdatadir%3E” message=”” highlight=”” provider=”manual”/]
- 日誌檔案權限設定為 640
[pastacode lang=”bash” manual=”chmod%20640%20%3Clog%20file%3E%0Achown%20mysql%3Amysql%20%3Clog%20file%3E%0A” message=”” highlight=”” provider=”manual”/]
- mysqladmin、mysql、mysqld檔process 設定權限為 110
3. 清除歷史檔案
MySQL會將所有執行命令紀錄在歷史檔案中 .mysql_history
因此, 該檔案會包含許多敏感性訊息, 必須要將該檔案刪除
[pastacode lang=”bash” manual=”%23%20rm%20%24HOME%2F.mysql_history%0A%0A%23%20ln%20-s%20%2Fdev%2Fnull%20%24HOME%2F.mysql_history” message=”” highlight=”” provider=”manual”/]
4. 禁止遠端登入
編輯/etc/my.cnf
增加skip-networking 或是使用 bind-address=127.0.0.1
當只有本機用戶端可以存取的時候, 禁止其他遠端主機 TCP的連線時, 就可以使用這個參數 skip-networking
5. 禁止使用LOCAL INFILE
這個設定主要限制資料庫禁止任意讀取本地檔案, 例如:
mysql> SELECT load_file("/etc/passwd")
編輯 /ect/my.cnf/
local_infile=0
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_local_infile
其他相關安全設定
# 具備有 INSERT權限的使用者才可以新建使用者
safe-user-create = 1
# 禁止用戶端如果使用MySQL 4.1版本之前較不安全的舊密碼格式
secure-auth = 1
# 該系統變數定義誰有權限執行 Show databases 的指令
# https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-show-database
skip-show-database
# 讓MySQL知道不要使用操作系統的 Symbolic links來讀取資料庫檔案
skip-symbolic-links
# 這個設定主要限定當 MySQL讀取外部檔案時的路徑, Load_data , select into outfile, Load_file()等
secure-file-priv = /tmp
6. 限制用戶資源
可以透過下列設定限制每個用戶可使用的資源
MAX_QUESTIONS
MAX_USER_CONNECTIONS
MAX_QUERIES_PER_HOUR
MAX_UPDATES_PER_HOUR
MAX_CONNECTIONS_PER_HOUR
參考
https://supermarket.chef.io/cookbooks/mysql-hardening
https://www.symantec.com/connect/articles/securing-mysql-step-step
http://www.w3resource.com/mysql/mysql-security.php
https://www.slideshare.net/MarkSwarbrick/mysql-security-57