一、SUDO,PAM配置规范说明
1.1 sudo
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
sudoers的别名
User和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
别名格式:
[A-Z]([A-Z][0-9]_)*
别名定义:
Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5
案例:
sudo bash -c “echo 1.2.3.4 www.test.com >> /etc/hosts”
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/ifconfig
NETADMIN ALL=(root) NETCMD
案例:
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
案例:
User_Alias ADMINUSER = adminuser1,adminuser2 Cmnd_Alias ADMINCMD =
/usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a zA-Z]*,
!/usr/bin/passwd root ADMINUSER ALL=(root)
NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
wang$ sudo cmd #默认代表tom执行cmd
wang$ sudo -u jerry cmd
wang ALL=(ALL) /bin/cat /var/log/messages*;!/bin/cat /var/log/messages* *
sudo -V
export EDITOR=vim
#修改sudo 提示符格式
sudo -p "password on %h for user %p: " cat /var/log/messages
总结:
root用户授予相应的权限给普通用户(权限最小化的原则),普通用户就可以不使用root密码来
实现root相应的权限,即使做了误操作,也能相应防护。
1.2 pam
介绍
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证
官网:
http://www.linux-pam.org/
PAM相关文件
- 包名: pam
- 模块文件目录:/lib64/security/*.so
- 特定模块相关的设置文件:/etc/security/
应用程序调用PAM模块的配置文件- 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
- 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
- 注意:如/etc/pam.d存在,/etc/pam.conf将失效
PAM原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证
文件(位于/lib64/security下)进行安全认证
PAM认证过程示例:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是
在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入
密码或者通过验证)
常用PAM模块
- pam_nologin.so 模块
功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文
件内容,并拒绝登陆
范例: 默认此模块可以对ssh等登录有效,但不影响su登录
根据/etc/pam.d/login的第四行来进行测试,这一行默认就有,不需要做任何修改
account required pam_nologin.so
[root@localhost ~]# touch /etc/nologin 发布信息并且拒绝除root管理员之外所有用户登录(只要有这个文件就拒绝登录)
- pam_limits.so 模块
# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
在Centos7以上版本中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作
用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对
systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf
与/etc/security/limits.d下的文件设置即可。
对于systemd service的资源设置,则需修改全局配置,全局配置文件放在/etc/systemd/system.conf
和/etc/systemd/user.conf,同时也会加载两个对应目录中的所有.conf文
件/etc/systemd/system.conf.d/*.conf和/etc/systemd/user.conf.d/*.conf。system.conf
是系统实例使用的,user.conf是用户实例使用的。
vim /etc/systemd/system.conf
DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535
或者针对指定的service添加下面行
[Service]
LimitNOFILE=100000
LimitNPROC=65535
- pam_google_authenticator 模块
什么是 MFA ?
Multi-Factor Authentication (MFA) 是一种简单有效的最佳安全实践方法,它能够在用户名和密码之
外再额外增加一层安全保护。
- pam_listfile黑白名单
可以通过查看/var/log/secure日志看到pam相关的拒绝信息
以ftp为例:
根据/etc/pam.d/vsftpd的第二行进行测试
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
vsftpd服务本身有一个黑白名单文件/etc/vsftpd/user_list,然后pam_listfile模块为vsftpd模块又加了一层黑白名单,也就是说vsftpd是双重黑白名单
- pam_time时间控制
[root@localhost ~]# vim /etc/pam.d/login
添加以下内容
account requisite pam_time.so
[root@localhost ~]# vim /etc/security/time.conf
在此文件加入需要设置的时间以致时间控制生效
login;*;zxc;Mo1148-1150
login: 登录
*: 代表终端类型
zxc: 用户名
Mo1148-1150: 修改的时间(此处指只可以在周一11:48到11:50可以登录)
- pam_tally2防止暴力破解密码
[root@localhost ~]# vim /etc/pam.d/sshd 加入下面这句代码
auth required pam_tally2.so deny=3 even_deny_root root_unlock_time=600 unlock_time=600
even_deny_root:表示对root用户也生效
deny=3 root_unlocak_time=600:表示root累积失败3次会锁定600s
deny=3 unlock_time=600:表示普通用户累积失败3次会锁定600s
可以通过pam_tally2 --user=root命令查看连续失败的次数。成功ssh登录后,失败次数会清零。
也可以使用pam_tally2 --user=root --reset把连续失败次数清零。
- pam_cracklib控制密码复杂度
[root@localhost ~]# vim /etc/pam.d/passwd
password required pam_cracklib.so minlen=8 minclass=2 difok=3 maxrepeat=3 maxsequence=5
minlen: 设置密码长度
minclass: 字符类型(数字、小写字母、大写字母、符号)
difok:表示新密码和旧密码需要变动的字符 (difok=3 表示新密码和旧密码需要变动3个字符)
maxrepeat:表示重复相同字节 如:33 666
maxsequence:表示连续字节 如:123 abc
- pam_securetty控制root本地登录
# vim /etc/pam.d/login 此文件默认有pam_securetty模块
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
# vim /etc/securetty
tty2 --只留下tty2,表示只能在tty2进行root用户登录(非root用户不受影响);还可以把这里的终端全去掉,实现root用户无法登录
注:在vmware虚拟里切换终端快捷键为alt+F1-F6来切换
二、 chrony搭建私有ntp服务
#服务器配置
yum -y install chrony
hostname -I
10.1.10.15
cat chrony.conf
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
#allow 192.168.0.0/16
allow 0.0.0.0/0 #加此行,指定允许同步的网段
## Serve time even if not synchronized to a time source.
#删除此行注释,当互联网无法连接,仍然可以为客户端提供时间同步服务
local stratum 10
systemctl restart chronyd
ss -ntulp | grep chrony
udp UNCONN 0 0 127.0.0.1:323 *:* users:(("chronyd",pid=820,fd=5))
udp UNCONN 0 0 ::1:323 :::* users:(("chronyd",pid=820,fd=6))
#客户端配置
yum -y install chrony
vim /etc/chrony.conf
server 10.1.10.15 iburst
systemctl restart chronyd.service
#确认同步成功
chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.1.10.15 3 6 17 50 +5861ns[ +35us] +/- 17ms
三、 说明CDN原理
- 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服
务器请求 - 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能
DNS负载均衡系统 - 智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
- 用户向该IP节点(CDN服务器)发出请求
- 由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原
站点服务器发起请求,并在CDN服务器上缓存内容 - 请求结果发给用户
四、 搭建智能DNS,实现不同地域客户端解析到不同主机
4.1环境准备
#2台机器均为centos8.2
#server 10.1.20.149
ip a a 100.0.0.149/24 dev ens192
yum install bind bind-utils -y
vim /etc/named.conf
acl beijingnet {
10.1.20.0/24;
10.1.10.0/24;
};
acl shanghainet {
100.0.0.0/24;
};
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
//include "/etc/named.rfc1912.zones";
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
cp -p magedu.org.zone magedu.org.zone.bj
cp -p magedu.org.zone magedu.org.zone.sh
vim magedu.org.zone.sh
$TTL 1D
@ IN SOA master admin.magedu.org. (
2019042210 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.1.20.149
www A 100.0.0.149
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh
vim /etc/named.rfc1912.zones.bj
#把name.conf的ca zone拷贝过来
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" IN {
type master;
file "magedu.org.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "magedu.org" IN {
type master;
file "magedu.org.zone.sh";
};
#web服务器10.1.20.149
yum install httpd -y
echo www.magedu.org > /var/www/html/index.html
systemctl start httpd
#client 10.1.20.150
ip a a 100.0.0.150/24 dev ens192
dig www.magedu.org @100.0.0.149
; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> www.magedu.org @100.0.0.149
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64068
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: fefa3547a1a095fb59b9194e63205c14cca5cd81a035a02e (good)
;; QUESTION SECTION:
;www.magedu.org. IN A
;; ANSWER SECTION:
www.magedu.org. 86400 IN A 100.0.0.149
;; AUTHORITY SECTION:
magedu.org. 86400 IN NS master.magedu.org.
;; ADDITIONAL SECTION:
master.magedu.org. 86400 IN A 10.1.20.149
;; Query time: 0 msec
;; SERVER: 100.0.0.149#53(100.0.0.149)
;; WHEN: 二 9月 13 18:31:48 CST 2022
;; MSG SIZE rcvd: 124
五、 解释DNS解析流程
DNS服务工作原理(递归查询:负责到底,迭代查询不会负责到底)
客户想访问www.baidu.com,不会全盘扫描都找一遍,找到对应的权威dns服务器去解析,但是树根只有一个,resolve.conf本地dns服务器去根找,根找不到去子域com去找,没有baidu是我的子域
Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递 归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS
ipconfig/displaydns #windows查缓存
#CentOS 启用DNS客户端缓存
yum -y install nscd
systemctl enable --now nscd
#Ubuntu 启用DNS客户端缓存(默认会启用DNS客户端缓存)
systemctl status systemd-resolved.service
区域数据库,第四个值是过期时间不同步,第五个值是不存在记录缓存时间,缓存时间可以单独定义
magedu.org. 86400 IN SOA ns.magedu.org. nsadmin.magedu.org. (
2015042201 ;序列号
2H ;刷新时间
10M ;重试时间
1W ;过期时间
1D ;否定答案的TTL值
)
面试题DNS 什么时候使用端口号 53/tcp 和 53/udp
服务器53drop掉udp53做解析,对用户对外提供支持的最主要端口
tcp、udp都参与复制,udp53可以实现查询,主从同步这2个端口都要打开,不打开同步失败tcp拉去、推送数据同步
六、 iptables 5表5链解释
netfilter 中五个勾子函数和报文流向
Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、
PREROUTING、POSTROUTING),而这五个hook function向用户开放
三种报文流向
- 流入本机:PREROUTING --> INPUT–>用户空间进程
- 流出本机:用户空间进程 -->OUTPUT–> POSTROUTING
- 转发:PREROUTING --> FORWARD --> POSTROUTING
五个内置链chain:
INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
五个表table:filter、nat、mangle、raw、security
- filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
- nat:network address translation 地址转换规则表
- mangle:修改数据标记位规则表
- raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
- security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
优先级由高到低的顺序为:
security -->raw–>mangle–>nat–>filter
表和链对应关系
七、 iptables/firewalld/nftable 实现主机防火墙。5000-6000端口仅192.168.0.0/24网段内的主机访问
#web10.1.20.149
#以离散方式定义多端口匹配,最多指定15个端口
iptables -A INPUT ! -s 10.1.20/24 -p tcp -m multiport --dports 5000:6000,80 -j REJECT
iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT ! -s 10.1.20.0/24 -p tcp -m multiport --dports 5000:6000,80 -j REJECT --reject-with icmp-port-unreachable
iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 2 112 REJECT tcp -- * * !10.1.20.0/24 0.0.0.0/0 multiport dports 5000:6000,80 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
#永久保存规则
yum -y install iptables-service
cp /etc/sysconfig/iptables{,.bak}
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables.service
systemctl mask firewalld.service nftables.service
#启动httpd服务
echo "www.magedu.org" >/var/www/html/index.html;systemctl start httpd
#firewalld 规则
systemctl start firewalld
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.1.20.0/24 port port=70-80 protocol=tcp accept'
firewall-cmd --reload
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.1.20.0/24" port port="70-80" protocol="tcp" accept
#nftable
nft list ruleset
nft add table inet test_table
nft add chain inet test_table test_filter_input_chain { type filter hook input priority 0 \; }
nft add rule inet test_table test_filter_input_chain handle 0 ip saddr 10.1.10.15 reject
#一条规则白名单,不是10.1.20.0网段的就抛弃
nft add rule inet test_table test_filter_input_chain handle 0 ip saddr != 10.1.20.0/24 tcp dport {70-80} reject
nft -a list ruleset
table inet test_table { # handle 1
chain test_filter_input_chain { # handle 1
type filter hook input priority filter; policy accept;
ip saddr 10.1.10.15 reject # handle 5
}
}
#单个规则只能通过其句柄删除,首先需要找到想删除的规则句柄
nft delete rule inet test_table test_filter_input_chain handle 5
#删除所有规则
nft flush ruleset
#列出指定表中规则
nft list table inet test_table
#列出指定链中的规则
nft list chain inet test_table test_filter_input_chain
#永久保存规则
cat /lib/systemd/system/nftables.service
#备份还原
nft list ruleset > /etc/sysconfig/nftables.conf
nft flush ruleset
systemctl restart nftables.service
#迁移iptables规则到nft
iptables-restore-translate -f rules.iptables > rules.nft
#安装之后,可以将iptables语法传递给iptables-translate命令,它将返回nftables等效的命令(centos8自带这个工具,来源iptables包)
apt install iptables-nftables-compat
#客户端10.0.0.200验证
curl 10.1.20.149
www.magedu.org
#客户端10.1.10.15验证
curl 10.1.20.149
curl: (7) Failed to connect to 10.0.0.8 port 80: Connection refused
[nftables语法及例子](https://www.cnblogs.com/mind-water/articles/10789606.html)
八、 mysql的各发行版有哪些 ?
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.1 -->5.5 -->10.0–> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5
九、 mysql索引的作用
在mysql中,索引可以用来快速查询数据表中有某一特定值的记录,大大加快数据的查询速度;在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。如果表中查询的列有一个索引,MySQL就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间;且通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
十、 mysql btree索引的原理
10.1 B-tree(查询效率时快时慢)
都要从树根去找,树叶中间没有关联,查的数据理论上有次序,但是中间没有任何关系,不知道下一个临近数据位子,记录根只能存16k数据,存放数据记录越少树越高,高IO次数多,效率越低
10.2 btree+索引(适用于范围性查找,左前缀逻辑搜索:以什么开头,包含或者以什么结尾不支持,因为排序安装第一个字母来排)
聚簇(集)索引、非聚簇索引:数据和索引是否存储在一起
查询的效率相对稳定的,因为无论查什么数据最终都要到叶子节点,树的高度不会很高、I/O次数少,根节点在内存中
**根、树枝只放索引不放数据,假设int类型4个字节16k/4B+指针6B **
面试题: InnoDB中一颗的B+树可以存放多少行数据?
叶子一条数据1k 16k(pag)/1k*1170(树枝pag16384B/(bigint8B+指针6B))*1170(树根同树枝指针数)
假设定义一颗B+树高度为2,即一个根节点和若干叶子节点。那么这棵B+树的存放总行记录数=根节点指针数*单个叶子记录的行数。这里先计算叶子节点,B+树中的单个叶子节点的大小为16K,假设每一条目为1K,那么 记录数即为16(16k/1K=16),然后计算非叶子节点能够存放多少个指针,假设主键ID为bigint类型,那么长 度为8字节,而指针大小在InnoDB中是设置为6个字节,这样加起来一共是14个字节。那么通过页大小/(主键ID大小+指针大小),即16384/14=1170个指针,所以一颗高度为2的B+树能存放16*1170=18720条这样的 记录。根据这个原理就可以算出一颗高度为3的B+树可以存放16*1170*1170=21902400条记录。所以在InnoDB中B+树高度一般为2-3层,它就能满足千万级的数据存储
十一、 mysql安全加固?
1: 修改默认端口
mysql的端口默认是3306,也是病毒攻击mysql数据库时的首选端口,我们可以通过修改mysql的配置文件,把默认端口改成一个其它人很难想到的端口,如3901.
如果病毒再攻击,也要先具备扫描指定IP的端口能力才行。
2:修改root用户
MySQL的默认用户root,是很容易被黑客拿来做暴力破解的,我们可以把默认的用户改掉,从数据库中删除,避免黑客对这个默认用户名进行暴力破解。
需要注意的是,删除root用户之前,应额外创建一个具有超级管理员权限的用户,便于DBA进行管理。
3:添加密码安全策略
mysql的密码默认情况下,没有复杂度要求,密码设的过于简单,可能会被病毒程度猜到,我们需要设置一个足够复杂的密码。同时添加密码复杂度验证插件,如果其它人添加用户创建密码也必须满足复杂度要求。例如下面的设置:
plugin-load=validate_password.dll
validate_password_policy=0
validate-password=FORCE_PLUS_PERMANENT
validate_password_number_count=1 //密码必须包含至少1个数字
validate_password_special_char_count=1 //密码必须至少包含一个特殊字符
4:添加连接控制策略
如下所示:
plugin-load-add=connection_control.dll
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection_control_failed_connections_threshold=10
5:用户权限指定IP
授予用户权限时,每次都指定IP,去掉%权限,任何机器或者客户端想要连接进来,都要添加IP赋权,否则无法访问
6:开启域名解析
skip-name-resolve 是个不错的参数,能避免跨IP跨域访问的机器可能会因为域名解析失败导致无法访问服务器的问题;
但是也会间接降低服务器的安全性;
我们可以把域名解析的问题交给专业的DNS服务器去做,也可以在数据库服务器操作系统本身添加IP和域名的映射,然后在数据库中去掉这个参数;
所有跨域的机器都必须由管理员添加映射,否则无法访问。这样可以进一步降低数据库的风险。
同时skip-grant-tables这个参数绝对不能出现在配置文件中,不允许出现不要验证就能访问数据库的情况。
7:表文件加密
early-plugin-load=keyring_file.dll
#设置加密key存放路径
keyring_file_data=D:/ProgramData/MySQL/keyring/data
我们通过配置keyring插件,来实现给表文件加密,虽然对mysql来说,这不是一个非常值得称赞的安全措施,但是还是能够防止相当一部分不精与此道的病毒或者黑客破解数据库的数据的。
当然,上述的配置只是一部分,我们还需要在创建表结构的语句中制定表解密,来实现表文件的加密。
8:彻底关闭远程访问
如果你的数据库不需要远程访问,应用程序和数据库服务部署在同一台服务器,我们可以添加
skip-networking 这个参数来彻底关闭其它客户端的访问。
这个时候如果确有需要某些IP访问的话,可以用绑定IP的方式: bind-address=192.168.1.100 这样只允许绑定的IP能够访问数据库服务器。
9:SSL连接
Mysql可以配置SSL,让客户端连接必须通过SSL来连接。
如:
ssl-ca=/root/ca/ca.pem
ssl-cert=/root/ca/server.pem
ssl-key=/root/ca/key.pem
添加SSL证书后重启mysql服务;再修改用户登录策略:
单向认证(必须使用SSL登录,不验证证书):
update user set ssl_type=‘ANY’ where user=‘ssl_test’;
flush privileges;
双向认证(必须使用SSL登录,并且验证证书):
update user set ssl_type=‘X509’ where user=‘ssl_test’;
flush privileges;
这样的话用户就必须按照指定的SSL连接才能登录mysql
10:添加windows认证
plugin-load=authentication_windows.dll 详细的大家可以看mysql官方手册,通过 这个配置最终可以实现只允许域服务器的指定用户来访问mysql
11:数据库备份