• Web Security, 教學 02.07.2017

    5個MySQL 資料庫的安全防護技巧

    Image result for MySQL security

    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 <datadir>
    chown mysql:mysql <datadir>

     

    • 日誌檔案權限設定為 640
    chmod 640 <log file>
    chown mysql:mysql <log file>

     

    • 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

     

    參考

    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

     

    Posted by Tony @ 7:45 pm

  • Leave a Reply

    Your email address will not be published.