關於MySQL的幾點安全配置

1、安裝完MySQL後

修改root用戶密碼

    5.5以前,rpm包安裝完MySQL後,root用戶密碼爲空

    5.6中,rpm包安裝完MySQL後,會隨機生成一個root密碼,保存在/root/.mysql_secret

    5.7以後,使用mysqld --initialize初始化時,默認會自動生成隨機密碼,並且不創建除root@localhost 外的其他賬號,也不創建test庫;

2、正確授權

    mysql庫中有4張權限表,user、db、tables_priv、columns_priv,分別對應用戶密碼、用戶對數據庫的權限、對錶的權限、對列的權限。

    當一個用戶向MySQL發起請求時,首先會從user表中驗證host、user、password,然後再依次驗證db、tables_priv、columns_priv,驗證過程中,如果db表中對應權限爲Y,則此用戶對某個庫的權限全爲Y,將不再驗證tables_priv和columns_priv。

對於MySQL中的賬戶權限相關的安全配置,總結如下:

    針對每個網站建立一個單獨的賬戶

    爲每個網站單獨建立一個專屬數據庫

    按照user->db->tables_priv->columns_pri的順序進行細粒度的權限控制

    爲每個用戶單獨配置一個專屬數據庫,保證當前用戶的所有操作只能發生在它自己的數據庫中,防止SQL注入發生後,***通過注入點訪問到系統表

    如果有必要,改變MySQL的root用戶的用戶名(在user表中更改)

3、MySQL網絡完全配置

    禁止root用戶遠程登錄

    防火牆設置

    更改默認端口(默認3306),可以從一定程度上防止端口掃描工具的掃描

    限制單個用戶的連接數量:

        [mysqld]

        max_user_connections 20

4、文件權限及文件安全

    使用非root用戶啓動MySQL服務

    限制啓動MySQL的用戶的文件權限,同時確保該用戶對MySQL的數據文件等有讀寫權限

    可以使用chroot更改根目錄,防止非root用戶訪問到一些敏感文件,比如:/etc/passwd

    不要給非root用戶授予process和super權限,mysqladmin processlist和show processlist命令會查看到任何用戶執行的命令,這可能看到其他用戶執行的update user set password=...;命令,super權限可以終止會話、更改系統參數等

    不要對錶使用軟連接(--skip-symbolic-links參數用來禁用這一功能),表的軟連接只有MyISAM支持,因爲開啓表軟連接後(尤其是對於使用系統root用戶啓動MySQL服務的),MySQL用戶就可以使用mysqld來刪除、重命名數據文件所在位置以外的文件了

    如果plugin文件夾可以被MySQL server寫,那麼用戶就可以使用select ... into dumpfile命令把可執行代碼寫入到裏面,可以通過把plugin_dir參數對應的路徑設爲只讀以及調整--secure-file-priv參數來提高安全性

    不要給非root用戶授予文件讀寫權限,防止使用load data local infile來提取本地文件(比如提取/etc/passwd裏的信息,會對系統安全造成威脅)

        [mysqld]

        local-infile=0

5、如果有必要,可以刪除~/.bash_history文件,防止讀取歷史命令

# rm .bash_history .mysql_history

# ln -s /dev/null .bash_history

# ln -s /dev/null .mysql_history 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章