第5周作业

1. 总结rocky 系统的启动流程,grub工作流程

rocky 系统的启动流程

  1. UEFI或BIOS初始化,运行POST开机自检
  2. 选择启动设备
  3. 引导装载程序,/boot/grub2/grub.cfg
  4. 加载initramfs 驱动模块(可以实现根文件系统的挂载)
  5. 加载虚拟根中的内核
  6. 虚拟根的内核初始化,systemd 代替init ,第一个进程
  7. 执行initrd.target 所有单元,包括挂载 /etc/fstab
  8. 从initramfs 根文件系统切换到磁盘根目录
  9. systemd 执行默认target配置,配置文件:/etc/systemd/system/default.target
  10. systemd 执行sysinit.target初始化系统及basic.target准备操作系统
  11. systemd 启动multi-user.target 下的本机与服务器服务
  12. systemd执行multi-user.target 下的/etc/rc.d/rc.local
  13. Systemd执行multi-user.target下的getty.target及登录服务
  14. systemd执行graphical需要的服务

grub工作流程

  1. Stage 1加载‌:当计算机启动时,BIOS或UEFI会加载GRUB的Stage 1。Stage 1通常存储在MBR(Master Boot Record)中,其主要任务是加载Stage 2,并根据配置文件显示引导菜单‌。
  2. Stage 2加载与配置‌:Stage 2是GRUB的核心,存储在文件系统中。它会读取GRUB的配置文件(通常是grub.cfg),显示引导菜单供用户选择,加载选定的操作系统内核和初始化RAM磁盘镜像(initrd)到内存,然后将控制权移交给内核‌。
  3. 内核加载与初始化‌:一旦内核被加载到内存,就会开始执行内核启动过程,包括初始化内核参数、设备驱动,建立内存映射等‌

2. 总结awk工作原理,awk命令,选项,示例。

awk工作原理

awk的工作原理可以分为以下几个步骤:

  1. 读取输入‌:awk从指定的输入文件或标准输入中读取文本行。‌
  2. 模式匹配‌:对于每一行输入,awk会尝试将其与定义的模式进行匹配。模式可以是正则表达式,也可以是awk内置的条件表达式。
  3. ‌执行动作‌:当一行输入与某个模式匹配成功时,awk会执行与该模式关联的动作。动作是一系列由awk语言编写的命令,用于对匹配到的文本行进行处理。
  4. 输出结果‌:处理完成后,awk会将结果输出到标准输出或指定的文件中
    awk 命令,选项,示例
#文件名、变量、分隔符
awk 'BEGIN{print FILENAME}' /etc/issue						#FILENAME, BEGIN拿不到 FILENAME,因为BEGIN语句块不涉及文件和stdin
awk -v FS=":" 'BEGIN{print FS}{print $1FS$1}' /etc/passwd	#FS, $1表示第1个字段,$0表示整行, FS=":"表示用:做分隔符。
awk -F: 'BEGIN{print FS}{print $1FS$1}' /etc/passwd			#-F选项也是指定分隔符,效果和 -v FS=":" 一样
str=":"; awk -v FS=$str 'BEGIN{print FS}{print $1FS$1}' /etc/passwd	#从shell 变量中获取分隔符的值
awk -F":" -v FS=";" 'BEGIN{print FS}' /etc/passwd			#-F和FS变量功能一样,同时使用后面会覆盖前面的
df -h | awk -F" +|%" '{print $5}'|tail -n $(echo `df |wc -l`-1|bc)|sort -nr|head -1 #取分区利用率最高的第一行记录
awk -v RS=";" '{print $0}' test.txt							# RS指定换行符是分号;
awk -v FS=":" -v OFS="---" '{print $1,$3}' /etc/passwd		# OFS 指定输出字段的分隔符用 --- 替换原来的空白符
awk -v ORS="---" '{print $0}' test.txt						# ORS 指定输出换行符用 --- 替换原来的空白符
awk 'BEGIN{PI=3.1415926;print PI;OFMT="%.1g";print PI;OFMT="%.2g";print PI;OFMT="%.8g";print PI;OFMT="%.8f";print PI}'
															# OFMT="%.1g" 指定小保留位数
awk -v FS=":" '{print NF}' /etc/passwd						# NF 一条记录的字段的个数,
awk -v FS=":" '{print $(NF-1)}' /etc/passwd					# $NF,$(NF-1)得到 第几个字段
awk '{print NR,$0}' /etc/issue								# NR,已经读出的记录数,行号从1开始
awk '{print NR,FNR,$0}' /etc/issue /etc/os-release			# FNR,各文件分别记录行号
awk 'BEGIN{print ARGC}' /etc/issue /etc/os-release			# ARGC,命令行参数的个数
awk 'BEGIN{print ARGC,"---",ARGV[0],"---",ARGV[1],
"---",ARGV[2],"---",ARGV[3]}' /etc/issue /etc/os-release	# ARGV,数组。ARGV[0]表示第一个参数,以此类推。

3. 打印/etc/passwd的奇数行

sed -n 'p;n' /etc/passwd

awk 'NR % 2 == 1 {print}' /etc/passwd

4. 打印Linux系统的"IP地址,系统版本,CPU核心,内存大小"

[root@ubuntu160: ~]# vim system_info.sh 
#!/bin/bash
#打印IP地址
echo "IP 地址:"
hostname -I |awk '{print $1}'

#打印系统版本
echo "系统版本:"
awk -F= '/PRETTY_NAME=/{print $2}' /etc/os-release

#打印CPU核心
echo "CPU核心数:"
nproc

#打印内存大小
echo "内存大小:"
free -h |awk '/Mem/ {print $2}'

[root@ubuntu160: ~]# . system_info.sh 
IP 地址:
10.0.0.160
系统版本:
"Ubuntu 22.04.4 LTS"
CPU核心数:
8
内存大小:
15Gi

5. 在文本的所有行前加序号

awk '{print NR,$0}' /etc/passwd

6. 统计某个文件夹下的文件占用的字节数。

du -sb /tmp

7. 总结内核设计流派及特点。

内核设计流派主要分为单内核和微内核两种‌。

‌单内核设计‌:
将所有功能集成于同一个程序,以Linux为代表。其特点是内核核心和内核的功能模块都集成在一起,但Linux虽然采用单内核设计,却广泛借鉴了微内核的设计思想,通过模块化机制,实现了内核功能的动态装载或卸载,提高了内核的灵活性和可扩展性‌。

‌微内核设计‌:
每种功能使用一个单独的子系统实现,如Windows和Solaris。其特点是内核核心体积相对较小,外部功能模块(如文件系统、硬件驱动、网络协议等)以模块的方式实现,需要时再进行加载,从而提高了系统的稳定性和安全性‌

8. 总结systemd服务配置文件

1. unit的配置文件位置和优先级

  • /usr/lib/systemd/system/ #每个服务最主要的脚本文件目录,类似于之前的/etc/init.d/
  • /run/systemd/system/ #系统执行过程中所产生的服务脚本,比上面目录优先运行
  • /etc/systemd/system/ #管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行
    2. service unit 文件格式
  • [Unit]: 定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
  • [Service]:与特定类型相关的专用选项;此处为Service类型
  • [Install] :定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
    3. [Unit] 字段中的常用选项
Description: 	描述信息
Documentation: 	帮助信息
After:			定义unit的启动次序,表示当前unit应该晚于哪些unit启动
Before:		定义unit的启动次序,表示当前unit应该早于哪些unit启动
Requires:		依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants: 			依赖到的其它 units ,弱依赖
Confilicts:		定义units间的冲突关系

4. [Service] 字段中的常用选项

Type:	定义影响ExecStart及相关参数的功能的unit进程启动类型
EnvironmentFile:	环境配置文件
PIDFile:			指明生成进程文件路径
ExecStartPre:		ExecStart前运行,可以有多条
ExecStart:			指明启动unit要运行命令或脚本的绝对路径
ExecStartPost:		ExecStart后运行,可以有多条
ExecReload:			指明重新加载unit 配置要运行的命令或脚本
ExecStop:			指明停止unit要运行的命令或脚本
KillSignal:			以何信号杀死进程,默认SIGTERM
KillMode:			以何种方式杀死进程control-group|process|mixed|none
TimeoutStopSec:		在超过此时间后,如果进程没有被杀死,则继续使用SIGKILL配置或
FinalKillSignal配置停止进程
PrivateTmp:			布尔值,true 表示会生成私有的tmp目录,路径是/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/
Restart:			当守护进程意外终止时,是否自动重启
RestartSec:			意外终止到自动重启之间的时间间隔,其目的是保证前面的程序彻底退出,
默认值100ms

5. [Install] 字段中的常用选项

Alias:		别名,可使用systemctl command Alias.service
WantedBy:	工作模式,就是在哪种运行级别下
Also:		安装本服务的时候还要安装别的相关服务

对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启。
systemctl daemon-reload

9. 总结system启动流程

  • systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  • systemd执行sysinit.target初始化系统及basic.target准备操作系统
  • systemd启动multi-user.target 下的本机与服务器服务
  • systemd执行multi-user.target 下的/etc/rc.d/rc.local
  • Systemd执行multi-user.target下的getty.target及登录服务
  • systemd执行graphical需要的服务

10. 总结DNS域名三级结构

  • DNS域名的三级结构包括顶级域、二级域和子域
    • 顶级域位于域名的最后部分,分为两类:通用顶级域(gTLDs)和国家/地区顶级域(ccTLDs)。通用顶级域如.com、.org、.net等,而国家/地区顶级域则代表特定的国家或地区,如.cn代表中国,.uk代表英国。
    • 二级域位于顶级域之前,通常由公司、组织或个人注册使用
    • 子域位于二级域之前,用于进一步划分和组织域名。子域可以用于不同的服务、部门或地区。
    • 这种结构有助于有效地管理和分配互联网上的域名资源

11. 总结DNS服务工作原理,涉及递归和迭代查询原理

DNS服务的基本工作原理‌

  • 域名解析请求‌:当用户在浏览器中输入一个域名时,浏览器会将这个请求发送给操作系统。操作系统首先检查自己的缓存中是否有该域名对应的IP地址,如果有,则直接返回结果;如果没有,则继续向本地DNS服务器发送查询请求。‌
  • 本地DNS服务器处理‌:本地DNS服务器收到请求后,会先检查自己的缓存中是否有该域名对应的IP地址。如果缓存中有,则直接返回结果;如果没有,则开始递归或迭代查询过程
  • 递归查询原理:递归查询是DNS查询的一种常见且默认的方式。在这种方式中,如果本地DNS服务器无法解析域名,它会代替客户端向其他DNS服务器(如根域名服务器、顶级域名服务器、权威域名服务器)发起查询请求,直到找到对应的IP地址,并将结果返回给客户端
  • 迭代查询原理:迭代查询中,DNS服务器不会代替客户端完成全部的查询过程。相反,它会向客户端提供能够解析查询请求的下一个DNS服务器的地址,客户端再向这个DNS服务器发送查询请求,依次循环直到找到对应的IP地址

12. 实现私有DNS, 供本地网络主机作DNS递归查询。

IP地址规划:
DNS Server:10.0.0.157
Web Server: 10.0.0.160
Client Server: 10.0.0.165


1、DNS 配置

1.1 安装bind9
apt update && apt install -y bind9

1.2 配置开机启动,立即启动服务
systemctl enable --now named.service

1.3 查看端口占用
ss -tunlp|grep named
在这里插入图片描述

1.4 测试,在网卡中配置静态IP地址和网关,DNS指向自己
vim /etc/netplan/eth0.yaml
在这里插入图片描述

1.5 去掉全局配置,注释掉DNS行,应用生效
sed -i.bak 's/nameserver/#&/g' /etc/resolv.conf
netplan apply

1.6 本机测试公网地址解析:
nslookup www.baidu.com
在这里插入图片描述

1.7 将测试服务器 165 的DNS指向DNS服务器(10.0.0.157)
sed -i.bak 's/127.0.0.53/10.0.0.157/g' /etc/resolv.conf
netplan apply
在这里插入图片描述

1.8 从165 测试机测试公网解析
DNS服务器 157 可以成功解析公网地址
nslookup www.baidu.com
在这里插入图片描述
1.9 搭建一个Web Server
1)IP:10.0.0.160
2)安装Nginx
3)修改默认主页
4)测试:curl 127.0.0.1

2、实现私有域名解析
2.1 新增 zones 记录
vim /etc/bind/named.conf.default-zones
在这里插入图片描述

2.2 设置具体解析规则
vim /etc/bind/db.x.com
rndc reload
在这里插入图片描述

2.3 修改权限,修改属主属组,语法检查
chmod 644 /etc/bind/db.x.com
chown root.root /etc/bind/db.x.com
named-checkzone x.com /etc/bind/db.x.com
在这里插入图片描述
2.4 重载生效
rndc reload
2.5 客户机测试
1)先清空DNS缓存
nscd -i hosts
2)测试私有域名:
ping www.x.com
在这里插入图片描述

13. 总结DNS服务器类型,解析类型,正反解析域,资源记录定义。

1. DNS服务器类型主要包括以下几种:

  • 递归解析器‌:负责接收客户端查询请求,并代表客户端进行一系列查询工作,直到返回最终结果。‌
  • 权威名称服务器‌:负责管理特定域的DNS记录,当需要获取某个域名的记录时,会查询该域名的权威名称服务器。
  • 根域名服务器‌:DNS系统中的最高级别服务器,提供指向顶级域名服务器的指引。‌
  • 顶级域名服务器‌:负责管理顶级域名,如.com、.net等,提供更详细的指引

2. DNS解析类型

  • 正向解析:将域名解析成IP地址
  • 反向解析:根据IP地址得到该IP地址指向的域名

3. 正反解析域

‌正向解析域(Forward Lookup Zone)‌:

‌定义‌:正向解析域是指将域名解析为对应IP地址的过程和区域。它是DNS系统中最基本且最常用的功能。
‌作用‌:当用户输入一个域名时,DNS系统会根据正向解析域中的记录,将该域名解析为对应的IP地址,以便计算机能够通过网络协议找到并访问目标服务器。
‌记录类型‌:正向解析域中主要包含A记录(IPv4地址记录)和AAAA记录(IPv6地址记录)等。
‌反向解析域(Reverse Lookup Zone)‌:

‌定义‌:反向解析域是指将IP地址解析为对应域名的过程和区域。它与正向解析域相反,实现了IP地址到域名的映射。
‌作用‌:反向解析域主要用于网络安全管理、邮件服务器验证发送者合法性等场景。通过反向解析,可以验证某个IP地址是否属于某个特定的域名,从而增加网络通信的安全性。
‌记录类型‌:反向解析域中主要包含PTR记录,用于实现IP地址到域名的反向解析。
综上所述,DNS的正反解析域共同构成了DNS系统的核心功能,实现了域名与IP地址之间的双向映射。正向解析域主要用于将域名解析为IP地址,而反向解析域则用于将IP地址解析为域名。它们在互联网通信中起着至关重要的作用,确保了网络通信的顺畅进行

4. 资源记录定义

DNS资源记录(DNS Resource Records)是DNS系统中用于存储各种类型信息的记录。
这些记录定义了域名与IP地址之间的映射关系,以及其他与域名相关的重要信息。
以下是DNS资源记录的一些主要类型的总结:

‌A记录(Address Record)‌:
将域名指向一个IPv4地址。
是最基本的DNS记录类型之一。

‌AAAA记录(IPv6 Address Record)‌:
将域名指向一个IPv6地址。
用于支持IPv6网络的域名解析。

‌CNAME记录(Canonical Name Record)‌:
将一个域名指向另一个域名,实现域名的别名功能。
常用于将子域名指向主域名或其他域名。

‌MX记录(Mail Exchange Record)‌:
定义域名的邮件交换服务器。
用于指定接收该域名邮件的服务器地址。

‌NS记录(Name Server Record)‌:
指定该域名的权威名称服务器。
用于告诉其他DNS服务器该域名的解析应该由哪些服务器负责。

‌PTR记录(Pointer Record)‌:
实现IP地址到域名的反向解析。
常用于反向DNS查询,如邮件服务器的验证。
‌
TXT记录(Text Record)‌:
存储文本信息,常用于验证域名所有权、SPF(Sender Policy Framework)记录等。
‌
SRV记录(Service Record)‌:
定义提供特定服务的服务器的位置、端口和权重。
常用于定位提供特定网络服务的服务器。

14. 实现DNS主从同步,实现DNS子域授权

                      **实现DNS主从同步**

IP规划:


服务器名称IP地址操作系统
DNS master10.0.0.157ubuntu 22.04
DNS slave10.0.0.159ubuntu 22.04
Web Server10.0.0.160ubuntu 22.04
Sub-DNS Server10.0.0.150ubuntu 22.04
Client Server10.0.0.165centos7

2、DNS SLAVE配置

2.1 安装bind9
apt update && apt install -y bind9

2.2 创建目录
mkdir /etc/bind/slaves
chmod g=rwx /etc/bind/slaves

2.3 修改系统文件配置,允许bind写slaves目录
1)vim /etc/apparmor.d/usr.sbin.named

2)在19行下添加20,21两行内容
/etc/bind/slaves/** rwk,
/etc/bind/slaves/ rwk,

3)重启服务 “apparmor”
systemctl restart apparmor.service
在这里插入图片描述

2.4 新增主从同步配置,重启服务
vim /etc/bind/named.conf.default-zones
systemctl restart named
在这里插入图片描述

2.5 查看slaves目录,(结果为空,没有从DNS Master收到文件)
ls /etc/bind/slaves

2.6 查看159上提前跟踪的日志
tail -f /var/log/syslog
在这里插入图片描述

显示权限有问题, 有以下提示
在这里插入图片描述

2.7 排错
处理过程:
1)删除slaves目录,重新创建目录并授权。

`rm -f /etc/bind/slaves`
	`mkdir /etc/bind/slaves`
	`chmod g=rwx /etc/bind/slaves`

2)重启 DNS slave 的服务
systemctl restart named

3)再次查看slaves目录, 解析文件已经同步
ls /etc/bind/slaves
在这里插入图片描述

2.8 客户端测试
在这里插入图片描述

1)关闭DNS MASTER 上的服务
在这里插入图片描述

2)客户端再测试
默认的DNS已经不能解析,159还可以解析
在这里插入图片描述

3)给客户端添加一个DNS
vim /etc/resolv.conf
在这里插入图片描述

4)再次测试,备用DNS返回结果
在这里插入图片描述

2.9 主从DNS数据同步测试
1)在DNS master增加一条解析记录,重载服务,DNS slave 文件并不会更新
在这里插入图片描述
2)在DNS Master上修改版本号,重载服务
rndc reload
在这里插入图片描述

3)从159的日志看到有更新
在这里插入图片描述

4)查看DNS slave上的解析文件已经更新。同步成功
在这里插入图片描述

                        **实现DNS子域授权**

基于前一个DNS主从同步,添加一台server做为 Subdomain DNS Server
Subdomain DNS Server:10.0.0.150

1、DNS Server 配置
1.1 添加 bj 子域配置,bj 子域由 bj-dns服务解析,并修改序列号
vim /etc/bind/db.x.com
rndc reload
在这里插入图片描述

1.2 检查主从同步是否成功
ll /etc/bind/db.x.com #DNS MASTER
ll /etc/bind/slaves #DNS SLAVE
在这里插入图片描述
更新时间是一致的,同步成功

2、子域DNS配置

2.1 安装bind
apt update && apt install bind9 -y
2.2 修改默认区域配置,添加bj 区域
vim /etc/bind/named.conf.default-zones
在这里插入图片描述
2.3 添加解析文件
vim /etc/bind/db.bj.x.com
rndc reload
在这里插入图片描述

2.4 客户端测试
1)先确认DNS已经指向主从DNS服务器;
2)测试www.bj.x.com, 第一次未得到正确解析(原因是解析文件中,记录“bj.x.com” 后少了.) 修正后重载。
3)第二次测试 www.bj.x.com ,解析正确,默认由DNS SERVER 转发子域
4)先停止DNS MASTER的服务,测试子域地址, 可以由DNS SLAVE 转发子域
在这里插入图片描述

15. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。

一、Openssl服务安全加固:

  1. 修改配置文件‌:
  • 编辑/etc/ssh/sshd_config文件,进行以下设置:
    • 禁用root账户控制台访问:PermitRootLogin no
    • 仅使用SSH Protocol 2
    • 禁用空密码:PermitEmptyPasswords no
    • 配置用户登录控制,如AllowUsers和DenyUsers
    • 设置空闲会话超时时长:ClientAliveInterval和ClientAliveCountMax
    • 禁用基于主机的身份验证:HostbasedAuthentication no
    • 禁用用户的.rhosts文件:IgnoreRhosts yes
  1. 登录认证方式加固‌:
  • 首选公钥认证方式,并考虑增加二次认证
  • 禁用基于密码和基于主机的认证方式
  • 选择安全的ssh-key生成算法,如Ed25519

二、免密认证原理
‌1. 公钥和私钥对‌:

  • 用户生成一对公钥和私钥。公钥可以公开,而私钥必须保密。
  • 公钥放置在服务器上,用于验证客户端的身份;私钥保留在客户端,用于身份验证。

2‌. 身份验证过程‌:

  • 当客户端尝试连接到服务器时,它会使用私钥生成一个数字签名,并将其发送给服务器。
  • 服务器使用公钥验证数字签名的有效性。如果签名有效,则服务器确认客户端的身份,并允许免密登录。

三、免密认证实现过程

  1. 生成公钥和私钥对‌:
    • 使用ssh-keygen命令生成公钥和私钥对。例如:ssh-keygen -t rsa -b 2048
    • 生成的私钥通常保存在/.ssh/id_rsa,公钥保存在/.ssh/id_rsa.pub
  2. 将公钥上传到服务器‌:
    • 使用ssh-copy-id命令将公钥复制到服务器的~/.ssh/authorized_keys文件中。例如:ssh-copy-id user@hostname。
    • 也可以手动将公钥内容添加到authorized_keys文件中。
  3. 配置SSH服务器‌:
    • 确保服务器的SSH配置文件(通常是/etc/ssh/sshd_config)中启用了公钥认证。例如:PubkeyAuthentication yes。
    • 重启SSH服务以应用更改。
  4. 免密登录‌:
    • 客户端在尝试连接到服务器时,会自动使用私钥进行身份验证。
    • 如果一切配置正确,客户端将能够免密登录到服务器。

16. 总结对称加密和非对称加密的概念和常见的加密算法

  • 对称加密

  • 概念‌:
    对称加密,也称为私钥加密或单密钥加密,是一种加密方法,其中加密和解密使用相同的密钥。发送方和接收方必须共享这个密钥,以便能够加密和解密消息。

  • 对称加密常见算法‌:

    • AES(高级加密标准):一种广泛使用的对称加密算法,提供了128位、192位和256位密钥长度的选项。
    • DES(数据加密标准):较早的对称加密算法,使用56位密钥,由于其较短的密钥长度,现在被认为是不够安全的。
    • 3DES(三重数据加密算法):是DES的一种增强版本,使用三个56位或64位的密钥对数据进行三次DES加密。
  1. 非对称加密
  • 概念‌:
    非对称加密,也称为公钥加密或双密钥加密,是一种加密方法,其中使用一对密钥:一个公钥和一个私钥。公钥可以公开给任何人,而私钥则必须保密。发送方使用接收方的公钥加密消息,接收方使用其私钥解密消息。

  • 非对称加密常见算法‌:

    • RSA(Rivest-Shamir-Adleman):一种广泛使用的非对称加密算法,可以用于加密和数字签名。
    • ECC(椭圆曲线密码学):一种使用椭圆曲线数学的公钥加密技术,与RSA相比,它可以在较短的密钥长度下提供相同的安全级别。
    • DSA(数字签名算法):一种基于整数因子分解问题的非对称加密算法,主要用于数字签名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值