MySQL部署及加固參考

Mysql部署及加固參考


*[註釋] : 以下實驗基於MySQL5.7.18,centos6.8

一、安裝參考

1、標準用戶

groupadd mysql
useradd mysql -g mysql -s /sbin/nologin

2、解壓並授權

tar xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /asop/
mv  mysql-5.7.18-linux-glibc2.5-x86_64 mysql5.7.18
chown -R mysql.mysql /home/mysql 

3、創建相關目錄

mkdir -p /asop/mysql5.7.18/logs/{sock,tmpdir,log,innodb_ts,innodb_log,undo,slowlog,binlog,relaylog} 
mkdir -p /asop/mysql5.7.18/data

4、創建鏈接文件

ln –s  /asop/mysql5.7.18 /usr/local/mysql

5、創建環境變量

echo 'export PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
source  /etc/profile

6、創建配置文件

#參考配置文件
vi /etc/my.cnf
[client]
socket=/asop/mysql5.7.18/logs/sock/mysql.sock 
default-character-set = utf8
local-infile=0
[mysqld]
user=mysql
port=3307
basedir = /usr/local/mysql
character-set-server=utf8
default-storage-engine = INNODB
server-id=1
collation_server = utf8_bin
log_timestamps=SYSTEM
socket=/asop/mysql5.7.18/logs/sock/mysql.sock
pid-file=/asop/mysql5.7.18/logs/sock/mysql.pid 
datadir=/asop/mysql5.7.18/data
tmpdir=/asop/mysql5.7.18/logs/tmpdir
log-error=/asop/mysql5.7.18/logs/log/error.log
slow_query_log = on
long_query_time = 5
slow_query_log_file=/asop/mysql5.7.18/logs/slowlog/slow-query.log
log-bin=/asop/mysql5.7.18/logs/binlog/mysql-bin
relay-log=/asop/mysql5.7.18/logs/relaylog/mysql-relay-bin
innodb_data_home_dir = /asop/mysql5.7.18/logs/innodb_ts
innodb_log_group_home_dir = /asop/mysql5.7.18/logs/innodb_log
innodb_undo_directory = /asop/mysql5.7.18/logs/undo/
local-infile=0
skip_symbolic_links=yes
max_user_connections=200
max_connections =2000
#validate_password_policy=STRONG
#validate_password_length = 9
#validate_password_mixed_case_count= 5
#validate_password_number_count= 2
#validate_password_special_char_count= 1
#connection_control_failed_connections_threshold= 3
#connection_control_max_connection_delay =1800000
#connection_control_min_connection_delay= 600000
wait_timeout=1800
interactive_timeout=1800


[mysqldump]
quick
max_allowed_packet = 2G
default-character-set = utf8

7、初始化數據庫

cd /asop/mysql5.7.18/bin
./mysqld ----initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 

8、添加系統服務

cp -ar /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig mysqld on

二、加固參考

修改默認端口

vi /etc/my.cnf
 port=3307

清除用戶

#只需要查驗即可,新庫(5.7+)一般不會存在特殊用戶
	select user,host from mysql.user;
	delete from mysql.user where uer not in ('mysql.sys','mysql.session','mysqlxsys','root','mysql.infoschema') or host not in ('localhost');

設置本機管理員密碼

	set password for 'root'@'localhost' = password('P@ssw0rd');
	flush privileges;

清除默認庫

#只需要查驗即可,新庫(5.7)不存在測試庫
	show databases;
	drop database test;

創建遠程管理員賬戶

#避免直接使用root作爲遠程管理賬戶
	grant all on *.* to 'asop'@'%' identified by 'P@ssw0rd' with grant option;

確保讀取本地文件的參數設置爲失效

	Mysql命令行下,使用如下命令:
	show variables where variable_name = 'local_infile';
	查看結果是否爲OFF。
	如果該命令爲ON,則數據庫用戶可以通過LOAD DATA INFILE 或者 SELECT local_file 讀取到數據庫所在操作系統本地的文件,在這種情況下,需要在mysql配置文件中新增如下內容:
	[mysqld]
	local-infile=0
	[client]
	local-infile=0
	或者臨時生效使用 set global local_infile=off;
	然後重啓數據庫服務。

開啓錯誤日誌

	show variables like 'log_error';
	#確保結果不爲空,建議將日誌保存至非系統分區
	vi /etc/my.cnf
	[mysqld_safe]
	log-error=/asop/mysql57/log/errorlog/mysql_error.log

檢查是否存在匿名賬戶

	select * from mysql.user where user='';
	#存在則刪除
	delete from user where user='';

禁用符號鏈接

    vi /etc/my.cnf
    [mysqld]
    skip_symbolic_links=yes

限制單個用戶的連接數量

	#0爲不限制,可以無限建立連接,直到數據庫無法提供響應
    #查看現有配置
    show variables like 'max_user_connections';
	vi /etc/my.cnf
	[mysqld]
	max_user_connections=200	

設置MySQL的最大連接數

	#默認設置爲151,增大此值可以使數據庫響應更多的連接
	#查看現有配置
	show variables like 'max_connections';
	vi /etc/my.cnf
	[mysqld]
	max_connections = 3000

開啓慢查詢日誌

	#查詢慢查詢的定義時間
	show variables like 'long_query_time';
	#查詢慢查詢配置及路徑
	show status like '%slow_queries%';
	show variables like '%slow%';
	vi /etc/my.cnf
		slow_query_log = on
		long_query_time = 5
		slow_query_log_file=/asop/mysql5.7.18/logs/slowlog/slow-query.log

設置密碼複雜度策略

	#MySQL密碼複雜度依賴於validate_password插件,需要確認所用的版本中是否支持此插件
	#查看MySQL安裝目錄下面的 $mysql_basedir/lib/plugin 中是否存在validate_password.so文件
	#檢查mysql是否已經安裝validate_password插件
	show plugins;
	#安裝插件
	install plugin validate_password soname 'validate_password.so'
	#查看默認策略
	show variables like 'validate_password%';

	vi /etc/my.cnf
		#設置策略爲最高級,需要同時滿足長度和複雜度的要求,且要求密碼不能存放到字典中
		validate_password_policy STRONG
		#密碼要求的最小長度
		validate_password_length= 13
		#需要滿足的大小寫字母數
		validate_password_mixed_case_count= 5
		#需要滿足的數字的個數
		validate_password_number_count= 2
		#需要滿足的特殊字符數
		validate_password_special_char_count= 1

開啓登陸失敗處理功能

	#MySQL密碼複雜度依賴於connection_control插件,需要確認所用的版本中是否支持此插件
	#查看MySQL安裝目錄下面的 $mysql_basedir/lib/plugin 中是否存在connection_control.so文件
	#插件安裝
	install plugin connection_control soname 'connection_control.so'

	show variables like 'connection%';

	vi /etc/my.cnf
	#允許密碼失敗的次數
	connection_control_failed_connections_threshold= 3
	#鎖定的最長時間
	connection_control_max_connection_delay =1800000
	#鎖定的最短時間(毫秒)
	connection_control_min_connection_delay= 600000

設置超時時間

	#查看當前超時時間設置,根據使用場景來進行設置,若使用連接池進行連接,需要調整連接池的空閒丟棄連接的時間(maxidletime)小於以下設置的兩個值,若需要維持連接,則使用連接池進行檢查是否存在空閒連接,併發送一條查詢命令,維持連接,避免出現
連接池將已經被MySQL丟棄的超時連接繼續分配給連接池使用,導致程序報錯。
	show global variables like '%timeout%';
	vi /etc/my.cnf
	wait_timeout=1800
	interactive_timeout=1800

設置資源使用及審計功能

	#根據場景進行設置
	參考:https://blog.csdn.net/woshiji594167/article/details/103313980
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章