----------- 20190110 MySQL-安全設定.txt 1. 防火牆限制可連線的IP. 2. 禁止使用LOCAL INFILE 這個設定主要限制資料庫禁止任意讀取本地檔案, 例如: mysql> SELECT load_file("/etc/passwd") 編輯 /ect/my.cnf/ local_infile=0 3. 新增使用者, 不要使用root. 參考: MySQL-CreateUser.txt. ----------- 20190110 MySQL-安全設定.txt ref: https://www.qa-knowhow.com/?p=4661 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 檔案權限 chmod 700 chown mysql:mysql 日誌檔案權限設定為 640 chmod 640 chown mysql:mysql mysqladmin、mysql、mysqld檔process 設定權限為 110 3. 清除歷史檔案 這個跳過 MySQL會將所有執行命令紀錄在歷史檔案中 .mysql_history 因此, 該檔案會包含許多敏感性訊息, 必須要將該檔案刪除 # rm $HOME/.mysql_history # ln -s /dev/null $HOME/.mysql_history 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