安装mysql

MySQL安全加固_mysql

下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysq1-5.6.33-linux-glibc2.5x86_64.tar.gz

MySQL安全加固_mysql_02

解压:tar -zxvfmysql-5.6.33-linux-glibc2.5-x86_64.tar.gz

MySQL安全加固_mysql_03

复制解压后的mysql目录:

cp-rmysql-5.6.33-linux-glibc2.5-x86 64 /usr/local/mysql

MySQL安全加固_数据库_04

MySQL安全加固_mysql_05

添加用户组

groupadd mysql

添加用户mysql到用户组mysql

useradd -g mysql mysql

以后使用数据库就用这个账号,否则就是默认当前的root账号来运行mysql。这样做是不安全的做法,如果遭受公鸡直接就可以获取最高权限。也没有必要用root权限来运行。

更新一下

sudo apt update

MySQL安全加固_mysql_06

根据不同的版本可能安装的命令也会不一样。

MySQL安全加固_数据库_07

MySQL安全加固_MySQL_08

进入到mysql的目录下

cd /usr/local/musql

修改当前目录拥有者为root用户

chown -R mysql:mysql ./

执行安装数据库的操作

./scripts/mysql_install_db --user=mysql

MySQL安全加固_数据库_09

报错缺失某些库

搜索一下这个名称的库,看看有没有,如果有就安装一下

apt search libaio
apt install libaio.so

MySQL安全加固_MySQL_10

然后再吧文件夹和权限所有者改回到root

chown -R mysql:mysql ./

只留一个data目录,是root可读可写的,将来吧数据库相关的库文件都放在data目录里

chown -R mysql:mysql data

MySQL安全加固_MySQL_11

MySQL安全加固_MySQL_12

添加开机启动:执行命令cp support-files/mysql.server/etc/init.d/mysql

MySQL安全加固_MySQL_13

拷贝一个系统服务的启动文件,把启动脚本放到开机初始化目录

ubuntu的命令是

update-rc.d mysql defaults

赋予可执行权限

chmod +x /etc/init.d/mysql

添加服务:chkconfig--add mysql

显示服务列表:chkconfig--list

启动mysql

service mysql start

查看服务端口是否启用

ss -pantu | grep 3306

MySQL安全加固_MySQL_14

ps -ef | grep mysqld

MySQL安全加固_数据库_15

MySQL安全加固_数据库_16

把mysql客户端放倒默认路径

In-s/usr/local/mysql/bin/mysql /usr/local/bin/mysql

MySQL安全加固_MySQL_17

查看数据库

show databases

MySQL安全加固_数据库_18

设置mysql密码

./bin/mysqladmin -u root password '123123'#设置密码为123123
mysql -uroot -p #登录mysql服务器,输入密码

MySQL安全加固_mysql_19

MySQL安全加固_MySQL_20

如果遇到以上的报错信息,按照一下的解决方法。

MySQL安全加固_MySQL_21

解决方法:打开/etc/my.cnf,看看里面配置的socket位置是什么目录。

“socket=/var/lib/mysql/mysql.sock”

路径和“/tmp/mysql.sock”不一致。建立一个软连接:

In-s /var/lib/mysql/mysql.sock /tmp/mysql.sock

到这里任务算是完成了。之后就可以创建数据库用户,然后使用数据库了。

MySQL安全加固_数据库_22

检查方法

查看mysql版本信息:

mysql> select version();

加固方法:安装最新版mysql,http://www.mysql.com

检查口令


MySQL安全加固_数据库_23

  • 安全基线项说明:确保数据库不存在弱口令,提高数据库安全性
  • 检查方法:

mysql>use mysql

mysql>select user,password from mysql.user,

将密码hash导入cain软件破接

  • 加固方法:

如要修改密码,执行如下命令:首先以root用户登录

mysql>use mysqlmysql>update user set password=password('复杂的新密码’) where user='test'

;mysql> flush privileges;

在MySQL中,检查用户口令(密码)的安全性通常涉及以下几个方面:

  1. 密码复杂度:确保密码足够复杂,不容易被猜测或暴力破接。这通常意味着密码应该包含大小写字母、数字和特殊字符的组合。
  2. 密码过期策略:设置密码的有效期限,强制用户定期更改密码,以减少密码泄露的风险。
  3. 密码历史记录:限制用户重复使用旧密码,以防止用户在密码泄露后简单地重新使用旧密码。
  4. 账户锁定策略:在多次登录失败后锁定账户,以防止暴力破接公鸡。

要检查MySQL用户的密码,你可以使用以下方法:

查看用户密码(不推荐)

在MySQL中,用户的密码是以加密形式存储的,通常不会直接显示明文密码。如果你是数据库管理员,可以使用以下命令查看用户的密码哈希值:

SELECT User, Host, authentication_string FROM mysql.user;

这将显示所有用户的用户名、主机和密码哈希值。请注意,这并不是实际的密码,而是密码的加密表示。

检查密码复杂度

MySQL 5.6.6及更高版本引入了密码验证插件,可以用来检查密码的强度。你可以使用以下命令查看是否启用了密码验证插件:

SHOW VARIABLES LIKE 'validate_password%';

这将显示与密码验证相关的系统变量及其值。如果启用了密码验证插件,你可以通过调整这些变量的值来设置密码复杂度的要求。

重置用户密码

如果你需要重置用户的密码,可以使用以下命令:

ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

请将usernamehostnew_password替换为相应的值。

密码过期策略

要设置密码的自动过期策略,可以使用以下命令:

ALTER USER 'username'@'host' PASSWORD EXPIRE INTERVAL 90 DAY;

这将设置用户的密码每90天过期一次。

账户锁定策略

MySQL没有内置的账户锁定策略,但你可以通过编写触发器或脚本来实现这一点。例如,你可以在登录失败次数达到一定阈值后,使用脚本自动锁定账户。

请记住,检查和维护密码安全是一个持续的过程,应该定期进行审计和更新。此外,确保你的MySQL服务器和应用程序都遵循最佳实践,以保护用户凭据不被泄露。

 

查看表

show tables

MySQL安全加固_MySQL_24

查看账户名和密码

select user,password from user;

MySQL安全加固_MySQL_25

可以看到root是账号password是加密后的密码

密码改为123456

update user set password=password('123456') where user-'root';

MySQL安全加固_MySQL_26

权限刷新一下,这个指令就生效了

flush privileges;

MySQL安全加固_MySQL_27

检查匿名账号

MySQL安全加固_MySQL_28

  • 安全基线项说明:确保数据库不存在匿名账户,提高数据库安全性
  • 检查方法:检查匿名帐户是否存在

mysql>use mysql;

mysql> select user,password from mysql.user;

存在user和password字段均为空的行

  • 加固方法

删除匿名帐户:

mysql>use mysql;

mysql>delete from user where user=";

mysql>flush privileges;

MySQL安全加固_mysql_29

将一些不用的、没人管理的账号删除掉。业务部门经常会来开一些系统账号或者设备账号,用完了应当及时处理。

  • 安全基线项说明:如果与业务和数据库无关账号,应该删除
  • 检查方法:检查数据库中的帐号

mysql>use mysql;

mysql> select user from mysql.user,

  • 加固方法:删除相关账号

mysql>use mysql;

mysql>delete from user where user='账号';mysql>flush privileges;

删除测试库

mysqI> DROP DATABASE test;

MySQL安全加固_mysql_30

数据库授权

MySQL安全加固_数据库_31

  • 检查方法:

查看用户权限:showgrantsfortestGlocalhost;

  • 加固方法:一般应用用户建议授予最小权限。

方法:

grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址例如:grant select,insert,delete on db.table to test@localhost;

#撤销权限

REVOKE SELECT, UPDATE ON DB.TABLE FROM USER1, USER2

文件安全

MySQL安全加固_MySQL_32

  • 安全基线项说明:合理设置数据库文件权限,防止非授权访问或篡改
  • 检查方法:确保重要的数据库文件没有任意可写权限或任意可读权限检查是否有不恰当的授权文件:

#ls -al.mysql history .bash history 应为600权限 #用户账号的主目录下面,当前系统账号登录了数据库,在数据库中执行了那些指令就会保存到这个文件里。如果管理不严公鸡者就可以查看文件看所有者都做了那些操作。

#ls -al /etc/my.cnf    应为644权限

#find /-name "*.MYD" |xargs ls -al应为600权限          包含mysql所有用户密码HASH

#find /-name "*.MYl" xargs ls -al应为600权限               索引文件

#find /-name "*.frm" xargs ls -al应为600权限              结构文件#以上文件都需要改成至少600的权限,看具体的需要。

  • 加固方法:保护数据库文件,授予恰当的权限:

#chmod 600 .mysql history .bash history

#chmod 600*.MYD*.MYl*.frm

#chmod o-rw /etc/my.cnf

日志审核

MySQL安全加固_mysql_33

安全基线项说明:合理设置日志审核,保证安全事件发生可查看日志记录

检查方法:查看my.cnf或my.ini文件,查看是否包含如下设置:

[mysqld]

log=filename

加固方法:在mysql的安装目录下,打开my.cnf或my.ini,在[mysqld]后面加上如下的参数,取消注释并配置日志文件,保存后重启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 default name will be used

#log-update=

运行账户

MySQL安全加固_数据库_34

安全基线项目名称:Mysqld服务以普通用户运行,防止数据库高权限被利用

检查方法:检查进程属主和运行参数是否包含--user=mysql类似语句:

ps -ef| grep mysqld

# grep -iuser /etc/my.cnf

加固方法:vi编辑/etc/my.cnf,设置如下:

[mysql.server]

user=mysql

可信的ip地址

就是设置白名单

MySQL安全加固_mysql_35

  • 安全基线项说明:只允许可信任的ip访问数据库,降低数据库风险
  • 检查方法:查看可访问数据库的ip和ip对应的账号

mysql> select user,host from mysql.user;

  • 加固方法:

mysqI> ALL PRIVILEGES ON *.* TO'可信任用户'@'可信任ip地址' IDENTIFIEDBY'可信用户密码' WITH GRANT OPTION;

MySQL安全加固_MySQL_36

ubuntu的mysql安全命令

sudo mysql_secure_installation 是一个命令,用于在Linux系统上通过MySQL数据库的安全配置向导来增强MySQL数据库的安全性。这个命令通常在MySQL数据库安装之后执行,以确保数据库的安全设置符合最佳实践。

执行 sudo mysql_secure_installation 后,系统会提示你进行一系列的安全配置选项,包括:

  1. 设置root用户的密码:如果你还没有为root用户设置密码,系统会提示你设置一个强密码。
  2. 删除匿名用户:匿名用户可能会被恶意用户利用,因此建议删除它们。
  3. 禁止root用户远程登录:通常情况下,root用户不应该允许从远程连接,以减少安全风险。
  4. 删除测试数据库:安装MySQL时会创建一个测试数据库,这个数据库通常是不需要的,应该将其删除。
  5. 更新权限表:在完成上述配置后,需要重新加载权限表,使新的设置生效。

以下是一个示例步骤:

sudo mysql_secure_installation 
 
Enter current password for root (enter for none): 
Change the root password? [Y/n] y 
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
Remove anonymous users? [Y/n] y 
... Success!
 
Disallow root login remotely? [Y/n] y 
... Success!
 
Remove test database and access to it? [Y/n] y 
... Success!
 
Reload privilege tables now? [Y/n] y 
... Success!

通过这个过程,你可以确保MySQL数据库的安全性得到加强,从而减少潜在的安全风险。

MySQL安全加固_mysql_37