MYSQL安全加固规范
用下圖命令進入命令模式
文章目錄
- 3 縮略語
- 4 安全配置要求
- 4.1 賬號
- 4.2 口令
- 4.3 授權
- 4.4 日志
- 4.5 補丁
- 4.6 網絡連接
- 4.7 可信IP地址訪問控制
- 4.8 連接數設置
- 1.賬號
- 2.口令
- 3.權限設置
- 4.日志審計
- 5.禁用或限制遠程訪問
- 6.移除測試(test)數據庫和禁用LOCAL INFILE
第一篇 老師版
3 縮略語
IP Intcrnct Protocol 網絡協議
4 安全配置要求
4.1 賬號
編號:1
要求內容 以普通帳戶安全運行mysqld,禁止mysql以管理員帳號權限運行。
操作指南: 1、參考配置操作
Unix 下以通過在/etc/my.cnf中設置:
2、補充操作說明
檢查方法: 1、判定條件
各種操作系統下以管理員權限運行。
Unix 下禁止以 root 賬號運行 mysqld;
2、檢測操作
檢查進程屬主和運行參數是否包含–user=mysql類似語句:
#ps -ef | grep mysqld
#grep -i user /etc/my.cnf
編號:2
要求內容 應按照用戶分配賬號,避免不同用戶間共享賬號
操作指南
//創建用戶
mysql> mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub ject)values("localhost","pppadmin",password("passwd"),",","); 這樣就創建了一個名為:phplamp密碼為:1234的用戶。 然后登錄一下。find mysql>exit; @>mysql -u phplamp -p @>輸入密碼編號:2
要求內容 應按照用戶分配賬號,避免不同用戶間共享賬號
參考配置操作
操作指南 //創建用戶
補充操作說明
檢測方法 1.判定條件
不用名稱的用戶可以連接數據庫
2.檢測操作
使用不同用戶連接數據庫
編號:3
要求內容 應刪除或鎖定與數據庫運行、維護等工作無關的賬號
操作指南1.參考配置操作
DROP USER 語句用于刪除一個或多個MySQL賬戶。要使用 DROP USER,必須擁有mysql 數據庫的全局 CREATE USER 權限或 DELETE 權限。賬戶名稱的用戶和主機部分與用戶表記錄的User和Host列值相對應。
使用 DROP USER,您可以取消一個賬戶和其權限,操作如下:
DROP USER user;
該語句可以刪除來自所有授權表的帳戶權限記錄。
2.補充操作說明
要點:
DROP USER 不能自動關閉任何打開的用戶對話。而且,如果用戶有
打開的對話,此時取消用戶,則命令不會生效,直到用戶對話被關
閉后才生效。一旦對話被關閉,用戶也被取消,此用戶再次試圖登
錄時將會失敗。
檢測方法 檢測操作:
mysql 查看所有用戶的語句
輸入指令select user(;
依次檢查所列出的賬戶是否為必要賬戶,刪除無用戶或過期賬戶。
注:無關的賬號主要指測試帳戶、共享帳號、長期不用賬號(半年以上不用)等
4.2 口令
編號:1
要求內容 檢查帳戶默認密碼和弱密碼
操作指南1. 參考配置操作
修改帳戶弱密碼
如要修改密碼,執行如下命令:
補充操作說明
檢測方法1.判定條件
密碼長度至少8位,并包括數字、小寫字母、大寫字母和特殊符號4類中至少3類。
四分之一三原則
2.檢測操作
檢查本地密碼:(注意,管理帳號 root 默認是空密碼)
mysql> use mysql;
mysql> select Host,User,Pass word,Select_priv,Grant_priv from user;
4.3 授權
編號:1
要求內容 在數據庫權限配置能力內,根據用戶的業務需要,配置其所需的最小權限。
操作指南 1、參考配置操作 合理設置用戶權限,撤銷危險授權。
2、補充操作說明
檢測方法 1 判定條件
確保數據庫沒有不必要的或危險的授權
2 檢測操作
查看數據庫授權情況:增刪改查
回收不必要的或危險的授權,可以執行revoke命令:
mysql> help revoke Name: 'REVOKE' Description: Syntax: REVOKE priv_type [(column_list)][priv_type[(column_list)]]..ON [object_type]{*| *.*| db_name.*| db_name.tbl_name | tbl_name| db_name.routine_name} FROM user [,user]...4.4 日志
編號:1
要求內容 數據庫應配置日志功能,
操作指南 mysql 有以下幾種日志:
在mysql 的安裝目錄下,打開my.ini,在后面加上上面的參數,保存后重啟 mysql 服務就行了。
例如:
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
#Enter a name for the query log file.Otherwise a default name will be used.
#log=
#Enter a name for the error log file.Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a de fault name will be used.
#log-update=
上面只開啟了錯誤日志,要開其他的日志就把前面的“#”去掉
1、 補充操作說明 用mysql命令打開后
show variables like ‘log_%’;查看所有的log命令
2、show variables like ‘log_bin’;查看具體的log命令
檢測方法 1 判定條件
啟用審核記錄對數據庫的操作,便于日后檢查。
2 檢測操作
打開/etc/my.cnf文件,查看是否包含如下設置(沒有的自己加):
4.5 補丁
編號:1
要求內容 系統安裝了最新的安全補丁 (注:在保證業務及網絡安全的前提下,經過兼容性測試后)
操作指南 1、參考配置操作
下載并安裝最新mysql安全補丁,
2、補充操作說明
安全答報和補丁下載網址是htp://www.mysql.com
檢測方法 1 判定條件
確保數據庫為企業版,并且安裝了最新安全補丁。如果是不安全的
社區版,建議替換為企業版(收費)
2 檢測操作
使用如下命令查看當前補丁版本:
4.6 網絡連接
編號:1
要求內容 禁止網絡連接,防止猜解密碼攻擊,溢出攻擊和嗅探攻擊。(僅限于應用和數據庫在同一臺主機的情況)
操作指南 1、參考配置操作
如果數據庫不需遠程訪問,可以禁止遠程tcp/ip連接,通過在mysqld 服務器中參數中添加 --skip-networking 啟動參數來使mysql 不監聽任何TCP/IP連接,增加安全性。
強迫MySQL僅監聽本機,方法是在my.cnf的[mysqld]部分增加下面一行:
bind-address=127.0.0.1
2、補充操作說明
檢測方法 1 判定條件 遠程無法連接
2 檢測操作
或從客戶機遠程 telnet mysqlserver 3306
4.7 可信IP地址訪問控制
編號: 1
要求內容 通過數據庫所在操作系統或防火墻限制,只有信任的IP地址才能通過監
聽器訪問數據庫。
操作指南 1、參考配置操作
執行命令:mysql> GRANT ALL PRIVILEGES ON db.*
一> 一> TO 用戶名@’IP子網/掩碼’;
只有通過指定 IP地址段的用戶才可以登錄
2、補充操作說明
檢測方法 1、判定條件
在非信任的客戶端以數據庫賬戶登陸被提示拒絕。
2、檢測操作
用戶從其它子網登錄,將被拒絕
3、補充說明
4.8 連接數設置
要求內容 根據機器性能和業務需求,設制最大最小連接數。
操作指南 1、參考配置操作
編輯 MySQL 配置文件:my.cnf 或者是 my.ini
在[mysqld]配置段添加:
max_connections=1000
保存,重啟MySQL 服務。
檢測方法 1、判定條件
2、檢測操作
用命令:SHOW [FULL] PROCESSLIST 顯示哪些線程正在運行
mysql admin -uroot -p variables
輸入 root 數據庫賬號的密碼后可看到
|max connections | 1000 |
3、補充說明
第二篇 自查版
MySQL數據庫安全配置規范操作
1.賬號
以普通帳戶安全運行mysqld,禁止mysql以root帳號權限運行,攻擊者可能通過mysql獲得系統root超級用戶權限,完全控制系統。
配置/etc/my.cnf
[mysql.server]
user=mysql
補充操作說明
直接通過本地網絡之外的計算機改變生產環境中的數據庫是異常危險的。有時,管理員會打開主機對數據庫的訪問:
GRANT ALL ON . TO ‘root’@’%’;
這其實是完全放開了對root的訪問。所以,把重要的操作限制給特定主機非常重要:
GRANT ALL ON . TO ‘root’@‘localhost’;
GRANT ALL ON . TO ‘root’@‘myip.athome’ ;
FLUSH PRIVILEGES;
判定條件
禁止以root賬號運行mysqld;
檢測操作
檢查進程屬主和運行參數是否包含–user=mysql類似語句:
#ps –ef | grep mysqld
#grep -i user /etc/my.cnf
用戶權限
應按照用戶分配賬號,避免不同用戶間共享賬號
創建用戶 設定指定ip地址登陸數據庫
create user vvera@‘指定ip地址’ identified by ‘vv@122’;
這樣就創建了一個名為:vvera 密碼為:vv@122 的用戶。
然后登錄一下。
檢測方法
判定條件
不用名稱的用戶可以連接數據庫;使用不同用戶連接數據庫
應刪除或鎖定與數據庫運行、維護等工作無關的賬號
移除匿名賬戶和廢棄的賬戶
DROP USER語句用于刪除一個或多個MySQL賬戶。要使用DROP USER,必須擁有mysql數據庫的全局CREATE USER權限或DELETE權限。賬戶名稱的用戶和主機部分與用戶表記錄的User和Host列值相對應。
使用DROP USER,您可以取消一個賬戶和其權限,操作如下:
DROP USER user;
該語句可以刪除來自所有授權表的帳戶權限記錄。紅色標識的無用賬戶都可以刪除。
使用操作命令之后的結果
drop user ‘’@‘mysql’,’’@‘localhost’,‘root’@’::1’,‘root’@‘mysql’;
補充操作說明
要點:
DROP USER不能自動關閉任何打開的用戶對話。而且,如果用戶有打開的對話,此時取消用戶,則命令不會生效,直到用戶對話被關閉后才生效。一旦對話被關閉,用戶也被取消,此用戶再次試圖登錄時將會失敗。
檢側操作:
mysql 查看所有用戶的語句
輸入指令
select user();
select user ,host ,password from mysql.user;
依次檢查所列出的賬戶是否為必要賬戶,刪除無用戶或過期賬戶。
2.口令
檢查帳戶默認密碼和弱密碼
修改帳戶弱密碼
如要修改密碼,執行如下命令:
檢查本地密碼:(注意,管理帳號root默認是空密碼)
mysql> update user set password=password(‘vv@122’) where user=‘root’;
mysql> flush privileges;
檢測方法
mysql> use mysql;
mysql> select Host,User,Password,Select_priv,Grant_priv from user;
3.權限設置
在數據庫權限配置能力內,根據用戶的業務需要,配置其所需的最小權限。
合理設置用戶權限
補充操作說明
有些應用程序是通過一個特定數據庫表的用戶名和口令連接到MySQL的,安全人員不應當給予這個用戶完全的訪問權。
如果攻擊者獲得了這個擁有完全訪問權的用戶,他也就擁有了所有的數據庫。查看一個用戶許可的方法是在MySQL控制臺中使用命令SHOW GRANT
SHOW GRANTS FOR ; ‘vvera’@‘localhost’
為定義用戶的訪問權,使用GRANT命令。在下面的例子中,vvera僅能從tanggula數據庫的mserver表中選擇:
GRANT SELECT ON tanggula. mserver TO ‘vvera’@‘localhost’;
FLUSH PRIVILEGES;
vvera用戶就無法改變數據庫中這個表和其它表的任何數據。
如果你要從一個用戶移除訪問權,就應使用一個與GRANT命令類似的REVOKE命令:
REVOKE SELECT ON tanggula. mserver FROM ‘vvera’@‘localhost’;
FLUSH PRIVILEGES;
授權并創建用戶,并指定密碼
grant 權限 on 權限范圍 to 用戶 identified by ‘密碼’
回收權限
revoke 權限 on 范圍 from 用戶
4.日志審計
數據庫應配置日志功能,
show variables like ‘log_%’;查看所有的log命令
show variables like ‘log_bin’;查看具體的log命令
5.禁用或限制遠程訪問
禁止網絡連接,防止猜解密碼攻擊,溢出攻擊和嗅探攻擊。(僅限于應用和數據庫在同一臺主機)
參考配置操作
如果數據庫不需遠程訪問,可以禁止遠程tcp/ip連接, 通過在mysqld服務器中參數中添加 --skip-networking 啟動參數來使mysql不監聽任何TCP/IP連接,增加安全性。強迫MySQL僅監聽本機,方法是在my.cnf的[mysqld]部分增加下面一行:bind-address=127.0.0.1
6.移除測試(test)數據庫和禁用LOCAL INFILE
刪除可以匿名訪問的test數據庫和防止非授權用戶訪問本地文件
移除測試(test)數據庫
在默認安裝的MySQL中,匿名用戶可以訪問test數據庫。我們可以移除任何無用的數據庫,以避免在不可預料的情況下訪問了數據庫。因而,在MySQL控制臺中,執行:
DROP DATABASE test;
禁用LOCAL INFILE
另一項改變是禁用”LOAD DATA LOCAL INFILE”命令,這有助于防止非授權用戶訪問本地文件。在PHP應用程序中發現有新的SQL注入漏洞時,這樣做尤其重要。此外,在某些情況下,LOCAL INFILE命令可被用于訪問操作系統上的其它文件(如/etc/passwd),應使用下現的命令:
mysql> SELECT load_file("/etc/passwd")
為禁用LOCAL INFILE命令,應當在MySQL配置文件的[mysqld]部分增加下面的參數:
set-variable=local-infile=0
檢查操作
Mysql>show databases;
總結
以上是生活随笔為你收集整理的MYSQL安全加固规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统主机加固规范,linux主
- 下一篇: mac搭建php审计环境,[docker