摘至網頁鏈接
成都網站設計、網站制作介紹好的網站是理念、設計和技術的結合。成都創(chuàng)新互聯(lián)公司擁有的網站設計理念、多方位的設計風格、經驗豐富的設計團隊。提供PC端+手機端網站建設,用營銷思維進行網站設計、采用先進技術開源代碼、注重用戶體驗與SEO基礎,將技術與創(chuàng)意整合到網站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
常見Mysql配置文件:linux系統(tǒng)下是my.conf,windows環(huán)境下是my.ini;
數據庫整體安全需求:機密性、完整性、可用性;
下面以mysql 5.7版本為例,介紹mysql常見的安全策略、配置、加固方式等等,有些策略可能只針對Linux操作系統(tǒng),更多策略可以參考CIS Mysql Benchmark相關文檔:
1、操作系統(tǒng)級別安全配置
1.1不要將數據庫放在系統(tǒng)分區(qū)
Windows系統(tǒng):直接檢查是否將數據庫放置在C盤。
Linux系統(tǒng):
在終端連接上mysql數據庫,執(zhí)行如下命令:
show variables where variable_name = 'datadir';
然后返回shell命令行:
df -h datadir
其中datadir是上一條命令的返回值。
上述命令的返回值不應是/、/var、/usr
1.2使用專用的最小權限賬號運行mysql數據庫進程
Windows系統(tǒng):直接打開任務管理器,查看運行mysql進程的操作系統(tǒng)賬號,不能為administrator賬號。
Linux系統(tǒng):
Shell命令行運行如下命令:
ps -ef | grep mysql
查看mysql服務的運行賬號是否為root或其他高權限賬號,如果是的,則需要創(chuàng)建一個非管理員專用賬號來運行mysql服務。
1.3禁止使用mysql命令行歷史記錄
Linux系統(tǒng):
執(zhí)行如下命令:
find / -name ".mysql_history"
查看是否存在mysql的歷史命令記錄文件,如果存在,則需要進行如下加固:
(1)刪除.mysql_history文件;
(2)設置環(huán)境變量MYSQL_HISTFILE為/dev/null,并添加到shell的初始化腳本中,創(chuàng)建mysql_history到/dev/null的鏈接:
ln -s /dev/null $HOME/.mysql_history
1.4?確保MYSQL_PWD環(huán)境變量未設置敏感信息
Windows系統(tǒng)下進入cmd命令行,使用如下命令:
Set
查看是否設置了環(huán)境變量MYSQL_PWD。
Linux系統(tǒng)下使用如下命令:
grep MYSQL_PWD /proc/*/environ
查看MYSQL_PWD環(huán)境變量是否設置了敏感信息。
確認那個配置文件或腳本設置了MYSQL_PWD環(huán)境變量。
2、安裝
2.1使用數據庫專用服務器
使用專用的服務器安裝mysql服務可以減少mysql服務的攻擊面,盡量卸載或刪除操作系統(tǒng)上的不必要的應用或服務,減少其他應用的安裝可能給mysql的運行帶來的安全風險。
2.2?不要復用數據庫賬號
運行mysql服務的操作系統(tǒng)賬號不要用來運行其他應用或服務,這樣可以避免其他應用或服務器被攻擊給mysql服務帶來影響。
2.3?歷史命令行密碼設置為不可見
使用如下命令:
mysql -u admin -p password
連接mysql數據庫服務,退出后查看歷史命令,確認password是否為明文。
建議使用如下命令方式登錄:
(1)先輸入mysql -u admin -p
(2)根據命令行提示輸入密碼;
而不要在一整條命令中輸入密碼。
另外要控制mysql配置文件訪問權限。
3、文件權限控制
3.1?控制數據目錄的訪問權限
數據目錄是mysql數據庫存放的位置,在mysql命令行界面下執(zhí)行如下命令:
show variables where variable_name = 'datadir';
在終端命令行下執(zhí)行如下命令:
ls -l datadir/.. | egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"
其中datadir是第一條命令的執(zhí)行結果
如果存在問題,linux環(huán)境下在終端執(zhí)行如下命令進行加固:
chmod 700 datadir
chown mysql:mysql datadir
3.2?控制二進制日志文件的權限
mysql的運行會產生很多日志,例如二進制日志、錯誤日志、慢查詢日志等等,Mysql命令行下執(zhí)行如下命令:
show variables like 'log_bin_basename';
在終端命令行執(zhí)行如下命令:
ls log_bin_basename.*
對于發(fā)現的每一個文件,執(zhí)行如下命令:
ls -l log_bin_basename.nnnnn | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"
根據輸出確認日志文件的權限設置是否存在問題。
對于每個日志文件,修改其權限和屬組如下:
chmod 660 log file
chown mysql:mysql log file
3.3?控制錯誤日志文件的權限
Mysql命令行下執(zhí)行如下命令:
show variables like 'log_error';
在終端命令行執(zhí)行如下命令:
ls log_error.*
對于發(fā)現的每一個文件,執(zhí)行如下命令:
ls -l log_error | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"
根據輸出確認日志文件的權限設置是否存在問題。
對于每個日志文件,修改其權限和屬組如下:
chmod 660 log file
chown mysql:mysql log file
3.4控制慢查詢日志文件的權限
Mysql命令行下執(zhí)行如下命令:
show variables like 'slow_query_log_file';
在終端命令行執(zhí)行如下命令:
ls slow_query_log_file.*
對于發(fā)現的每一個文件,執(zhí)行如下命令:
ls -l slow_query_log_file | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"
根據輸出確認日志文件的權限設置是否存在問題。
對于每個日志文件,修改其權限和屬組如下:
chmod 660 log file
chown mysql:mysql log file
3.5控制通用日志文件的權限
Mysql命令行下執(zhí)行如下命令:
show variables like 'general_log_file';
在終端命令行執(zhí)行如下命令:
ls general_log_file.*
對于發(fā)現的每一個文件,執(zhí)行如下命令:
ls -l general_log_file | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"
根據輸出確認日志文件的權限設置是否存在問題。
對于每個日志文件,修改其權限和屬組如下:
chmod 660 log file
chown mysql:mysql log file
3.6控制審計日志文件的權限
Mysql命令行下執(zhí)行如下命令:
show global variables where variable_name = ?'audit_log_file';
在終端執(zhí)行如下命令:
ls -l audit_log_file | egrep "^-rw[-x]rw[-x][-r][-w][-x][ \t]*[0-9][ \t]*mysql[
\t]*mysql.*$"
根據輸出確認日志文件的權限設置是否存在問題。
對于每個日志文件,修改其權限和屬組如下:
chmod 660 audit_log_file
chown mysql:mysql audit_log_file
4、通用安全
4.1安裝最新的補丁
在mysql命令行下查詢MySQL的版本:
SHOW VARIABLES WHERE Variable_name LIKE "version";
確認是否由需要安裝的補丁包,如果有請安裝。
4.2?刪除test數據庫
Mysql數據庫默認安裝好后,存在一個名為test的數據庫,如果存在,請執(zhí)行如下命令刪除:
Drop database “test”
4.3?確保讀取本地文件的參數設置為失效
Mysql命令行下,使用如下命令:
SHOW VARIABLES WHERE Variable_name = 'local_infile';
查看結果是否為OFF。
如果該命令為ON,則數據庫用戶可以通過LOAD DATA INFILE 或者?SELECT local_file?讀取到數據庫所在操作系統(tǒng)本地的文件,在這種情況下,需要在mysql配置文件中新增一行:
Local-infile=0;
然后重啟數據庫服務。
5、權限配置
5.1控制可以訪問所有數據庫的賬號
Mysql數據庫下的user表和db表中存放著可以授予數據庫用戶的權限,確保只有管理員賬號才能訪問所有數據庫。可以訪問mysql數據庫的用戶或許可以查看密碼哈希值、修改用戶權限等等。
使用如下sql語句:
SELECT user, host?FROM mysql.user
WHERE (Select_priv = 'Y')?OR (Insert_priv = 'Y')?OR (Update_priv = 'Y')
OR (Delete_priv = 'Y')??OR (Create_priv = 'Y')??OR (Drop_priv = 'Y');
SELECT user, host?FROM mysql.db?WHERE db = 'mysql'
AND ((Select_priv = 'Y')?OR (Insert_priv = 'Y')?OR (Update_priv = 'Y')
OR (Delete_priv = 'Y')?OR (Create_priv = 'Y')?OR (Drop_priv = 'Y'));
確保返回結果只能是數據庫管理員賬號。
5.2限制非管理員用戶的權限
Mysql.user表中的權限列有:
file_priv:表示是否允許用戶讀取數據庫所在主機的本地文件;
Process:表示是否允許用戶查詢所有用戶的命令執(zhí)行信息;
Super_priv:表示用戶是否有設置全局變量、管理員調試等高級別權限;
Shutdown_priv:表示用戶是否可以關閉數據庫;
Create_user_priv:表示用戶是否可以創(chuàng)建或刪除其他用戶;
Grant_priv:表示用戶是否可以修改其他用戶的權限;
應確保只有數據庫管理員才有上述權限,使用如下sql語句查看擁有各個權限的數據庫賬號:
select user, host from mysql.user where File_priv = 'Y';
select user, host from mysql.user where Process_priv = 'Y';
select user, host from mysql.user where Process_priv = 'Y';
SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'Y';
SELECT user, host FROM mysql.user WHERE Create_user_priv = 'Y';
SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';
SELECT user, host FROM mysql.db WHERE Grant_priv = 'Y';
確保查詢結果中不存在非管理員用戶。
如果存在非管理員用戶,使用如下命令進行權限回收:
REVOKE FILE ON *.* FROM 'user';
REVOKE PROCESS ON *.* FROM 'user';
REVOKE SUPER ON *.* FROM 'user';
REVOKE SHUTDOWN ON *.* FROM 'user';
REVOKE CREATE USER ON *.* FROM 'user';
REVOKE GRANT OPTION ON *.* FROM user;
其中user為上述查詢到的非管理員用戶。
5.3合理控制DML/DDL操作授權
DML/DDL語句包括創(chuàng)建或修改數據庫結構的權限,例如insert、update、delete、create、drop和alter語句,在任何數據庫中都要控制用戶的此類權限,確保只授權給有業(yè)務需求的非管理員用戶。Mysql命令行下執(zhí)行如下命令:
SELECT User,Host,Db?FROM mysql.db?WHERE Select_priv='Y'
OR Insert_priv='Y'?OR Update_priv='Y'?OR Delete_priv='Y'?OR Create_priv='Y'
OR Drop_priv='Y'?OR Alter_priv='Y';
上述查詢到的用戶只能對特地的數據庫才有相關的權限,使用如下命令進行相關權限的回收:
REVOKE SELECT ON host.database FROM user;
REVOKE INSERT ON host.database FROM user;
REVOKE UPDATE ON host.database FROM user;
REVOKE DELETE ON host.database FROM user;
REVOKE CREATE ON host.database FROM user;
REVOKE DROP ON host.database FROM user;
REVOKE ALTER ON host.database FROM user;
其中user為查詢到的未授權的用戶,host為相關主機,database為相關數據庫。
6、審計和日志
6.1開啟錯誤日志審計功能
錯誤日志包括數據庫運行和停止過程中的一系列活動信息,有助于分析數據庫運行過程中的一些異常活動,一般情況下需要開啟錯誤日志記錄功能,使用如下命令查詢:
SHOW variables LIKE 'log_error';
確保返回結果為非空,如果為空,需要在mysql數據庫配置文件中增加相關配置。
6.2確保日志存放在非系統(tǒng)區(qū)域
日志文件隨著數據庫的運行會不斷增加,如果存放在系統(tǒng)區(qū)域,則會影響系統(tǒng)的正常運行,使用如下命令進行查詢:
SELECT @@global.log_bin_basename;
確保返回結果不是如下路徑:/、/var、/usr
6.3關閉原始日志功能
原始日志選項會決定一些敏感信息是否會被明文寫進日志中,例如查詢日志、慢查詢日志、二進制日志,確保數據庫配置文件中存在如下配置項:
Log-raw = OFF
7、認證
7.1 Old_passwords環(huán)境變量設置
Old_passwords決定了使用PASSWORD()函數和IDENTIFIED BY?、CREATE USER?、GRANT?等語句是時的hash算法:
0 - authenticate with the mysql_native_password plugin
1 - authenticate with the mysql_old_password plugin
2 - authenticate with the sha256_password plugin
設置為mysql_old_password代表弱hash算法,可以快速通過密碼字典進行暴力破解。使用如下命令查詢相關值:
SHOW VARIABLES WHERE Variable_name = 'old_passwords';
確保返回值不為1。
7.2 secure_auth?選項設置
如果客戶端采用Old_passwords發(fā)起連接請求,如果服務器端設置了secure_auth,則客戶端會拒絕連接請求,可以根據安全需求在配置文件中做相應配置。
7.3?密碼保存
確保密碼沒有明文保存在全局配置文件中。
7.4?確保所有用戶都要求使用非空密碼登錄
執(zhí)行如下語句查詢是否有用戶不需要密碼即可登錄:
SELECT User,host
FROM mysql.user
WHERE (plugin IN('mysql_native_password', 'mysql_old_password')
AND (LENGTH(Password) = 0
OR Password IS NULL))
OR (plugin='sha256_password' AND LENGTH(authentication_string) = 0);
7.5不存在空賬號
使用如下命令查詢是否存在空賬號:
SELECT user,host FROM mysql.user WHERE user = '';
8、網絡設置
如果mysql數據庫服務器與應用是跨信任域部署的,則需要考慮在數據庫服務器與應用服務器之間建立ssl通道進行數據傳輸,不過這種場景一般很少見,在此不詳細描述。
9、數據庫備份
Mysql會自動開啟3306端口用于遠程連接mysql服務. 3306端口就是MySQL的默認端口, 但是黑客可以通過它來攻擊你的主機系統(tǒng). 服務器默認MySQL端口是3306, 最近經常被掃描, 甚至掃描到網站很慢或者打不開. 如果不需要遠程數據庫連接就可以讓Mysql關閉3306端口, 既提高了訪問速度, 又提高了安全性. 避免遠程連接mysql數據庫. 本地程序可以通過mysql.sock來連接, 不影響使用.
SSH到主機上輸入下面的命令:
vi /etc/my.cnf
在[mysqld]下添加:
skip-networking
最后重啟Mysql
service mysqld restart
檢查Mysql是否正常運行
service mysqld status
應該是有人想暴力破解你的密碼,做好安全防護,及時修改賬戶密碼,設置的復雜些。查看下是什么IP在操作,禁止它訪問
MySQL 5.7.17 以后提供了Connection-Control插件用來控制客戶端在登錄操作連續(xù)失敗一定次數后的響應的延遲。該插件可有效的防止客戶端暴力登錄的風險(攻擊)。該插件包含以下2個組件
CONNECTION_CONTROL:用來控制登錄失敗的次數及延遲響應時間
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:該表將登錄失敗的操作記錄至IS庫中
-- 配置文件增加以下配置(按需求)
[mysqld]
plugin-load-add = connection_control.so
connection-control = FORCE
connection-control-failed-login-attempts = FORCE
connection_control_min_connection_delay = 1000
connection_control_max_connection_delay = 86400
connection_control_failed_connections_threshold = 5
-- 插件動態(tài)安裝啟用
-- 驗證是否正常安裝
-- 查看默認相關變量
+-------------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 3 |
| connection_control_max_connection_delay | 2147483647 |
| connection_control_min_connection_delay | 1000 |
+-------------------------------------------------+------------+
-- 定制化配置(動態(tài))
-- 查看修改后的配置
+-------------------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------------------+-------+
| connection_control_failed_connections_threshold | 3 |
| connection_control_max_connection_delay | 86400 |
| connection_control_min_connection_delay | 1000 |
+-------------------------------------------------+-------+
connection_control_failed_connections_threshold
失敗嘗試的次數,默認為3,表示當連接失敗3次后啟用連接控制,0表示不開啟
connection_control_max_connection_delay
響應延遲的最大時間,默認約25天
connection_control_min_connection_delay
響應延遲的最小時間,默認1000微秒,1秒
-- 該表記錄登錄失敗的用戶及失敗次數,當用戶登錄成功后,登錄失敗的記錄則會被刪除。
-- 重新配置connection_control_failed_connections_threshold變量,該表記錄會被刪除(重置)
-- 如果使用不存在的用戶登錄,則該表記錄用戶名為空,但會記錄具體登錄的IP
use information_schema;
select * from connection_control_failed_login_attempts;
-- 連接控制的使用次數(可用戶判斷是否存在暴力登錄嘗試)
-- 重新配置connection_control_failed_connections_threshold變量,該表記錄會被刪除(重置)
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| Connection_control_delay_generated | 5 |
+------------------------------------+-------+
新聞標題:mysql怎么防止暴力 mysql暴力破解
本文URL:http://m.newbst.com/article22/hpohjc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供移動網站建設、網站制作、網站設計公司、網站改版、營銷型網站建設、標簽優(yōu)化
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)