运维课程第五周小结
第十三天:shell编程进阶和内核管理
13.1 函数应用场景梳理,脚本编写思路,函数基础知识
shell编程需要多多敲键盘练习,熟能生巧
函数是功能代码块
function 函数名{
函数体
}
简约样式:
函数名(){
函数体
}

函数会放到环境里
注意!如果把函数调用放到函数前面,会找不到命令(调用的时候没有,就是没有)
状态返回值:
127 命令找不到
126 权限不够
建议用echo代替return
13.2 函数进阶以及脚本自动化简单实践
13.2.1 函数变量
局部变量:用local 变量名(只能用在函数里面,离开了函数就会报错)

- 该脚本未使用local变量,此时message全局变量在修改之后,从hello world变成了function-message
在函数内部直接修改变量,如果在函数外有同名变量的话,会把函数外的变量值一起修改
所以我希望不修改,方法:

- 把函数内部的message改成function-message
此时:
13.2.2 脚本自动化
思路一:

用echo或状态返回值(信号)的方法来进行条件判断
信号:9(kill)
思路二:跨程序的,需要人工干预的(比如要用ssh远程登录主机)

我的想法是要脚本帮我自动输入yes,password等信息
就用监视的思路来进行实践

- 有一只眼睛一直看着这个过程
- 看到yes了,输入yes
- 看到password了,输入123456
- 看到#,知道连接成功了,退出
在安全领域中,这种思路叫蜜罐,用来钓鱼执法
-
只有一个入口
-
警察都在外面
-
四周都是单层玻璃
-
里面放了金条
-
拿了就被逮捕
有两种方法实现全程干预:
expect
- set(设定环境变量):把金条放在里面
- spawn(做一个空间,可以把命令放进去):创建一个玻璃房间
- expect(接收需要看的内容):用眼睛看
- send(把东西输入进去):逮捕
- interact:退出空间
expect + 脚本
exp_continue: 如果后面还要输出的话,就continue

13.3 脚本自动化进阶

用最标准的环境变量样式(第四种)、
13.3.1 字符串的截取

${file#a*3} -- 输出42341,因为一个#表示匹配第一个
${file##a*3} -- 匹配第二个
${file%3*1} -- 输出abc12342,因为一个%匹配第一个
${file%$3*1} -- 输出abc12,因为两个%匹配从右往左最后一个
str="apple, tree, apple, tree"
echo $(str/apple/APPLE) -- 把第一个apple变成大写
echo $(str//apple/APPLE) -- 把所有apple都变成大写
$(file^^) -- file中全部变成大写(高兴,所以笑眯眯)
$(file,,) -- file中全部变成小写(鼻孔看低人)
13.3.2 eval变量(可作为面试案例)
场景:
我们知道echo {1…10}的输出结果是1 2 3 … 10,
但是让n=10,echo {1…$n},只能输出{1…10}了,不能输出最终结果1 2 3 … 10,这是因为Linux系统用echo只能一次深层次解析,第二次就不行了
解决方法:
eval -- 二层深层次执行命令(第三次就不行了)
它是执行命令用的,需要配合$()一起使用
n=10
for i in $(eval echo {1..$n}) -- echo {1..$n}先执行出{1..10},eval {1..10}再执行第二层命令
13.3.3 跨主机免密码认证
| 生活化场景: | Linux场景 |
|---|---|
| 我找房东租房,每次进房门总是要输入他给的密码,感到很烦 | 我要登录别的主机,每次都要输入它的密码,感到很烦 |
| 不想受约束,自己买了一把锁(所有人都能看得到)和一把钥匙(只有自己看的到) | 不想每次都被自己操作,在自己主机上生成公钥和私钥 |
| 第一次换锁得得到房东同意 | 第一次解锁需要得到房东同意 |
ls .ssh/ -- 两把钥匙生成的地方
rm -rf .ssh/ -- 先清空一下
ssh-keygen -- key generate(生成钥匙对)
ls .ssh/ -- 带pub的是公钥,不带的是私钥
ssh-copy-id root@10.0.0.13 -- 把公钥放到另一台主机里
"ssh 'root@10.0.0.13' -- 验证




13.4 Linux系统启动流程解读


- 在Centos7之前,走的是箭头左边的流程,Centos7之后,把左边一系列东西都放到systemd里面,并划分为不同的小组,每一个都是系统启动方式,隐藏了启动的服务目标
系统启动流程:
-
BIOS:
- 开机加电自检,RAM,ROM(通过属性配置找到我的磁盘)
-
bootloader:

- 第1阶段在引导扇区里,共446字节
- 第1.5阶段放的是文件系统驱动信息(1-2047),所以用fdisk -l 查看磁盘时,都从2048开始
- 第2阶段拿grub文件

对于grub:

[root@c6 ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_c6-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-71.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_c6-lv_root rd_LVM_LV=vg_c6/lv_root rd_LVM_LV=vg_c6/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet -- 这些都是开机挂载的文件
initrd /initramfs-2.6.32-71.el6.x86_64.img
上面的内容也可以去:
cat /boot/loader/entries/34de5bb7bce743adba07c1f6233a9ac6-5.14.0-427.13.1.el9_4.x86_64.conf
这里面找到
如上图,有一个看似悖论的问题:
要有文件系统,就必须等OS启动完毕,但启动OS又需要一个文件系统里面的文件
怎么办?
- 我们有一个临时文件initramfs
- 它只有一个作用:临时生成一个文件系统环境
- 有了环境,可以去找linux内核
- 一旦OS自己的文件系统环境存在后,临时文件系统就没有用了
总结一下

- 用手点一下,按下开机键
- 进入BIOS的开机加电自检,做三件事情(环境正常?设备有没有坏?配置需不需要修改?)
- 找bootloader,找到MBR,446字节先加载基本环境,再把后面的驱动程序加载过来,之后找grub文件(grub设定的是Linux内核位置以及真正的根文件系统挂载(只读方式挂载) 以及 initramfs(生成临时系统文件环境)),根据MBR的64位分区表把内核加载到环境中,启动真正的根文件系统环境
- systemd进程过来了,别的进程也一起过来(启动大量程序),选择运行级别,并重新挂载根文件系统, 变成rw
- 其中有一项是fstab
13.4.1 init程序
init进程是内核启动的第一个用户级进程,进程id为1

- 系统环境的基本配置:和文件系统相关的放在/etc/fstab里,和主机名相关的放在/etc/host里
- 启动附加服务程序:网络环境,ssh,http这些service服务
- 临时收尾动作(往往为空)
此时该我们操作了:
- 我们输入用户名和密码并登录成功后,系统加载用户目录下的相关配置文件,以及获取其他的配置文件
13.4.2 系统启动中的运行级别

文本界面的(rocky9之类的):运行级别3
图形界面的(ubuntu13之类的):运行级别5 但是要提前准备图形界面的相关环境

systemctl get-default -- 查看当前的运行级别
init 数字 -- 临时调整运行级别 注意5需要图形服务来执行成功
systemctl set-default 运行级别(文字) -- 永久调整运行级别
13.5 Linux的救援修复模式
创造一个错误:
cd /boot/
rm -rf vmlinuz-5.14.0-427.13.1.el9_4.x86_64
reboot
发现启动不了了(找不到了)
当Linux运行出现问题时,可以进入救援模式
光盘里面存在我们需要的内核启动文件,我们需要找到文件,并复制到Linux系统里
接下来演示如何用救援模式进行操作:
-
去电源里进入固件
-
去boot里,把CD-ROM用shift+ 移到最上面
-
选择troubleshooting
-
找到rescue救援模式

-
我删除的文件在OS系统所在的系统盘的环境里,但我现在所处的环境是光盘环境
-
光盘中也有文件系统环境
-
我本来的操作系统所在的系统盘被挂载到了光盘的一个目录下面/mnt/sysroot
-
要找到我Linux中的文件 ls /mnt/sysroot/ -- 最后一个/就相当于原来Linux系统里的/ cp /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64 /mnt/sysroot/boot/ shutdown -h now -- 安全固件里的顺序需要调整回去 -
完成
总之,相当于把原来的系统挂载到光盘的一个文件下面,通过哪个文件去间接修改我的系统内部文件
13.6 systemd服务管理机制拆解

restart -- 代表把原来的进程干掉,再开启一个新的
reload -- 代表把配置文件重新加载到环境里,进程不变
systemctl mask xxx -- 永久关闭,再也起不来了
systemctl unmask xxx -- 取消永久禁止
start 暂时性
enable 开机启动
enbale--now = start + enable
stop 暂时性
diable 开机不启动
disable --now = stop + disable
接下来看看服务文件:
systemctl status nginx.service
找到文件所在的路径

/var/log/ -- 存放日志文件的目录

- Type中的forking:如果有子进程的话,就需要用forking类型,否则用simple
定制服务
bash -c " " -- 直接用bash输出命令可以用bash -c,分号需要在条件或者命令后面加
[Unit]
2 Description=nihao service
3
4 [Service]
5 ExecStart=/bin/bash -c "while true; do echo 'hello world'; sleep 1; done" -- 注意外面双引号里面必须单引号,否则报错
6 ExecStop=/bin/kill bash
7
8 [Install]
9 WantedBy=multi-user.target
systemctl daemon-reload -- 把目前的服务文件加载到系统环境里
13.7 内核模块管理实践
13.7.1 内核模块
Linux内核直接决定了操作系统运行的方式(不同主机上启动不同数量的服务,快慢不同)
内核中调整的是内核属性参数,它们本质上都是环境变量
内核参数的作用:
- 提高系统性能
- 增强系统稳定性
- 提升系统安全性
内核功能的操作:
- y 意味着将对应的功能或驱动直接编译进内核(一启动就有,但是占用资源)
- m 意味着把对应的功能或驱动编译成内核模块(用的时候加载就行了,可以动态扩展和缩容)

- insmod 类比 rpm , 需要自己手工定制依赖
- modprobe 类比 yum, 自动安装依赖
当我们开启功能后,里面默认的环境达不到要求,所以我们需要去修改配置,即参数
13.7.2 参数设置
我们用sysctl来配置linux系统内核参数,这些参数以文件的形式显示在/proc/sys/目录中,配置项就是目录名+文件名,值就是文件中的内容
但是它是假文件系统,没有办法cat或者vim



这几个文件都一样,可以用来放配置
第十四天:DNS解析服务
14.1 DNS基础知识

我们知道,在数据传输的过程中,请求访问网站的时候,第一步需要把域名解析为具体的ip地址,这时候就需要DNS来进行解析了
14.1.1 DNS的组成
域名的组成

- FQDN是域名完整的样式
- 主机名 + 二级域 + 根域,我们主要管理的是主机域
根域服务器(ipv4)
全球一共有13组,1主12辅
根域服务器(ipv6)
全球一共有25组,中国有1主3辅
14.2 DNS解析原理和定制DNS配置

重要!!!!!!!!
我自己的理解:
每个网站都有自己的网站域名服务器,里面有zone,zone里面放着是自定义的记录(A,AAAA,NS等)。客户机通过自己指定的DNS解析器把ip和域名的对应关系拿下来,放到自己的缓存中
在上面的递归查询中,hosts也是一种本地查找对应关系的方法,但是已经很古早了,正在被慢慢淘汰(直接在/etc/hosts里面一一对应就可以)

上面的迭代查询中,以www.baidu.com查询为例,先去问美国政府管理的根服务器,问到.com的ip,再去国际组织管理的com域名服务器,问到baidu.com的ip,最后去百度公司管理的baidu.com域名服务器,问到www.baidu.com的ip
我们可以用bind来自定义DNS,就比如zone和db之类的
递归查询(类比cp -r 一层一层往下找)
-
在我的电脑中输入www.a.com
-
在浏览器中查看有没有缓存信息(历史记录里面),有的话直接给就行
-
如果没有,找本地主机的缓存(有没有曾经解析过ip地址)
-
如果还没有,找/etc/hosts文件
-
如果上述方法都找不到,就去找local DNS服务器,把所有的DNS解析交给该服务器
迭代查询(类比for循环)
- 查找方法为从后往前,先找根域. ,问.com在什么地方,会返回一个.com的ip地址
- 再找顶级域,找到.com后,问a.com在哪里,会返回一个a.com的ip地址
- 再找二级域,找到a.com后,问www.a.com在哪里,最终会返回www.a.com的ip地址
- local DNS将其缓存在服务器当中
- 把结果交给我的主机,主机中有了www.a.com的ip地址的缓存
由本地DNS找到local DNS的过程如下图所示

三种配置DNS的方法:
1 网卡里面配置:
cat /etc/netplan/50-cloud-init.yaml
2 使用systemctl-resolved服务配置:
resolvectl -- 其中有一个global
dpkg -L systemd-resolved
找到/etc/systemd/resolved.conf
里面可以更改global
DNS解析权限都交给systemd-resolved服务配置
3 定制本地dns解析入口:
原则上/etc/resolv.conf配置由自己定制,但是它是一个链接文件,最终交给了systemd.resolved服务管理,每次重启服务后都会重置配置
在ubuntu中,是链接方式,但是在rocky中就是一个文件,想怎么改就怎么改,都会生效
由它决定用哪个DNS服务器来解析
查看是谁解析网站域名的:
dig www.a.com
-
对于rocky,用不着resolve这个服务,主要还是网卡配置
cat /etc/resolv.conf 里发现nameserver就是10.0.0.2、
-
对于Ubuntu,该服务就很重要了

-
这里为什么nameserver会是这个127呢?
-
答:这个127就是systemd-resolved服务的ip,系统会先问它来解析,解析不到,再给10.0.0.2解析
resolvectl是systemd-resolved服务提供的工具

如果要设定全局的DNS,我们可以去/etc/systemd/resolved.conf 这边修改(用dpkg -L systemctl-resolved)
14.2.2 记录解析

- 主要记住A记录,把域名解析为IPv4地址
14.3 资源记录和dig命令解析
14.3.1 资源记录
A记录:www.a.com 我去ping这个网址后能拿到一个IPv4地址,这就是A记录=的作用
AAAA记录: www.a.com 我去ping这个网址后能拿到一个IPv6地址,这就是AAAA记录的作用

我去找一个DNS服务器要域名ip,它直接给我一个值,这就叫做权威记录
但有一种情况,我发起请求后,该服务器把工作交给子DNS服务器,子服务器找到之后给父服务器,大服务器再给我,这就叫做非权威记录
父服务器中有NS记录,指向子服务器,从而建立连接

对于全国性的网站,会通过CDN服务,给到全国各地的服务器上,提供就近访问
一个域名解析出很多个子域名,每个子域名对应一个ip地址,这种由一个域名能解析出很多域名的记录叫做CNAME记录
通过ip地址反查域名,叫做PTR记录
- 以上这些记录都会放在不同的文件里,这些文件叫区域文件
- 在区域文件中,这些记录主要是A记录(正向解析区域文件)和PTR记录(反向区域解析文件)
14.3.2 hosts文件

格式: ip地址 域名(可为长域名或短域名【也称主机名】)
14.3.3 检测工具(验证网站域名和主机名的工具)


dig命令:
该命令用来查询域名解析记录
dig 域名 -- 主要用这个
dig -t 类型 域名 -- 查询具体类型
dig 域名 @DNS服务器地址 -- 用别的服务器来解析,可以不用默认的
+[no]

以上是输出结果
Got answer中:
qr:请求
rd:客户端希望递归查询
ra:DNS服务器支持递归查询
aa:权威记录
ANSWER SECTION中:
第一列是要查询的域名
第二列是缓存时间
第三列IN表示互联网
第四列是要查询的记录类型
第五列表示查询得到的值
14.4 DNS工具解读和bind软件安装
接着上一部分的工具,我们来介绍host和nslookup

whois jd.com -- 查看网站的具体公开信息(一般意义不大)
14.4.1 DNS配置
DNS方面重点掌握bind
我们选择了bind作为解决方案,它是一款实现DNS服务的开源软件
要求多操作,按课件规则操作
- rocky安装完软件后,需要手动启动
- ubuntu安装完软件后,不仅自己启动,而且会开机自动启动

rocky部署bind
yum install bind -y
通过rpm -ql bind发现该软件的服务是named.service
关闭防火墙和SElinux
reboot
看一下监听端口:
发现是53
默认监听的地址是127.0.0.1(只允许本地主机)
127.0.0.1是自己的地址,其他人访问的是另一个10.0.0.12

我们需要手动让其能够对外
rpm -ql bind找到配置目录和配置文件
named-checkconf -- 检查一下配置文件有没有问题
发现多了对外开放的端口
ubuntu部署bind
apt install bind9 -y
dpkg -L bind9
发现/etc/bind/name.conf里面含有include,是导入文件啊
14.5 DNS配置结构和属性解读
站在文件的角度,在rocky上是一个文件,但是在ubuntu中由好几个文件组成

- 进入主配置文件(cat /etc/named.conf (大部分以属性给出)或者 cat /etc/bind/named.conf(拆分成一个一个的文件))
- 里面有include,include中有zone文件
- zone文件会找域区域文件,其中定义了很多配置
- 里面有db.xxx 或 named.xxx
- named.xxx中定制了解析记录规则文件,也就是它必须在某个file下面
日志查看
ubuntu中的dns日志:
/var/log/syslog
rocky中的dns日志:
/var/log/messages
zone配置解析

我们接下来看看解析记录的规则文件


RR,就是资源解析记录


14.6 RR记录格式解读和dns简单实践
14.6.1 SOA记录
在DNS场景中,证明你为什么能解析www.a.com,这个证明就是SOA,它是起始授权记录(第一条)
SOA是一个域名进入规则文件的第一条信息,起始记录

同样符合五个字段的格式定义
magedu.com. 86400 IN SOA linux-dns. admin.linux-dns.com. (123 3H 15M 1D 1W)
其中,linux-dns 为 MNAME(主域名服务器名),admin.linux-dns.com 为 RNAME(管理员邮箱对应的域名格式,实际邮箱为 admin@linux-dns.com)。
.代表@,是邮箱
14.6.2 A记录和PTR记录

ptr记录在实际操作的时候,不用自己定制框出来的内容,因为已经默认了

14.6.3 DNS缓存
Windows 系统
查看缓存:ipconfig/displaydns
清理缓存:ipconfig/flushdns
Linux 系统
查看缓存:nscd -g | resolvectl statistics
清理缓存:nscd -i xxx | resolvectl reset-statistics
清理缓存后,多访问几次相同网站,Cache Hits的命中率就会提升
14.6.4 DNS实践(案例1)
在自建的DNS服务中实现域名的自解析
意思就是,我把ubuntu主机变成了一个权威服务器(域名服务器),别人查询时,会返回本地的记录,不用问别的服务器,但是只能管理自己的域名,不能管别的

流程:
10.0.0.12主机作为客户机
在浏览器中访问www.magedu.com
做一个dns服务10.0.0.13主机,去10.0.0.14主机把ip地址解析给自己
- 防火墙管的是数据包的传输方面
- selinux管的是服务方面
前期准备:
为主机设置nginx服务
14主机上:
取消selinux和firewalld.service
开启nginx服务
安装net-tools以启用netstat命令
进行DNS解析配置(域名是magedu.com):
对于配置,bind中的主配置文件不需要修改,需要定制的是自己的解析记录,在defaultzone这一块
添加zone," "中写上域名,即magedu.com
我就一个服务器,所以我是master
文件是db.magedu.com

找一个现成的db文件复制过来直接修改
cd /etc/bind/
cp db.local db.magedu.com
进行解析文件的编辑
@代表域名
注释:magedu-dns.
邮箱:root.magedu.com
Serial序列号第一次直接设置成0就可以了
dns1(此处省略.magedu.com) 在12客户机上dig dns1.magedu.com @10.0.0.13 ,就能知道它的dns解析器是谁了
www同样后面不用加域名,因为已经在zone这边定制了 从而在12客户机上dig www.magedu.com @10.0.0.13 就可以得出10.0.0.14
定制完之后:
named-checkconf
chown :root /etc/bind/db.magedu.com
named-checkzone magedu.com db。magedu.com
systemctl restart named.service

实践:
在12客户机上:
dig www.magedu.com -- 还是原来的域名
但是用我们自己定制的dns解析器10.0.0.13
dig www.magedu.com @10.0.0.13
发现解析出来dns就变成了10.0.0.14
14.7 DNS主从复制和数据同步
先来看看一些命令
rndc命令:
rndc status
rndc reload


14.7.1 DNS主从(案例2)
找一个辅助DNS帮助主DNS解析,要点是主从DNS服务器之间数据的同步

前期准备:
对10.0.0.15主机进行配置检查(selinux和firewalld.service)
需要了解的:


对于主DNS配置的修改:
增加allow,允许从DNS服务器来自己这边拿数据
增加一条记录dns2
改变serial值为1


照例进行格式的检查两件套:
cd /etc/bind
named-checkconf -- 检查配置
named-checkzone magedu.com db.magedu.com -- 注意!!!一定要保证自己cd到/etc/bind里!不然会找不到file
加载配置:
rndc reload
进行从DNS的配置:
yum install bind -y
vim /etc/name.conf (any;) -- 允许他人来访问
更改zone文件:
cat /etc/named.conf
找到vim /etc/named.rfc1912.zones
不用定制规则文件了,因为这个是从DNS
db.magedu.com这个文件会自动生成在/var/named/slaves这个目录下

检查配置文件:
named-checkconf
接下来进行主从数据同步实践
在不更新序列号的前提下更新记录:

第十五天:DNS解析服务和AWK进阶与通信安全加密
15.1 DNS规则记录解析
15.1.1 DNS反解析实践(案例3)
前期准备:
去客户端定制所选取的DNS解析器10.0.0.13
vim /etc/resolv.conf
改成10.0.0.13
定制反向解析:
来到ubuntu13主机
cd /etc/bind/
vim named.conf.default-zones
10网段,所以直接反着写

创建db文件:
cp db.127 db.0.0.10.in-addr.arpa
vim db.0.0.10.in-addr.arpa

ptr-test.是注释,可以随便改
admin.magedu.com. 是联系方式,可以随便改
14 (外面设置了10.0.0了,里面不用重复,只要主机名就可以)
注意不要少了点,因为返回的是完整的域名

顺便把正向查询的也一起改了:
如上:
依旧检查两件套:
named-checkconf
named-checkzone 0.0.10.in-addr.arpa db.0.0.10.in-addr.arpa
回到12客户机上进行检查
dig -t ptr 14.0.0.10.in-addr.arpa
15.1.2 升级主从(案例3的延续)

直接把allow配置复制黏贴过来就行
检查一下配置就行:
named-checkconf
去从DNS主机上进行操作:

看看文件生成了没
ls /var/named/slaves里
验证:
dig -t ptr 14.0.0.10.in-addr.arpa @10.0.0.15
15.1.3 view视图
准备工作:
在rocky12主机上开启新网卡,更改ip地址为192.168.8.12
在ubuntu13主机上开启新网卡,更改ip地址为192.168.8.13
注释默认的zone文件
此时流量流过来,没有东西承接
vim /etc/bind/named.conf.options
进行定制
对里面的各个指定文件进行指定






检查一下:
named-checkconf
named-checkzone sre-magedu.com db.prod.sre-magedu.com
named-checkzone sre-magedu.com db.test.sre-magedu.com
rndc reload
结果检验:
dig www.sre-magedu.com @10.0.0.13
dig www.sre-magedu.com @192.168.8.13


总结一下

- 我定制了一个域名:www.sre-magedu.com
- 数据的来源不一样
- 数据来源于192.168.8.0网段的,它解析出来的www.sre-magedu.com ,解析出来的是192.168.8.14
- 数据来源于10.0.0.1网段的,它解析出来的www.sre-magedu.com ,解析出来的是10.0.0.14
可以这么说,原本是zone一个人来进行解析,但是现在我把它禁用了,并把它分配到不同的文件里面去了
这样不同网段的人来访问,得到的应答也就不一样
15.2 CDN(内容分发网络)的工作原理简单拆解

网站承接用户量很大,一个人受不了,但是A记录只能实现一对一
所以我们通过cname记录,把原来的image.magedu.com解析出好几个不同的域名,让它们对应不同的ip地址
- 负载均衡:让不同的主机帮你承受流量

-
在CDN中,解析出来的ip地址不是具体的域名的ip地址,服务器会分析客户端来源
-
解析出CDN节点,在CDN内部有很多边缘节点,通过CNAME把流量转交给边缘节点
-
在发送解析请求时,会解析请求的ip所在的位置,给出一个距离比较近的边缘节点
-
CDN是购买的服务,它提供一个web平台,在平台中指定服务器ip地址和同步的资源(定制预热资源和刷新资源)
-
预热就是在业务高峰期提前更新数据,把数据上传上去
-
刷新就是自动把所有边缘节点中的数据清理,等到用户访问的时候再同步过去
-
对象存储(OSS):别人提供存储服务,我申请一块区域(bucket),往其中提交文件,管理方式基于网络
我使用的管理软件是:七牛云 - 产品主页
- 进入对象存储
- 创建新的空间(bucket)
- 可以进行文件的上传
小结

CDN分为两块:域名解析和内容管理
CDN的内容节点是由内容管理这边得来的(通过web)
15.3 awk匹配进阶和数组基础
对于之前的内容,需要复习的就是awk -F '列分隔符' '条件匹配 {print $n}'
但是awk是程序编辑语言,支持的操作很多

awk中的print必须要求有数据的输入,有数据来源,不然输出不了

- 注意,打印与否,取决于条件判断是否为真
awk也有内置函数,这并不是重点
15.3.1 awk中的if和循环语句

shell中的if语句:
if []
then
命令
else
命令
fi
AWK中的if语句:
if (条件){
执行语句
} else {
执行语句
}

for i in ((i=1,sum=0,i<=100;i++));do let sum+=i;done ;echo $sum
15.3.2 awk中的数组

awk数组通过for循环创建数组
awk 'BEGIN{
array["yuwen"]=78;
array["shuxue"]=89;
array["lishi"]=99;
print
array["yuwen"],
array["shuxue"],
array["lishi"]
}'
输出值
此处相当于shell中的关联数组

遍历数组
awk 'BEGIN{
array["yuwen"]=78;
array["shuxue"]=89;
array["lishi"]=99;
for (i in array)
{
print array[i]
}
}'
注意这边i遍历的是数组的下标


15.4 awk数组和自定义函数

其中的$0代表一行
array[a]++ 一开始的数据是0

理解以上逻辑
15.4.2 自定义函数

在shell编程中:
functionname() {
函数体
}
在awk中:
参数放在括号里
functionname(arg1,arg2){
函数体
}
总结:

15.5 安全基础知识


主要讲的就是安全方面的基础知识,公司会给不同人员分配身份,验证操作合法性,并进行准入控制
红客08小组渗透工具集
15.6 三类加密算法拆解

在本讲中,我们所要关心的是客户端与服务端之间的通信安全
三类加密:对称加密, 非对称加密, 单向加密

15.6.1对称加密(上图):
加密解密的效率非常高,用相同的密钥加密和解密
危险: 如果密码泄露,拿到密钥之后中间人可以把原内容篡改

15.6.2非对称加密(上图):
会生成一个公钥和一个私钥,公钥和私钥都能够用来加密和解密
公钥(public key)和私钥(private key)配对使用
此加密类型共会出现两种场景
场景1:公钥加密,私钥解密

Alice用BPK加密,Bob用BSK解密
劣势:互联网中的中间人可以拿到BPK,通信链路被中间人拦截后,中间人可以伪造数据,用Bob公钥进行加密,Bob把数据解密后,解密出伪造的数据
场景2:私钥加密,公钥解密(数字签名)

Alice用ASK加密,Bob用APK解密
劣势:中间人把链路进行拦截,用Alice的公钥可以把数据解密出来,也就是数据就是明文传输了。但是中间人伪造不了数据,因为没有ASK
优点:能保证数据不会被篡改,来源有保障
15.6.3 单向加密(hash摘要)

在传文件之前,会生成一个随机字符串,服务端拿到文件和随机字符串后,也会生成随机字符串。将这两个值进行比较
如果一样,就表明文件在数据传输的时候没有被修改
md5sum file查看随机字符串
15.6.4 组合加密
总之,我们在用的时候,三种加密方法都会放在一起

说了这么多,公钥密钥是需要在互联网上被传递的。怎么传递呢?

15.7 CA机构的逻辑解读
15.7.1 CA

对于CA,相当于是一个担保平台,它相信网站,我相信它,所以我相信网站
第一个问题:我是怎么默认认可CA机构的?
原因:在操作系统安装的过程中,会自动获取主流的CA认证机构信息(点击浏览器网站地址左边的“锁”图案,就能看到)
第二个问题:是不是所有CA机构认可的网站就一定安全?
答:不一定

来看看CA证书的生成逻辑
- CA机构准备环境(用目录结构来管理证书),并给自己颁发证书(自签证书)
- 服务端准备密钥环境,像CA机构发起签名请求(提供一系列自己的信息)
- CA机构生成证书放到自己的目录结构里,并给服务端颁发证书
- web软件使用证书加密网站信息(https)
- 客户端浏览器访问网站,验证证书,认可网站证书信息,浏览器为网站添加安全标识
15.7.2 SSL/TLS

PKI加密体系
1362

被折叠的 条评论
为什么被折叠?



