N77-第五周作业

发布时间 2023-07-09 17:44:54作者: 骄骄爹地

N77-第五周作业

1. SUDO,PAM配置规范说明

1.1SUDO

  • 配置文件
  • 时间戳文件
  • 日志文件
  • 配置文件支持使用通配符glob
  • visudo
  • 授权规则格式
  • sudo别名
  • 示例
  • sudo命令

1.1.1配置文件

/etc/sudoers, /etc/sudoers.d/

1.1.2时间戳文件

/var/db/sudo

1.1.3日志文件

/var/log/secure

1.1.4配置文件支持使用通配符glob

? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母 示例: /bin/ls [[alpha]]*

1.1.5visudo

通过visudo命令编辑配置文件,具有语法检查功能

#检查语法
visudo -c
#检查指定配置文件语法
visudo -f /etc/sudoers.d/test

1.1.6授权规则格式

用户 登入主机=(代表用户) 命令
user host=(runas) command
root ALL=(ALL) ALL

user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令

1.1.7sudo别名

sudo别名四种类型

  • User_Alias

  • Runas_Alias

  • Host_Alias

  • Cmnd_Alias

别名格式

[A-Z]([A-Z][0-9]_)*

1.1.8示例

%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: ALL

User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
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 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd

1.1.9sudo命令

sudo –i –u wang 切换身份
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p ”password on %h for user %p:”

1.2PAM

  • PAM 认证机制
  • PAM 相关文件
  • PAM 配置文件
  • PAM 配置文件格式
  • 实现范例

1.2.1PAM 认证机制

PAM 认证机制:一种用于实现应用程序的通用认证机制

PAM认证

① 系统管理员通过 PAM 配置文件制定不同应用程序的不同认证策略

② 应用程序开发者通过在服务程序中使用 PAM API 来实现对认证方法的调用

③ PAM服务模块开发者利用 PAM SPI 编写模块,供 PAM 接口库调用

PAM 认证顺序:Service(服务) ----> PAM(服务调用模块的配置文件) ----> 模块(pam_*.so)

在配置 PAM 之前,首先查看程序是否支持 PAM

范例:其 sshd、httpd 为需要查看的程序名

#支持
[root@ljh-rocky ~]# ldd `which sshd` | grep pam
	libpam.so.0 => /lib64/libpam.so.0 (0x00007f646a909000)
#不支持
[root@ljh-rocky ~]# ldd `which sshd` | grep pam
[root@ljh-rocky ~]#

1.2.2PAM 相关文件

/lib64/security/*.so		# 模块文件目录
/etc/security			# 复杂模块的专有配置文件
/etc/pam.d/			# 服务调用模块的配置文件

1.2.3PAM 配置文件

PAM 配置文件:/etc/pam.d/

  • 注意:修改 PAM 配置文件将马上生效
  • 建议:编辑 PAM 规则时,保持至少打开一个 root 会话,以防止 root 身份验证错误
需要注意的是,systemd 的 service 资源设置需要单独配置

1.2.4PAM 配置文件格式

type 		control 		module-path 		arguments
工作类别	 控制模式		   模块路径				模块参数

type			# 指模块类型,即功能
control			# 处理该服务与模块功能的成功或失败的情况
module-path		# 模块对应的程序文件的路径名
arguments		# 传递给该模块的参数

1.2.5实现范例

# 修改模块专有配置文件
[root@test ~]# vim /etc/security/limits.conf
* 	- 	core 		unlimited		# 限制内核文件的大小
* 	- 	nproc 		1000000			# 开启进程/线程的最大数目
* 	- 	nofile 		1000000			# 可以打开文件的最大数目
* 	- 	memlock 	32000			# 最大锁定内存地址空间

2. chrony搭建私有ntp服务

  • 安装chrony
  • 服务器端配置
  • 客户端配置

2.1两台机器安装chrony

[root@ljh-rocky ~]# hostname -I
192.168.93.130     #服务器端
[root@ljh-rocky ~]# yum -y install chrony

[root@ljh-rocky ~]# yum -y install chrony
[root@ljh-rocky ~]# hostname -I
192.168.93.132	   #客户端

2.2服务器端配置

打开配置文件:vim /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
#pool 2.rocky.pool.ntp.org iburst
server ntp.aliyun.com iburst			#阿里云
server time1.cloud.tencent.com iburst	#腾讯

# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 0.0.0.0/0							#指定允许同步的网段

设置开机启动

[root@ljh-rocky ~]#systemctl enable --now chronyd

查看服务器端端口123/udp

[root@ljh-rocky ~]# ss -nul
State          Recv-Q         Send-Q                   Local Address:Port                   Peer Address:Port         Process         
UNCONN         0              0                            127.0.0.1:323                         0.0.0.0:*                            
UNCONN         0              0                            127.0.0.1:53                          0.0.0.0:*                            
UNCONN         0              0                            127.0.0.1:53                          0.0.0.0:*                            
UNCONN         0              0                              0.0.0.0:123                         0.0.0.0:*                            
UNCONN         0              0                                [::1]:323                            [::]:*                            
UNCONN         0              0                                [::1]:53                             [::]:*                            
UNCONN         0              0                                [::1]:53                             [::]:*                    

服务器端chronyd服务配置完成

2.3客户端配置

打开配置文件:vim /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
#server ntp.aliyun.com iburst
#server time1.cloud.tencent.com iburst
server 192.168.93.130 iburst    #添加服务器端ip

设置开机启动

[root@ljh-rocky ~]#systemctl enable --now chronyd

查看服务器端端口323/udp

[root@ljh-rocky ~]# ss -nul
State       Recv-Q      Send-Q             Local Address:Port             Peer Address:Port      Process      
UNCONN      0           0                 192.168.93.132:53                    0.0.0.0:*                      
UNCONN      0           0                 192.168.93.132:53                    0.0.0.0:*                      
UNCONN      0           0                      127.0.0.1:53                    0.0.0.0:*                      
UNCONN      0           0                      127.0.0.1:53                    0.0.0.0:*                      
UNCONN      0           0                      127.0.0.1:323                   0.0.0.0:*                      
UNCONN      0           0                          [::1]:53                       [::]:*                      
UNCONN      0           0                          [::1]:53                       [::]:*                      
UNCONN      0           0                          [::1]:323                      [::]:* 

确认同步成功(IP前面带*)

[root@ljh-rocky ~]# 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               
===============================================================================
^+ 203.107.6.88                  2   6   377    52  -5493us[-6366us] +/-   45ms
^* 106.55.184.199                2   6   377    53  +5838us[+4965us] +/-   60ms

3.说明CDN原理

具体来说,CDN就是采用更多的缓存服务器(CDN的边缘节点)分布于用户访问相对集中的地方,当用户访问的时候,利用全局负载技术,将用户的访问重定向到距离最近的缓存服务器上,由缓存服务器响应用户的请求,完成访问过程。

CDN的优点:本地cache加速,提高了企业站点的访问速度(尤其含有大量图片和静态页面站点)跨运营商的网络加速,保证不同网络的用户都能得到良好的访问质量远程访问用户权限根据DNS负载均衡技术智能自动选择cache服务器自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻源站点web服务器负载等功能广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效预防黑客入侵。

CDN 镜像服务器 备注
智能缓存内容 完全复制源服务器 CDN更灵活,智能程度更高
具有流量疏导功能 不具备
减轻了骨干网压力 不及备

CDN请求过程图

在这里插入图片描述

步骤1:用户访问域名url,会首先请求本地DNS解析
步骤2:本地DNS将请求转交给CDN专用DNS解析
步骤3:CDN专用服务器将解析结果IP返回本地DNS服务器
步骤4:本地DNS将解析结果IP返回给用户
步骤5:用户根据解析结果IP访问CDN负载均衡系统【该系统底下有众多的CDN缓存服务节点】
步骤6:CDN负载均衡系统计算出最实惠路径和最近的CDN缓存服务节点
步骤7:CDN负载均衡系统将CDN缓存服务的IP返回给用户
步骤8:用户根据返回的CDN缓存服务器IP访问该服务器
步骤9:CDN缓存服务节点响应用户请求完成整个访问过程。
步骤10:如果CDN缓存服务节点上没有用户请求的资源,就会向源内容服务器同步缓存
步骤11:源内容服务器给CDN缓存服务器同步缓存数据

4. 搭建智能DNS,实现不同地域客户端解析到不同主机

  • 环境准备
  • DNS 服务器的网卡配置
  • 主DNS服务端配置文件实现 view
  • 实现区域配置文件
  • 创建区域数据库文件
  • 实现位于不同区域的三个WEB服务器
  • 客户端测试

4.1环境准备

需要五台主机

  1. DNS主服务器和web服务器1:10.0.0.8/24,172.16.0.8/16
  2. web服务器2:10.0.0.7/24
  3. web服务器3:172.16.0.7/16
  4. DNS客户端1:10.0.0.6/24
  5. DNS客户端2:172.16.0.6/16

前提准备

  1. 关闭SElinux
  2. 关闭防火墙
  3. 时间同步

4.2DNS 服务器的网卡配置

#配置两个IP地址
#eth0:10.0.0.8/24
#eth1: 172.16.0.8/16
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group
default qlen 1000
link/ether 00:0c:29:f9:8d:90 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group
default qlen 1000
link/ether 00:0c:29:f9:8d:11 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.8/16 brd 172.16.0.255 scope global noprefixroute eth1

4.3主DNS服务端配置文件实现 view

yum install bind -y
 
vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
10.0.0.0/24;
};
acl shanghainet {
172.16.0.0/16;
};
acl othernet {
any;
};
 
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
 
#其它略
 
# 创建view
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
 

4.4实现区域配置文件

vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.bj";
};
 
vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.sh";
};
 
vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.other";
};
 
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
chgrp named /etc/named.rfc1912.zones.other

4.5创建区域数据库文件

vim /var/named/magedu.org.zone.bj
$TTL 1D
@ IN SOA master admin.magedu.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 10.0.0.7
www CNAME websrv
 
vim /var/named/magedu.org.zone.sh
$TTL 1D
@ IN SOA master admin.magedu.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 172.16.0.7
www CNAME websrv
 
vim /var/named/magedu.org.zone.other
$TTL 1D
@ IN SOA master admin.magedu.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 127.0.0.1
www CNAME websrv
 
chgrp named /var/named/magedu.org.zone.bj
chgrp named /var/named/magedu.org.zone.sh
chgrp named /var/named/magedu.org.zone.other
 
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务

4.6实现位于不同区域的三个WEB服务器

#分别在三台主机上安装http服务
#在web服务器1:10.0.0.8/24实现
yum install httpd
echo www.magedu.org in Other > /var/www/html/index.html
systemctl start httpd
#在web服务器2:10.0.0.7/16
echo www.magedu.org in Beijing > /var/www/html/index.html
systemctl start httpd
#在web服务器3:172.16.0.7/16
yum install httpd
echo www.magedu.org in Shanghai > /var/www/html/index.html
systemctl start httpd

4.7客户端测试

#分别在三台主机上访问
#DNS客户端1:10.0.0.6/24 实现,确保DNS指向10.0.0.8
curl www.magedu.org
www.magedu.org in Beijing
#DNS客户端2:172.16.0.6/16 实现,确保DNS指向172.16.0.8
curl www.magedu.org
www.magedu.org in Shanghai
#DNS客户端3:10.0.0.8 实现,,确保DNS指向127.0.0.1
curl www.magedu.org
www.magedu.org in Other

5.解释DNS解析流程

  • DNS服务工作原理
  • DNS解析流程
  • 递归查询
  • 迭代查询
  • DNS缓存

5.1DNS服务工作原理

img

5.2DNS解析流程

1.客户端提出域名解析请求,并将请求发送给本地域名服务器

2.本地域名服务器收到请求后,首先查询本地缓存,如果有这条记录,则本地域名服务器直接返回查询结果

3.如果本地缓存没有记录,则本地域名服务器直接向根域名服务器发送请求,然后根域名服务器返回域的主域名(根的子域)的本地域名服务器。服务器的地址

4.本地服务器向上一步返回的域名服务器发送请求后,然后接受请求的服务器查询自己的缓存,如果没有该记录,则返回相关下级域名服务器端的地址

5.重复地4条,直到找到正确的记录

6.本地域名服务器将返回的结果保存到缓存中以备下次使用,并将结果返回给客户端

5.3递归查询

是指DNS服务器在收到用户发送的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。

5.4迭代查询

是指DNS服务器在收到用户发送的请求时,并不直接回复查询结果,而是告诉另一台服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。

5.5DNS缓存

DNS缓存是将数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位置,最终目的是在此减少递归查询过程,可以提高用户请求响应速度。

6.iptables 5表5链解释

img

五链:

INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

五链解释:
INPUT, 进内核(包含:filter,mangle)
OUTPUT, 出内核(包含:filter,nat,mangle,raw)
FORWARD, 转发(包含:filter,mangle)
PREROUTING,前置路由检查(包含:nat,mangle,raw)
POSTROUTING 后置路由检查(包含:nat,mangle,raw)

五表:

security -->raw-->mangle-->nat-->filter

五表解释:
filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
nat:network address translation 地址转换规则表
mangle:修改数据标记位规则表
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现。

7.iptables/firewalld/nftable 实现主机防火墙。5000-6000端口仅192.168.0.0/24网段内的主机访问

iptables

[root@ljh-rocky ~]# iptables -A INPUT ! -s 192.168.0.0/24 -p tcp -m multiport --dports 5000:6000 -j REJECT

[root@ljh-rocky ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     tcp  --  *      *      !192.168.0.0/24       0.0.0.0/0            multiport dports 5000:6000 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination  

firewalld

[root@ljh-rocky ~]#systemctl start firewalld.service

[root@ljh-rocky ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="5000:6000" accept"

nftable

[root@ljh-rocky ~]#nft add rule ip filter INPUT ip saddr 192.168.0.0/24 tcp dport {5000-6000} ct state new,established counter accept

8.mysql的各发行版有哪些 ?

MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。

MySQL Enterprise Edition 企业版本,需付费,可以试用30天。

MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。

MySQL Cluster CGE 高级集群版,需付费。

MySQL Workbench(GUITOOL)一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。MySQLWorkbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL WorkbenchSE)。

9.mysql索引的作用

  • 索引是什么
  • 索引类型分类
  • 索引结构分类
  • 索引的正确使用

9.1索引是什么

首先我们可以举个例子,字典大家应该都使用过,我们可以使用目录快速定位到所要查找的内容,那么索引跟目录的作用类似,在数据库表记录中,利用索引,可以快速过滤查找到数据记录。

9.2索引类型分类

  1. 普通索引:加快查询速度
  2. 唯一索引:加快查询速度,并且可以限制列值的唯一性,允许为空,唯一索引包括联合唯一索引,多列形成的唯一索引,这些列可以唯一确定一条表记录,可以为空
  3. 全文索引:主要针对文本的内容进行分词,加快查询速度
  4. 联合索引:多列组成的索引,查询效率提升高于多个单列索引合并的效率
  5. 主键索引:主键唯一性,加快查询速度,不能为空

9.3索引结构分类

  1. B-tree索引:B-tree 索引普遍存在于存储引擎中,他使用B-tree数据结构来存储数据,如果对树形数据结构比较了解的话,就知道B-tree索引所带来的好处了,他的每个叶子节点都会包含下一个节点的指针,非常方便查询数据,B-tree 适用于全键值,键值范围,或者前缀查找
  2. 哈希索引:哈希索引基于哈希表实现,对于每一行数据,存储引擎会对所有的索引列计算一个哈希码,然后存储引擎会基于这个哈希码来查找数据,小编感觉有点像HashMap 中槽的查询过程
  3. 全文索引:全文索引在几种索引结构类型中比较特殊,他查找的是文本中关键词

9.4索引的正确使用

索引是建立在系统文件上的,会占用一定的内存空间,另外数据在更新的时候也会去维护索引,消耗内存,所以索引一定要正确的使用,索引并不是越多越好,要根据具体的查询业务来规划索引的建立。

建议不要使用索引的几种情况:

  1. 区分度不是很大的字段,例如 性别 sex
  2. 频繁更新的字段
  3. 字符串类型的字段 或者 文本类型的字段
  4. 不在where列中出现的索引

索引失效的几种情况:

  1. 查询列中有函数计算
  2. 查询列中有模糊查询,"%cloum",可以使用"cloum%" 代替,如果要使用"%column%",那么select 列中是索引列
  3. 如果查询条件中有or, 索引会失效,除非所有条件都加上索引
  4. 使用不等于(!= 或者 <>)
  5. is null 或者 is not null
  6. 字符串不加引号,会导致索引失效
  7. 最左原则,联合索引中会遵循最左原则,即如果要使用联合索引,那么前面的索引列一定要包含,举个例子,

​ 有个联合索引(a,b,c) 那么查询条件中只能是 a=1 或者 a=1 and b=1 或者 a=1 and b=1 and c=1,不然索引就会失效

10.mysql btree索引的原理

img

B+ 树是一种树数据结构,是一个n叉排序树,每个节点通常有多个孩子,一棵B+树包含根节点、内部节点和叶子节点。

B-Tree
为了描述B-Tree,首先定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同数据记录,key是互不相同的;data为数据记录除key外的数据。那么B-Tree是满足下列条件的数据结构:

d为大于1的一个正整数,称为B-Tree的度。
h为一个正整数,称为B-Tree的高度。
每个非叶子节点由n-1个key和n个指针组成,其中d<=n<=2d。
每个叶子节点最少包含一个key和两个指针,最多包含2d-1个key和2d个指针,叶节点的指针均为null 。
所有叶节点具有相同的深度,等于树高h。
key和指针互相间隔,节点两端是指针。
一个节点中的key从左到右非递减排列。
所有节点组成树结构。
每个指针要么为null,要么指向另外一个节点。
如果某个指针在节点node最左边且不为null,则其指向节点的所有key小于v(key1)v(key1),其中v(key1)v(key1)为node的第一个key的值。
如果某个指针在节点node最右边且不为null,则其指向节点的所有key大于v(keym)v(keym),其中v(keym)v(keym)为node的最后一个key的值。
如果某个指针在节点node的左右相邻key分别是keyikeyi和keyi+1keyi+1且不为null,则其指向节点的所有key小于v(keyi+1)v(keyi+1)且大于v(keyi)v(keyi)。

11. mysql安全加固

11.1空密码与有效期

执行如下执行SQL语句检查密码是否为空:

select user,host from mysql.user where length(authentication_string) = 0;
或
select user,host,authentication_string,password_lifetime,account_locked from mysql.user;
+------------------+-------------+------------------------------------------------------------------------+-------------------+
| user             | host        | authentication_string                                                  | password_lifetime |
+------------------+-------------+------------------------------------------------------------------------+-------------------+
| ljh              | 192.168.%.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9                              | <null>            |
| wordpress        | 192.168.%.% | $A$005$n^F%Rv=Vt)"(^]r^P@wqR0dHAHCMu2XdOy.cjokaWQBm/w6yWjvmhiH9bEsOj.                                                                        | <null>            |
| mysql.infoschema | localhost   | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | <null>            |
| mysql.session    | localhost   | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | <null>            |
| mysql.sys        | localhost   | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | <null>            |
| root             | localhost   | *0AFE1BCAD7522B4099DB452924B407953FDFE2AE                              | <null>            |
+------------------+-------------+------------------------------------------------------------------------+-------------------+

修改用户密码:

set password = password('Test@123.com');						#修改当前用户			
set password for 'test'@'%'='Lyp@123.com';						# 修改test用户的密码

设置密码有效期

MySQL root@(none):(none)> show global variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 0     |
+---------------------------+-------+
 vim /etc/my.cnf  #打开配置文件
 #设置密码有效期
 default_password_lifetime = 180

11.2设置密码复杂度

打开配置文件

plugin-load = "validate_password.so"
validate-password = FORCE_PLUS_PERMANENT		# 强制启用该插件,不能被卸载
validate_password_length = 8 					# 密码位数
validate_password_policy = 1                    # 密码强度为medium或者1 
validate_password_mixed_case_count = 1 			# 至少有大小写字母
validate_password_number_count = 1 				# 最少一个数字
validate_password_special_char_count = 1 		# 最少一个符号

11.3远程登录限制

如非业务需要应该禁止远程登录或者禁止以root用户登录mysql

select user,host from mysql.user where user='root';

启用ssl连接进行加密,如果本地管理不适用,如果是远程连接查看是否开启SSL加密组件,执行如下命令查看

show variables like "%have_ssl%";
show variables like "%have_openssl%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |       #已启用ssl
+---------------+-------+

1 row in set
Time: 0.185s

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
+---------------+-------+