为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Linux Ubuntu 环境下 MySQL 安装与安全优化

标签:
MySQL Linux
慕课网的小伙伴们!本次我将为大家介绍如何在Linux Ubnutu环境下进行MySQL的安装及其安全优化

sudo apt-get updatesudo apt-get install mysql-server mysql-client # 设置root密码

设置数据库目录

sudo mysql_install_db

移除匿名帐户,禁用root远程登录

sudo mysql_secure_installation # 回答n,y,y,y,y

设置默认字符集
中文环境下,设置 utf8 为默认字符集,防止出现乱码。

$ sudo vi /etc/mysql/my.cnf
[mysqld]
collation-server = utf8_unicode_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
:wq保存配置,重启MySQL
$ sudo service mysql restart
# 查看字符集设置
$ mysql -u root -p
show variables like 'char%';
show variables like 'collation%';

加强 MySQL 安全

迁移数据库目录 MySQL 数据库默认路径 /var/lib/mysql,实际工作中,常常需要定制数据库路径,比如 /data/mysql,或者 /opt/mysql,可以是单独的数据盘或者分区,这样有利于性能调优和保护数据安全,同时也方便进行维护。
使用 mysql_install_db 重新初始化 datadir :

mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
mysql_install_db --user=mysql --basedir=/usr --datadir=/data/mysql
rm -rf /var/lib/mysql

禁用远程访问等

$ sudo vi /etc/mysql/my.cnf
[mysqld]
datadir = /var/lib/mysql #数据库文件目录
bind-address = 127.0.0.1 #只允许本机访问,或
skip-networking #禁用网络(但本机可以访问)
skip-show-database #禁用SHOW DATABASES

可增加:

local-infile=0 #禁止加载本地文件,防止类似:SELECT load_file("/etc/passwd");
$ mysql -u root -p
use mysql
UPDATE user SET Host='localhost' WHERE Host="%";

用户名优化

DROP USER ""; # 或
DELETE FROM user WHERE User="";
RENAME USER root TO new_user; # 或
update user set user="new_user" where user="root"; # 或
rename user 'root'@'localhost' to 'newAdminUser'@'localhost';

密码优化

UPDATE user SET Password=PASSWORD('newPassWord') WHERE User="user"; # or
SET PASSWORD FOR 'username'@'%hostname' = PASSWORD('newpass');
select user,host,password from user;
FLUSH PRIVILEGES;

$ mysqladmin -u username -p password newpass

清空命令历史 客户端工具 mysql 会将执行的命令记录在当前用户目录下的 .mysql_history 文件中,其中可能包含密码等敏感信息。
cat /dev/null > ~/.mysql_history

使用日志 MySQL 日志包括错误日志、慢查询日志、一般日志和二进制日志,默认生成错误日志。在产品环境下,要合理使用日志,避免给系统增加不必要的压力。
配置文件

$ sudo vi /etc/mysql/my.cnf
log_error = /var/log/mysql/error.log

general_log_file = /var/log/mysql/mysql.log
log_slow_queries = /var/log/mysql/mysql-slow.log
log_bin = /var/log/mysql/mysql-bin.log
general_log = 1
long_query_time = 2
log-queries-not-using-indexes

/etc/mysql/conf.d/mysqld_safe_syslog.cnf
/etc/logrotate.d/mysql-server

查看配置

sudo service mysql restart
mysql> SHOW VARIABLES LIKE '%log%';

在代码中控制

SET GLOBAL general_log = 'ON';
SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log = 'OFF';

日志文件位置

/var/lib/mysql/{host_name}.log
/var/lib/mysql/{host_name}.err
/var/lib/mysql/{host_name}-slow.log
/var/log/mysql.err - MySQL Error log file
/var/log/mysql.log - MySQL log file
sudo ls -l /var/log/mysql*

日志监控查看

grep 'something' /var/log/mysql.err
tail -f /var/log/mysql/mysql.log
tail -f /var/log/mysql.err
tail -f /var/log/syslog
less /var/log/mysql.err

参考:http://www.pontikis.net/blog/how-and-when-to-enable-mysql-logs
使用SSL连接
查看SSL信息

mysql> SHOW VARIABLES LIKE '%ssl%';
mysql> \s
$ cat /etc/apparmor.d/usr.sbin.mysqld
...
/etc/mysql/*.pem r,

制作SSL证书

sudo su -
cd /etc/mysql
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 \
-key ca-key.pem -out ca-cert.pem

openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

openssl req -newkey rsa:2048 -days 3600 \
-nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem

配置服务端

$ sudo vi /etc/mysql/my.cnf
[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

重启 MySQL

$ sudo service mysql restart

创建使用SSL帐号

GRANT ALL PRIVILEGES ON . TO 'ssluser'@'%' IDENTIFIED BY 'pass' REQUIRE SSL;

配置客户端

$ sudo vi /etc/mysql/my.cnf
[client]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/client-cert.pem
ssl-key=/etc/mysql/client-key.pem
mysql -u ssluser -p -sss -e '\s' | grep SSL

参考:http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-certs.html
使用SSH远程访问 MySQL Workbench 是 MySQL 官方提供的数据库管理工具,免费跨平台,支持数据库建模,支持 MySQL 和 MariaDB,支持通过 SSH 访问远程 MySQL,即使将 MySQL 完全配置为本地访问也没有问题。当然,可以继续使用 phpMyAdmin 管理数据库。
好了,慕课网的小伙伴们,下次再见!~

点击查看更多内容
4人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Linux系统工程师
手记
粉丝
58
获赞与收藏
516

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消