云计算 SRE 运维 —— 第五周

  1. SUDO、PAM 配置规范说明
  2. Chrony 搭建私有 NTP 服务
  3. 说明 CDN 原理
  4. 搭建智能 DNS,实现不同地域客户端解析到不同主机
  5. 解释 DNS 解析流程
  6. iptables 5表 5链 解释
  7. iptables/firewalld/nftable 实现主机防火墙。5000-6000 端口仅 192.168.0.0/24 网段内的主机访问
  8. MySQL 的各发行版有哪些?
  9. MySQL 索引的作用
  10. MySQL Btree 索引的原理
  11. MySQL 安全加固?

sudo 授权

sudo 介绍:① 授权指定用户执行超级用户命令; ② 提供日志,详细记录用户操作记录

授权规则配置文件:/etc/sudoers, /etc/sudoers.d/

配置文件支持使用通配符

# 格式
USER HOST=(RUNAS) COMMAND

# 说明
USER			# 运行命令者的身份
HOST			# 通过哪些主机
RUNAS			# 以哪个用户的身份
COMMAND			# 运行哪些命令

# 范例:默认允许 root 用户执行所有命令
root ALL=(ALL) ALL

# 范例:允许 user01 用户以 root 用户的身份执行所有命令
user01 ALL=(root) ALL

sudo 授权规则还支持别名

1. User_Alias		# 运行命令者
2. Runas_Alias		# 以哪个用户的身份
3. Host_Alias		# 通过哪些主机
4. Cmnd_Alias		# 运行哪些命令

# 范例
User_Alias User01 = zhangsan,lisi,wangwu

PAM 认证

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

PAM认证

① 系统管理员通过 PAM 配置文件制定不同应用程序的不同认证策略; ② 应用程序开发者通过在服务程序中使用 PAM API 来实现对认证方法的调用; ③ PAM服务模块开发者利用 PAM SPI 编写模块,供 PAM 接口库调用

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

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

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

# 支持
[root@test ~]# ldd `which sshd` | grep pam
	libpam.so.0 => /lib64/libpam.so.0 (0x00007f886c4f1000)
	
# 不支持
[root@test ~]# ldd `which httpd` | grep pam
[root@test ~]# 

PAM 相关文件:

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

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

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

需要注意的是,systemd 的 service 资源设置需要单独配置

PAM 配置文件格式:

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

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

实现范例:

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

Chrony 时间同步

Chrony 是 Linux 中实现永久时间同步的一个服务,由 chrony 包提供,C/S 架构,服务端监听在 123/udp 端口, 客户端监听在 323/udp 端口

实现永久时间同步,搭建 NTF 服务器,需要修改 Chrony 的配置文件 /etc/chrony.conf

# 配置文件主要项
server				# 用于时钟服务器
pool				# NTP服务器池
allow				# 允许或拒绝访问本服务器
local stratum 10		# 即使服务端时间服务器不可达,也允许将本地时间同步给其它客户端

范例:搭建私有 NTP 服务

架构图

服务端配置

# 安装 chrony 工具
[root@master ~]# yum install -y chrony

# 修改配置文件
[root@master ~]# vim /etc/chrony.conf
# pool 2.pool.ntp.org iburst
server ntp1.aliyun.com iburst
server s1b.time.edu.cn iburst
server ntp1.tencent.com iburst

allow 0.0.0.0/0

local stratum 10

# 启动服务
[root@master ~]# systemctl enable --now chronyd

# 查看状态
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- 120.25.115.20                 2   6    17    29  -2693us[-2693us] +/-   11ms
^+ 203.107.6.88                  2   6    17    29  +2359us[+2359us] +/-   41ms
^* 139.199.215.251               2   6    17    31   -783us[ -520us] +/-   18ms

客户端配置

# 安装 chrony 工具
[root@slave01 ~]# yum install -y chrony
    
# 查看 maste r服务器 IP
[root@master ~]# hostname -I
10.0.0.11 
    
# 修改配置文件
[root@slave01 ~]# vim /etc/chrony.conf
# pool 2.pool.ntp.org iburst
server 10.0.0.11 iburst
	
# 启动服务
[root@slave01 ~]# systemctl enable --now chronyd
	
# 5. 查看状态
[root@slave01 ~]# chronyc sources -vn
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 10.0.0.11                     3   6    37    18   +728ns[ +299us] +/-   13ms

实现智能 DNS

GSLB:Global Server Load Balance全局负载均衡

原理:对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证

目的:在整个网络范围内将用户的请求定向到最近的节点(或者区域)

实现:基于DNS实现*、基于重定向实现、基于路由协议实现

主DNS服务器操作

  1. 配置网卡
 [root@master01 ~]# hostname -I
 10.0.0.10 20.0.0.10
  1. 主配置文件vim /etc/named.conf
 # 在最上方添加
 acl beijingnet {
     10.0.0.0/24;
 };
 
 acl shanghainet {
     20.0.0.0/24;
 };
 
 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.beijing";
 };
 
 view shanghaiview {
     match-clients { shanghainet; };
     include "/etc/named.rfc1912.zones.shanghai";
 };
 
 view otherview {
     match-clients { othernet; };
     include "/etc/named.rfc1912.zones";
 };
 
 # 删除此行
 include "/etc/named.rfc1912.zones;
  1. 区域配置文件
 [root@master01 ~]# vim /etc/named.rfc1912.zones
 zone "." IN {
     type hint;
     file "named.ca";
 };
 
 zone "test.com" IN {
     type master;
     file "test.com.zone";
 };
 
 [root@master01 ~]# vim /etc/named.rfc1912.zones.beijing
 zone "." IN {
     type hint;
     file "named.ca";
 };
 
 zone "test.com" IN {
     type master;
     file "test.com.zone.beijing";
 };
 
 [root@master01 ~]# vim /etc/named.rfc1912.zones.shanghai
 zone "." IN {
     type hint;
     file "named.ca";
 };
 
 zone "test.com" IN {
     type master;
     file "test.com.zone.shanghai";
 };
  1. 区域数据库文件
 [root@master01 ~]# vim /var/named/test.com.zone
 $TTL 1D
 @   IN      SOA     master  test.com. ( 1 1D 6H 1W 1D )
             NS      master
 
 master      A       10.0.0.10
 
 [root@master01 ~]# vim /var/named/test.com.zone.beijing
 $TTL 1D
 @   IN      SOA     master  test.com. ( 1 1D 6H 1W 1D )
             NS      master
 
 master      A       10.0.0.10
 www         A       1.1.1.1
 
 [root@master01 ~]# vim /var/named/test.com.zone.shanghai
 $TTL 1D
 @   IN      SOA     master  test.com. ( 1 1D 6H 1W 1D )
             NS      master
 
 master      A       10.0.0.10
 www         A       2.2.2.2
  1. 生效配置文件
 # 第一次启动服务
 systemctl start named
 
 # 不是第一次启动服务
 rndc reload

客户端测试

 [root@test01 ~]# host www.test.com @10.0.0.10
 www.test.com.       86400   IN  A   1.1.1.1
 
 [root@test01 ~]# dig www.test.com @20.0.0.10
 www.test.com.       86400   IN  A   2.2.2.2

DNS 解析

DNS实现原理
  1. 客户端发起一个 DNS 请求到本地 DNS 服务器
  2. 请求到达本地 DNS 服务器,本地服务器首先查询缓存记录,若缓存中存在此记录,则直接返回结果,若不存在此纪录,则本地服务器向根 DNS 服务器进行迭代查询
  3. 根 DNS 服务器没有记录请求对应的域名和 IP 的对应关系,告诉本地 DNS 服务器,你可以到顶级 DNS 服务器上去查询,并给出顶级 DNS 服务器的地址
  4. 本地 DNS 服务器继续向顶级DNS服务器发出请求,顶级 DNS 服务器告诉本地 DNS 服务器所查询的权威服务器的地址
  5. 最后,本地 DNS 服务器向权威服务器进行查询,权威服务器告诉本地 DNS 服务器所查询域名的 IP
  6. 本地服务器将查询到的 IP 返回给客户端,并写入缓存
  7. 若客户端再次发起同个 DNS 请求,则直接从缓存中读取结果

iptables 五表五链

五表

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

优先级顺序:

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

五链

规则链(chain)名或者说五个钩子函数(hook functions)包括:

  • INPUT链:处理输入数据包
  • OUTPUT链:处理输出数据包
  • FORWARD链:处理转发数据包
  • PREROUTING链:用于目标地址转换(DNAT)
  • POSTOUTING链:用于源地址转换(SNAT)

数据报文的流向:

  • 到本机某进程的报文:PREROUTING –> INPUT
  • 由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
  • 由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING

表与链

  • PREROUTING 的规则可以存在于:raw表,mangle表,nat表
  • INPUT 的规则可以存在于:mangle表,filter表
  • FORWARD 的规则可以存在于:mangle表,filter表
  • OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表
  • POSTROUTING 的规则可以存在于:mangle表,nat表

防火墙实战

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

Iptables

iptables -A INPUT -p tcp --dport 5000:6000 ! -s 192.168.0.0/24 -j REJECT

firewalld

firewalld-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 port port=5000-6000 accept' 

MySQL 发行版

常见 MySQL 发行版本:

  • MySQL 官方版本:分为社区版和企业版,企业版性能略强,提供了更多的功能和工具
  • Percona MySQL:基于官方社区版本二次开发,增加了一些 MySQL 官方企业版才有的功能,同时对官方社区版进行了一些优化
  • MariaDB:MySQL 初创者开发,很大程度上兼容 MySQL,可以很容易的将数据从 MySQL 迁移到 MariaDB 上

MySQL 索引

索引是对数据库表中一列或者多列的值进行排序的一种结构,就像是一本书的目录,使用索引可以快速访问数据表中的特定信息,提高数据查询效率

使用索引可以:

1. 大大加快数据检索的速度
2. 加速表和表之间的连接
3. 将随机I/O变成顺序I/O
4. 帮助引擎层避免排序和临时表

MySQL Btree 索引原理

B-Tree 结构的数据可以让系统高效的找到数据所在的磁盘块

B树的特征:

  • 关键字集合分布在整颗树中;
  • 任何一个关键字出现且只出现在一个结点中;
  • 搜索有可能在非叶子结点结束;
  • 其搜索性能等价于在关键字全集内做一次二分查找;
  • 自动层次控制;
image-20221125024909580

B树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点

MySQL 安全加固

安装部署完 MySQL 服务后,系统提供了一个安全加固脚本 mysql_secure_installation,用以实现:

# 安全加固脚本
    1) 设置安全强度密码
    2) 为root用户设置密码;
    3) 删除匿名账号;
    4) 取消root用户远程登录;
    5) 删除test库和对test库的访问权限;
    6) 刷新授权表使修改生效
 
 # 低版本安全加固脚本
    1) 为root用户设置密码;
    2) 删除匿名账号;
    3) 取消root用户远程登录;
    4) 删除test库和对test库的访问权限;
    5) 刷新授权表使修改生效
posted @ 2022-11-25 02:54  C-FIKT  阅读(128)  评论(0)    收藏  举报