diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
index 377409c..76489d6 100644
--- a/docs/.vuepress/config.js
+++ b/docs/.vuepress/config.js
@@ -24,7 +24,7 @@ module.exports = {
{ text: '大史记', link: '/about/news' },
{ text: '配置指南', link: '/config/' },
{ text: '开发指南', link: '/development/' },
- { text: '使用指南', link: '/usage/' },
+ { text: '使用指南', link: '/document/' },
{
text: '多语言',
ariaLabel: 'Language Menu',
@@ -36,6 +36,37 @@ module.exports = {
],
sidebar: {
+ '/config/basis/': [
+ {
+ title: '基础配置',
+ collapsable: false,
+ children: [
+ 'api',
+ 'dns',
+ 'fakedns',
+ 'inbound',
+ 'outbound',
+ 'policy',
+ 'reverse',
+ 'routing',
+ 'stats',
+ 'transport'
+ ]
+ },
+ {
+ title: '入站代理',
+ path: '/config/inbounds/',
+ },
+ {
+ title: '出站代理',
+ path: '/config/outbounds/',
+ },
+ {
+ title: '底层传输',
+ path: '/config/transports/',
+ },
+
+ ],
'/config/': [
{
title: '特性详解',
@@ -48,6 +79,10 @@ module.exports = {
'features/multiple'
]
},
+ {
+ title: '基础配置',
+ path: '/config/',
+ },
{
title: '入站代理',
collapsable: false,
@@ -92,6 +127,17 @@ module.exports = {
]
},
],
+ '/document/level-0/': [
+ 'ch01-preface',
+ 'ch02-preparation',
+ 'ch03-ssh',
+ 'ch04-security',
+ 'ch05-webpage',
+ 'ch06-certificates',
+ 'ch07-xray-server',
+ 'ch08-xray-clients',
+ 'ch09-appendix',
+ ],
'/': 'auto',
}
},
diff --git a/docs/README.md b/docs/README.md
index 3d6e109..80ce628 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -4,7 +4,7 @@ heroImage: /LogoX2.png
heroText: 不畏浮云遮望眼 · 金睛如炬耀苍穹
tagline: Keep Riding / Never Look Back
actionText: 由此开始 →
-actionLink: /guide/
+actionLink: /document/
features:
- title: 极速协议
details:
diff --git a/docs/config/README.md b/docs/config/README.md
index 41796d5..286dd68 100644
--- a/docs/config/README.md
+++ b/docs/config/README.md
@@ -32,46 +32,46 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
## 基础配置模块
-> log:[LogObject](./log.md)
+> log:[LogObject](./basis/log.md)
日志配置,控制 Xray输出日志的方式.
-> api:[ApiObject](./api.md)
+> api:[ApiObject](./basis/api.md)
提供了一些API接口供远程调用。
-> dns: [DnsObject](./dns.md)
+> dns: [DnsObject](./basis/dns.md)
内置的 DNS 服务器. 如果没有配置此项,则使用系统的 DNS 设置。
-> routing: [RoutingObject](./routing.md)
+> routing: [RoutingObject](./basis/routing.md)
路由功能。可以设置规则分流数据从不同的outbound发出.
-> policy: [PolicyObject](./policy.md)
+> policy: [PolicyObject](./basis/policy.md)
本地策略,可以设置不同的用户等级和对应的策略设置。
-> inbounds: \[ [InboundObject](./inbound.md) \]
+> inbounds: \[ [InboundObject](./basis/inbound.md) \]
一个数组,每个元素是一个入站连接配置。
-> outbounds: \[ [OutboundObject](./outbound.md) \]
+> outbounds: \[ [OutboundObject](./basis/outbound.md) \]
一个数组,每个元素是一个出站连接配置。
-> transport: [TransportObject](./transport.md)
+> transport: [TransportObject](./basis/transport.md)
用于配置 Xray 其它服务器建立和使用网络连接的方式。
-> stats: [StatsObject](./stats.md)
+> stats: [StatsObject](./basis/stats.md)
用于配置流量数据的统计。
-> reverse: [ReverseObject](./reverse.md)
+> reverse: [ReverseObject](./basis/reverse.md)
反向代理。可以把服务器端的流量向客户端转发,即逆向流量转发
-> fakedns: [FakeDnsObject](./fakedns.md)
+> fakedns: [FakeDnsObject](./basis/fakedns.md)
FakeDNS. 可配合透明代理使用,以获取实际域名。
diff --git a/docs/config/api.md b/docs/config/basis/api.md
similarity index 100%
rename from docs/config/api.md
rename to docs/config/basis/api.md
diff --git a/docs/config/dns.md b/docs/config/basis/dns.md
similarity index 100%
rename from docs/config/dns.md
rename to docs/config/basis/dns.md
diff --git a/docs/config/dns_flow.png b/docs/config/basis/dns_flow.png
similarity index 100%
rename from docs/config/dns_flow.png
rename to docs/config/basis/dns_flow.png
diff --git a/docs/config/fakedns.md b/docs/config/basis/fakedns.md
similarity index 100%
rename from docs/config/fakedns.md
rename to docs/config/basis/fakedns.md
diff --git a/docs/config/inbound.md b/docs/config/basis/inbound.md
similarity index 98%
rename from docs/config/inbound.md
rename to docs/config/basis/inbound.md
index f1921e4..d681b03 100644
--- a/docs/config/inbound.md
+++ b/docs/config/basis/inbound.md
@@ -1,6 +1,6 @@
# 入站代理
-入站连接用于接收发来的数据,可用的协议请见[inbound 可用协议列表](./inbounds/)。
+入站连接用于接收发来的数据,可用的协议请见[inbound 可用协议列表](../inbounds/)。
## InboundObject
@@ -52,7 +52,7 @@
>`protocol`: string
-连接协议名称,可选的协议类型见 [inbound 可用协议列表](./inbounds/)。
+连接协议名称,可选的协议类型见 [inbound 可用协议列表](../inbounds/)。
>`settings`: InboundConfigurationObject
diff --git a/docs/config/log.md b/docs/config/basis/log.md
similarity index 100%
rename from docs/config/log.md
rename to docs/config/basis/log.md
diff --git a/docs/config/outbound.md b/docs/config/basis/outbound.md
similarity index 88%
rename from docs/config/outbound.md
rename to docs/config/basis/outbound.md
index 72da79e..b30b077 100644
--- a/docs/config/outbound.md
+++ b/docs/config/basis/outbound.md
@@ -1,6 +1,6 @@
# 出站代理
-出站连接用于发送数据,可用的协议请见 [outbound 可用协议列表](./outbounds/)。
+出站连接用于发送数据,可用的协议请见 [outbound 可用协议列表](../outbounds/)。
## OutboundObject
@@ -34,7 +34,7 @@
用于发送数据的 IP 地址,当主机有多个 IP 地址时有效,默认值为 `"0.0.0.0"`。
>`protocol`: string
-连接协议名称,可选的协议类型见 [outbound 可用协议列表](./outbounds/)。
+连接协议名称,可选的协议类型见 [outbound 可用协议列表](../outbounds/)。
>`settings`: OutboundConfigurationObject
具体的配置内容,视协议不同而不同。详见每个协议中的 `OutboundConfigurationObject`。
@@ -83,7 +83,7 @@ Mux 相关的具体配置。
:::
### MuxObject
-Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../development/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
+Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。实现细节详见 [Mux.Cool](../../development/protocols/muxcool)。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配。
`MuxObject` 对应 `OutboundObject` 中的 `mux` 项。
diff --git a/docs/config/policy.md b/docs/config/basis/policy.md
similarity index 100%
rename from docs/config/policy.md
rename to docs/config/basis/policy.md
diff --git a/docs/config/reverse.md b/docs/config/basis/reverse.md
similarity index 97%
rename from docs/config/reverse.md
rename to docs/config/basis/reverse.md
index 18b1ef3..de1f8a3 100644
--- a/docs/config/reverse.md
+++ b/docs/config/basis/reverse.md
@@ -11,7 +11,7 @@
* `bridge` 会根据流量的大小进行动态的负载均衡。
::: tip
-反向代理默认已开启 [Mux](../development/protocols/muxcool/),请不要在其用到的outbound上再次开启 Mux。
+反向代理默认已开启 [Mux](../../development/protocols/muxcool/),请不要在其用到的outbound上再次开启 Mux。
:::
::: warning
diff --git a/docs/config/routing.md b/docs/config/basis/routing.md
similarity index 100%
rename from docs/config/routing.md
rename to docs/config/basis/routing.md
diff --git a/docs/config/stats.md b/docs/config/basis/stats.md
similarity index 100%
rename from docs/config/stats.md
rename to docs/config/basis/stats.md
diff --git a/docs/config/transport.md b/docs/config/basis/transport.md
similarity index 93%
rename from docs/config/transport.md
rename to docs/config/basis/transport.md
index c32941a..32fcd45 100644
--- a/docs/config/transport.md
+++ b/docs/config/basis/transport.md
@@ -29,31 +29,31 @@
}
```
-> `tcpSettings`: [TcpObject](./transports/tcp.md)
+> `tcpSettings`: [TcpObject](../transports/tcp.md)
针对 TCP 连接的配置。
-> `kcpSettings`: [KcpObject](./transports/mkcp.md)
+> `kcpSettings`: [KcpObject](../transports/mkcp.md)
针对 mKCP 连接的配置。
-> `wsSettings`: [WebSocketObject](./transports/websocket).md
+> `wsSettings`: [WebSocketObject](../transports/websocket.md)
针对 WebSocket 连接的配置。
-> `httpSettings`: [HttpObject](./transports/h2.md)
+> `httpSettings`: [HttpObject](../transports/h2.md)
针对 HTTP/2 连接的配置。
-> `quicSettings`: [QuicObject](./transports/quic.md)
+> `quicSettings`: [QuicObject](../transports/quic.md)
针对 QUIC 连接的配置。
-> `grpcSettings`: [GRPCObject](./transports/grpc.md)
+> `grpcSettings`: [GRPCObject](../transports/grpc.md)
针对 gRPC 连接的配置。
-> `dsSettings`: [DomainSocketObject](./transports/domainsocket.md)
+> `dsSettings`: [DomainSocketObject](../transports/domainsocket.md)
针对 Domain Socket 连接的配置。
@@ -94,7 +94,7 @@
是否启用传输层加密,支持的选项有
- `"none"` 表示不加密(默认值)
- `"tls"` 表示使用 [TLS](https://en.wikipedia.org/wiki/base/transport_Layer_Security)。
-- `"xtls"` 表示使用 [XTLS](./features/xtls.md)。
+- `"xtls"` 表示使用 [XTLS](../features/xtls.md)。
> `tlsSettings`: [TLSObject](#tlsobject)
@@ -103,7 +103,7 @@ TLS 配置。TLS 由 Golang 提供,通常情况下TLS协商的结果为使用
> `xtlsSettings`: [XTLSObject](#tlsobject)
XTLS 配置。XTLS 是 Xray 的原创黑科技, 也是使 Xray 性能一骑绝尘的核心动力。
-XTLS 与 TLS 有相同的安全性, 配置方式也和TLS一致. 点击此处查看 [XTLS的技术细节剖析](./features/xtls.md)
+XTLS 与 TLS 有相同的安全性, 配置方式也和TLS一致. 点击此处查看 [XTLS的技术细节剖析](../features/xtls.md)
::: danger
TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型和正常上网具有一致性。
@@ -111,31 +111,31 @@ TLS / XTLS 是目前最安全的传输加密方案, 且外部看来流量类型
当 `security` 的值从 `tls` 改为 `xtls` 时, 只需将 `tlsSettings` 修改成为 `xtlsSettings`
:::
-> `tcpSettings`: [TcpObject](./transports/tcp.md)
+> `tcpSettings`: [TcpObject](../transports/tcp.md)
当前连接的 TCP 配置,仅当此连接使用 TCP 时有效。配置内容与上面的全局配置相同。
-> `kcpSettings`: [KcpObject](./transports/mkcp.md)
+> `kcpSettings`: [KcpObject](../transports/mkcp.md)
当前连接的 mKCP 配置,仅当此连接使用 mKCP 时有效。配置内容与上面的全局配置相同。
-> `wsSettings`: [WebSocketObject](./transports/websocket.md)
+> `wsSettings`: [WebSocketObject](../transports/websocket.md)
当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。配置内容与上面的全局配置相同。
-> `httpSettings`: [HttpObject](./transports/h2.md)
+> `httpSettings`: [HttpObject](../transports/h2.md)
当前连接的 HTTP/2 配置,仅当此连接使用 HTTP/2 时有效。配置内容与上面的全局配置相同。
-> `quicSettings`: [QUICObject](./transports/quic.md)
+> `quicSettings`: [QUICObject](../transports/quic.md)
当前连接的 QUIC 配置,仅当此连接使用 QUIC 时有效。配置内容与上面的全局配置相同。
-> `grpcSettings`: [GRPCObject](./transports/grpc.md)
+> `grpcSettings`: [GRPCObject](../transports/grpc.md)
当前连接的 gRPC 配置,仅当此连接使用 gRPC 时有效。配置内容与上面的全局配置相同。
-> `dsSettings`: [DomainSocketObject](./transports/domainsocket.md)
+> `dsSettings`: [DomainSocketObject](../transports/domainsocket.md)
当前连接的 Domain socket 配置,仅当此连接使用 Domain socket 时有效。配置内容与上面的全局配置相同。
@@ -384,7 +384,7 @@ ocspStapling 检查更新时间间隔。 单位:秒
透明代理需要 Root 或 `CAP\_NET\_ADMIN` 权限。
::: danger
-当 [Dokodemo-door](./inbounds/dokodemo.md) 中指定了 `followRedirect`为`true`,且 Sockopt设置中的`tproxy` 为空时,Sockopt设置中的`tproxy` 的值会被设为 `"redirect"`。
+当 [Dokodemo-door](../inbounds/dokodemo.md) 中指定了 `followRedirect`为`true`,且 Sockopt设置中的`tproxy` 为空时,Sockopt设置中的`tproxy` 的值会被设为 `"redirect"`。
:::
> `domainStrategy`: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
diff --git a/docs/guide/README.md b/docs/document/README.md
similarity index 66%
rename from docs/guide/README.md
rename to docs/document/README.md
index 45b37bb..e749955 100644
--- a/docs/guide/README.md
+++ b/docs/document/README.md
@@ -25,3 +25,21 @@ Xray有多种命令和参数可用,因此变得灵活和强大.
如果你有兴趣,请点击 [使用文档](./document.md) 帮助我们改进文档,或者点击页面下方的 `帮助我们改善此页面!`
我们十分感谢每一位 contributor 作出的贡献!是你们让 Project X 变得更加强大!
+
+## 小小白白话文
+给予新手指导的使用心得
+
+请点击 [小小白白话文](./level-0/) 以进行查看
+
+## 入门技巧
+具备了基础之后,你就可以通过 [入门技巧](./level-1/) 来探索更多的使用方式了
+
+## 进阶文档
+给予进阶用户指导的使用技巧
+
+点击 [进阶文档](./level-2/) 以进行查看
+
+
+::: tip 感谢
+非常感谢大家无私分享使用技巧和心得, 使得Xray日益强大。
+:::
diff --git a/docs/guide/command.md b/docs/document/command.md
similarity index 100%
rename from docs/guide/command.md
rename to docs/document/command.md
diff --git a/docs/guide/config.md b/docs/document/config.md
similarity index 100%
rename from docs/guide/config.md
rename to docs/document/config.md
diff --git a/docs/guide/document.md b/docs/document/document.md
similarity index 100%
rename from docs/guide/document.md
rename to docs/document/document.md
diff --git a/docs/guide/install.md b/docs/document/install.md
similarity index 100%
rename from docs/guide/install.md
rename to docs/document/install.md
diff --git a/docs/document/level-0/README.md b/docs/document/level-0/README.md
new file mode 100644
index 0000000..e4d097f
--- /dev/null
+++ b/docs/document/level-0/README.md
@@ -0,0 +1,26 @@
+# 小小白白话文
+
+**这个章节是【从零开始】的基础课,新来的同学好好看好好学哦**
+
+::: tip
+Made with ❤️ by [@ricuhkaen](https://github.com/ricuhkaen)
+:::
+
+[【第1章】 前言罗嗦篇](./ch01-preface.md) - 机场还是自建?这是个问题
+
+[【第2章】 原料准备篇](./ch02-preparation.md) - 工欲善其事,必先利其器
+
+[【第3章】 远程登录篇](./ch03-ssh.md) - 一桥飞架南北,天堑变通途
+
+[【第4章】 安全防护篇](./ch04-security.md) - 安全不注意,亲人两行泪
+
+[【第5章】 网站建设篇](./ch05-webpage.md) - 秀出你的美
+
+[【第6章】 证书管理篇](./ch06-certificates.md) - 领证的才是合法的
+
+[【第7章】 Xray服务器篇](./ch07-xray-server.md) - 终于等到你
+
+[【第8章】 Xray客户端篇](./ch08-xray-clients.md) - 新的开始
+
+[【第9章】 附录](./ch09-appendix.md) - 考点都在这里
+
diff --git a/docs/document/level-0/ch01-img01-choice.png b/docs/document/level-0/ch01-img01-choice.png
new file mode 100644
index 0000000..9e6e17a
Binary files /dev/null and b/docs/document/level-0/ch01-img01-choice.png differ
diff --git a/docs/document/level-0/ch01-preface.md b/docs/document/level-0/ch01-preface.md
new file mode 100644
index 0000000..f77c829
--- /dev/null
+++ b/docs/document/level-0/ch01-preface.md
@@ -0,0 +1,103 @@
+# 【第1章】 小小白白话文
+
+## 1.1 这篇文档是写给谁的?
+
+一句话:写给 **①零基础** **②希望学习自建VPS** 的新人。
+
+## 1.2 这篇文档不是写给谁的?
+
+包括但不限于:各路大神大能、懒得自己折腾的小白、已经会折腾的高手、确定要用机场的土豪、确定要用一键脚本的逍遥派...... 总之只要有技术基础、或不愿不想自建的同学,您直接关闭本文即可,因为这篇文章大概是入不了您的法眼的,更可能会让您生一肚子闲气,那多划不来。
+
+
+
+## 1.3 郑重声明及其他声明
+
+郑重声明:
+
+鄙人技术奇菜无比,故本文必然挂一漏万破绽百出。您若发现问题还请温柔提醒,莫要人参公鸡。
+
+免责声明:
+
+本文内容请您自行判断是否可信可靠可用,若您根据本文内容建立和使用VPS服务器时出了任何问题和不良结果,鄙人概不负责。
+
+啰嗦声明:
+
+基于本文【零基础用户】的目标受众,许多内容会尽力详尽说明,所以语言偏啰嗦,请做好心理准备。
+
+
+## 1.4 为什么自建是个难题?
+
+要回答这个问题,就需要稍微多说一点背景信息了。
+
+一、科学上网这件事
+
+科学上网这件事情,说来已经发展了近二十年(震惊!!!.jpg)。最初,自己稍微动动手即可(改改host、连一下ssh)、后来需要找一个网页代理,再后来需要写一个私有协议(比如Shadowsocks)等等。
+
+随着GFW技术这十几年来不断的迭代升级,若要完成【自己动手科学上网】这个目标,需要做的事情已经包括但不限于:
+
+ 1. 了解Linux系统基本命令
+ 2. 了解网络传输协议
+ 3. 有技术和经济能力完成VPS购买及管理
+ 4. 有技术和经济能力完成域名购买及管理
+ 5. 有技术能力完成TLS证书申请 等等。
+
+这就让【自建VPS科学上网】这个曾经简单的行为逐渐变成了令新人望而生畏的挑战。
+
+二、零基础用户的无奈
+
+零基础的非技术用户,如果完成上面这一连串的操作,势必要学习大量的知识,但稍微搜索之后,新人只怕会更加迷茫:大量的信息散布在互联网的各个角落:博客、问答网站、群组、论坛、GitHub、Telegram、YouTube 等等等等)。这些信息纷乱复杂、水平良莠不齐、甚至可能互相矛盾。基本上就是不把新人彻底弄晕誓不罢休。
+
+面对这些杂乱无章的信息,新人突然就从【信息匮乏】变成了【信息过剩】。若是几番连蒙带猜的折腾以失败告终(大概率如此)的话,他的积极性势必大受挫折。在这个过程中,若他又恰好去了一些不太友好的地方去求助,恐怕还要雪上加霜的被嘲讽一番:“这么菜,用机场不就行了,瞎折腾什么啊!”、“先去学会Linux再回来问吧”。
+
+这时候,大概也只有一声“呵呵”可以表达心情了。
+
+## 1.5 “用机场不就行了?”
+
+首先,我想反问一下那些冷嘲热讽的人:“用机场”真的就是万灵药吗?
+
+其次,我认为“不懂”和“不想懂”是有本质区别的。态度恶劣的巨婴伸手党自然惹人厌烦,但真心自学却不得要领的人不该受到无端的白眼和歧视,也正是这种对新人不加区分的恶劣社区氛围促使我写下本文。那么闲话少说,我们来看看机场的优势与劣势究竟如何:
+
+一、“机场“的优势
+
+所谓“机场”,就是“线路提供商”。他负责完成1.4提到的那一串技术操作和管理,用户则付费获得使用权。所以,它的优点至少有:
+
+1. **用户操作简单**:扫码操作、一键添加规则等
+2. **线路选择多**:可解锁不同国家、地区的网络服务;比如iplc等专线服务、游戏加速服务等
+3. **接入节点多**:所以抵抗节点封锁的能力强一些,封了一个就换下一个
+
+二、“机场”的风险
+
+“方便”这枚硬币的另一面就是“风险”,基于“机场”的技术特点和市场情况,它的风险至少有:
+
+1. **“机场”可完全获得用户信息**:用户在网上的所有痕迹,都【必然】经过且【非常可能】长期存储在其服务器上,这些记录无法受到任何具备法律效力的用户隐私协议的约束(**窥视、记录你的一举一动**)
+2. **“机场”缺乏市场管理**:不可避免存在着以欺诈为目标的恶意商家(**主动跑路**)
+3. **“机场”面临监管压力**:大机场相对有保障的同时,也无法避免树大招风。2020年间,已经有几个大机场停运、跑路的事件发生,用户的正常使用受到严重干扰(**被动跑路**)
+4. **“机场”技术水平难以确定**:线路质量良莠不齐,挂羊头卖狗肉的现象屡见不鲜(**速度慢、掉线多、连不上**)
+
+
+
+## 1.6 那么你到底要不要自建呢?
+
+现在,你已经看到了机场的优势和风险,要用什么,就请各位充分思考并自行决定。毕竟,最适合你的方案才是最好的方案。
+
+
+
+
+1. 如果决定使用机场的话,现在,你可以关闭本文了。
+
+2. 如果你决定自建,那就请继续阅读后面的章节吧!!
+
+总之,本文的目标就是成为零基础用户的知识起点,提供对每一步充分的讲解和演示,清清楚楚(甚至**婆婆妈妈、絮絮叨叨、啰啰嗦嗦**)的协助新人完成【**从输入第一条命令开始,完成VPS服务器部署,并成功在客户端完成科学上网**】的全程。并在这个过程中帮助新人逐步接触和熟悉Linux的基础操作,为之后的进一步自学打下基础。
+
+## 1.7 题外啰嗦几句
+
+1. 墙外的信息泥沙俱下,请务必学会理性、独立的思辨,不要随意站队,不要轻信猎奇的信息。
+
+2. 衷心希望大家获得更顺畅的网络后,可以获取更新鲜的知识、更丰富的娱乐、接触更美好的世界、结交更多志同道合的朋友,但不要成为任何有不可告人目的之人的替罪羊。
+
+3. 你的互联网身份依然是你的身份,绝对的匿名化是极为困难的,所以请务必遵守你个人所在地区和IP所在地区的相关法律法规。无论何时,自我保护都是最基本的底线。
+
+
+## 1.8 你的进度
+
+> `⬛⬜⬜⬜⬜⬜⬜⬜ 12.5%`
diff --git a/docs/document/level-0/ch02-img01-a-name.png b/docs/document/level-0/ch02-img01-a-name.png
new file mode 100644
index 0000000..b8f7322
Binary files /dev/null and b/docs/document/level-0/ch02-img01-a-name.png differ
diff --git a/docs/document/level-0/ch02-preparation.md b/docs/document/level-0/ch02-preparation.md
new file mode 100644
index 0000000..75f3bb5
--- /dev/null
+++ b/docs/document/level-0/ch02-preparation.md
@@ -0,0 +1,57 @@
+# 【第2章】原料准备篇
+
+这一章比较特殊,因为涉及到金钱交易行为,本文基于项目的中立立场,不做具体的推荐。我能做的,是告诉你需要准备哪些东西。
+
+## 2.1 获取一台VPS
+
+你需要获取一台健康的、IP没有被墙的VPS,并在管理后台做下面这些基础准备:
+
+1. 在VPS的后台安装 Debian 10 64bit 系统
+2. 小本本记下VPS的IP地址(本文会用 `"100.200.300.400"` 来表示)
+::: tip
+**注意:** 这是一个故意写错的非法IP,请替换成你的真实IP)
+:::
+3. 小本本记下VPS的SSH远程登陆端口(Port)
+4. 小本本记下SSH远程登录的用户名和密码
+
+购买VPS是一个比较复杂的事情,建议先去学习一下相关知识,选择适合自己的经济能力和线路需求的即可。另外可以选择薅一些国际大厂的羊毛(比如甲骨文和谷歌提供的永久免费或限时免费的套餐)。总之,务必量力而行。
+
+::: tip
+**说明:** 关于选择 Debian 10 作为操作系统,这里稍微多说一句:不管你在网上听说了什么,不管哪个大神告诉你XXX版的Linux更好、XXX版的Linux更牛,这些Linux的派系之争**跟现在的你半毛钱关系也没有**!使用 Debian 10 足以让你的VPS服务器在安全、稳健运行的同时得到足够的优化(如cloud专用内核、及时的bbr支持等)。等你对Linux熟悉之后,再回头去尝试其他的Linux发行版也不迟
+:::
+
+## 2.2 获取一个心仪的域名
+
+你需要获取一个域名、并在DNS设置中添加一条A记录,指向你VPS的IP地址
+
+1. 请选择靠谱的国际域名服务商。选择一些常见的域名后缀就行,注意不要用 `.cn` 后缀。
+2. 在DNS设置中,添加一条指向你VPS的IP地址的A记录(A记录的名字可以随便起,本文会用 `"a-name"` 来表示。完整的域名则会用 `"二级域名.你的域名.com"` 或者 `"a-name.yourdomain.com"` 来表示)。效果如下图:
+
+
+
+::: tip
+**注意:** 这**不是**一个真实可用的网址,请替换成你的真实网址
+:::
+
+
+
+## 2.3 你本地电脑上需要安装的软件
+
+1. SSH远程登录工具
+ - Windows: [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
+ - macOS/Linux: Terminal
+
+2. 远程文件拷贝工具
+ - Windows: [WinSCP](https://winscp.net/eng/index.php)
+ - macOS/Linux: Terminal
+
+3. 靠谱的文本编辑器
+ - Windows/macOS/Linux: [VSCode](https://code.visualstudio.com)
+
+
+
+## 2.4 你的进度
+
+如果上面的原材料你都准备好了的话,你已经拿到了开启新世界大门的钥匙。那还等什么,让我们快点进入下一章,走进这扇门吧!
+
+> `⬛⬛⬜⬜⬜⬜⬜⬜ 25%` :::
diff --git a/docs/document/level-0/ch03-img01-putty-download.png b/docs/document/level-0/ch03-img01-putty-download.png
new file mode 100644
index 0000000..44dae2d
Binary files /dev/null and b/docs/document/level-0/ch03-img01-putty-download.png differ
diff --git a/docs/document/level-0/ch03-img02-putty-settings.png b/docs/document/level-0/ch03-img02-putty-settings.png
new file mode 100644
index 0000000..337288e
Binary files /dev/null and b/docs/document/level-0/ch03-img02-putty-settings.png differ
diff --git a/docs/document/level-0/ch03-img03-putty-keepalive.png b/docs/document/level-0/ch03-img03-putty-keepalive.png
new file mode 100644
index 0000000..73f4a7f
Binary files /dev/null and b/docs/document/level-0/ch03-img03-putty-keepalive.png differ
diff --git a/docs/document/level-0/ch03-img04-ssh-login.png b/docs/document/level-0/ch03-img04-ssh-login.png
new file mode 100644
index 0000000..824a703
Binary files /dev/null and b/docs/document/level-0/ch03-img04-ssh-login.png differ
diff --git a/docs/document/level-0/ch03-img05-ssh-login-success.png b/docs/document/level-0/ch03-img05-ssh-login-success.png
new file mode 100644
index 0000000..a934002
Binary files /dev/null and b/docs/document/level-0/ch03-img05-ssh-login-success.png differ
diff --git a/docs/document/level-0/ch03-img06-apt-upgrade-full.gif b/docs/document/level-0/ch03-img06-apt-upgrade-full.gif
new file mode 100644
index 0000000..5b7237d
Binary files /dev/null and b/docs/document/level-0/ch03-img06-apt-upgrade-full.gif differ
diff --git a/docs/document/level-0/ch03-ssh.md b/docs/document/level-0/ch03-ssh.md
new file mode 100644
index 0000000..cd571ac
--- /dev/null
+++ b/docs/document/level-0/ch03-ssh.md
@@ -0,0 +1,89 @@
+# 【第3章】远程登录篇
+
+## 3.1 远程登录VPS (PuTTY)
+
+首先,鉴于零基础人群中Windows的用户基数最大,所以本文以Windows为例进行展示。
+
+其次,虽然Windows 10之后的PowerShell和WSL也可以达到很好的SSH操作体验。但是因为并非所有版本的Windows都有最新的组件,故本文还是以老牌的PuTTY为例,进行SSH远程登录的操作详解。(使用其他工具的话、在SSH登陆之后的操作都是一样的)
+
+下面就跟我一步步操作吧。
+
+1. 进入PuTTY的[官网](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html),选择适合你操作系统的版本下载。(本文以64位版本为例)
+
+
+
+2. 安装运行后,将会看到PuTTY的主界面。现在请拿出你上一章记东西的[小本本](../ch02-preparation/#21-%E8%8E%B7%E5%8F%96%E4%B8%80%E5%8F%B0vps),在下图的对应位置填入你VPS的**IP地址(VPS IP)**和**端口(VPS PORT)**。为了方便以后使用时不用重复输入,我们可以保存会话 (Saved Sessions),未来使用时只要按Load即可一键载入设置。
+
+
+
+3. 我建议将 `Connection` 中的 `keepalive` 设置为 `60` 秒,防止你一段时间没有操作之后SSH自动断线。另外务必再次保存设置。
+
+::: warning 注意
+对PuTTY的任何设置更新都要再次手动保存Session,不然关闭后就会丢失
+:::
+
+
+
+4. 点击 Open 就会进入SSH连接窗口,对应下图输入用户名与密码,与你的VPS远程主机建立连接。(本文假设默认用户名是 `root`,另外,在Linux系统输入密码的时候,是不会出现 `******` 这种提示符的,这样可以避免密码长度泄漏,不是你的键盘坏掉了哦!)
+
+
+
+
+## 3.2 成功登录SSH!初识命令行界面!
+
+1. 如果你的信息都填写正确,你将会看到类似下图的界面,说明已登录成功:
+
+
+
+ 这个界面,就等于远程服务器的【桌面】,但它没有你熟悉的图标和鼠标,没有绚丽的色彩,有的只是简单文字,这就是【**命令行界面**】- `Command Line Interface`,或者缩写为 `CLI`。
+
+ 接下来的所有操作,都需要你像电影里的黑客一样,在这个命令行界面中完成。也许你会觉得陌生,但请相信我,使用命令行既不可怕,也不神秘。说到底,它只不过是把你习惯的鼠标操作变成了文字指令而已,**你说一句,它做一句**。
+
+2. 现在,你可以稍微观察并熟悉一下命令行环境,这个界面其实已经告诉了你一些有用的信息了,比如系统内核版本(比如图内是 `4.19.37-5`)、上次登录时间及IP等。当然根据VPS的不同,你看到的界面可能会略有不同。
+
+3. 请注意命令行最下面一行,闪动的光标左边,有一串字符。图中显示的是`root@vps-server:~#`,这一串要怎么理解呢?很简单:
+
+ - 现在的用户是 `root`
+ - `root` 所在的服务器是 `vps-server`
+ - `root` 现在所在的文件夹是 `~`
+ - `#` 之后是你可以输入命令的地方
+
+ 前两个很直观,无需多说。第三个是关于Linux的文件夹系统,现在也不需要过于深入,你只需要知道,"`~`"就是【当前用户的大本营】。第四个,提示符`#`,你也不用管,只需要知道,未来文章中会写一些需要你输入的命令,都会以 "`#`" 或者 "`$`" 开头,提示你**后面**是你输入命令的地方。(所以你复制命令的时候,**只需要复制后面的内容**,不要复制提示符)
+
+
+
+## 3.3 第一次更新Linux的软件!
+
+1. 正如你的手机,无论安卓还是iPhone,为了APP及时更新(获取安全补丁和新功能),都会时不时从应用商店获得更新信息,并且提示你有多少个APP可更新。Linux系统也有逻辑十分类似的更新机制。所以只要你会更新手机APP,就能学会更新Linux软件!
+
+2. Linux下,每个APP都叫做一个“包” (package)。管理APP的程序自然就叫做“包管理器”(Package Manager)。你可以通过它安装、更新、卸载各种软件、甚至更新Linux系统本身。Linux下的包管理器非常强大,此处按下不表,现在你只需要知道Debian系统的包管理器叫做 `apt` 即可。接下来,我们就先使用 `apt` 做一次软件的全面更新,让你熟悉它的基本操作。
+
+3. 小小白白Linux基础命令:
+
+ | 编号 | 命令名称 | 命令说明 |
+ |:--:|:--:|:--:|
+ | `cmd-01` | `apt update` | 查询软件更新 |
+ | `cmd-02` | `apt upgrade` | 执行软件更新 |
+
+4. 现在请输入第一条命令,获取更新信息
+ ```
+ # apt update
+ ```
+
+5. 然后请输入第二条命令,并在询问是否继续安装 `(Y/n)` 时输入 `y` 并回车确认,开始安装
+ ```
+ # apt upgrade
+ ```
+
+6. 完整流程演示如下:
+
+
+
+
+
+## 3.4 你的进度
+
+**恭喜你又迈出了坚实的一步!** 现在,你已经可以通过SSH来登录你的远程服务器了!那登录进去之后,除了升级软件之外,应该再做点什么呢?敬请进入下一章一探究竟吧!
+
+
+> `⬛⬛⬛⬜⬜⬜⬜⬜ 37.5%` :::
diff --git a/docs/document/level-0/ch04-img01-nano-ui.png b/docs/document/level-0/ch04-img01-nano-ui.png
new file mode 100644
index 0000000..5bd086a
Binary files /dev/null and b/docs/document/level-0/ch04-img01-nano-ui.png differ
diff --git a/docs/document/level-0/ch04-img02-sshd-conf-full.gif b/docs/document/level-0/ch04-img02-sshd-conf-full.gif
new file mode 100644
index 0000000..039f2e3
Binary files /dev/null and b/docs/document/level-0/ch04-img02-sshd-conf-full.gif differ
diff --git a/docs/document/level-0/ch04-img03-adduser.png b/docs/document/level-0/ch04-img03-adduser.png
new file mode 100644
index 0000000..e336a95
Binary files /dev/null and b/docs/document/level-0/ch04-img03-adduser.png differ
diff --git a/docs/document/level-0/ch04-img04-adduser-full.gif b/docs/document/level-0/ch04-img04-adduser-full.gif
new file mode 100644
index 0000000..e138054
Binary files /dev/null and b/docs/document/level-0/ch04-img04-adduser-full.gif differ
diff --git a/docs/document/level-0/ch04-img05-sudo-full.gif b/docs/document/level-0/ch04-img05-sudo-full.gif
new file mode 100644
index 0000000..20739a4
Binary files /dev/null and b/docs/document/level-0/ch04-img05-sudo-full.gif differ
diff --git a/docs/document/level-0/ch04-img06-ssh-no-root-full.gif b/docs/document/level-0/ch04-img06-ssh-no-root-full.gif
new file mode 100644
index 0000000..a098b2b
Binary files /dev/null and b/docs/document/level-0/ch04-img06-ssh-no-root-full.gif differ
diff --git a/docs/document/level-0/ch04-img07-putty-default-user.png b/docs/document/level-0/ch04-img07-putty-default-user.png
new file mode 100644
index 0000000..2df1ab8
Binary files /dev/null and b/docs/document/level-0/ch04-img07-putty-default-user.png differ
diff --git a/docs/document/level-0/ch04-img08-puttygen-save.png b/docs/document/level-0/ch04-img08-puttygen-save.png
new file mode 100644
index 0000000..4e18556
Binary files /dev/null and b/docs/document/level-0/ch04-img08-puttygen-save.png differ
diff --git a/docs/document/level-0/ch04-img09-puttygen-save-keys.png b/docs/document/level-0/ch04-img09-puttygen-save-keys.png
new file mode 100644
index 0000000..3a515f8
Binary files /dev/null and b/docs/document/level-0/ch04-img09-puttygen-save-keys.png differ
diff --git a/docs/document/level-0/ch04-img10-winscp-import-session.png b/docs/document/level-0/ch04-img10-winscp-import-session.png
new file mode 100644
index 0000000..f9fadeb
Binary files /dev/null and b/docs/document/level-0/ch04-img10-winscp-import-session.png differ
diff --git a/docs/document/level-0/ch04-img11-winscp-ui.png b/docs/document/level-0/ch04-img11-winscp-ui.png
new file mode 100644
index 0000000..4c0b14d
Binary files /dev/null and b/docs/document/level-0/ch04-img11-winscp-ui.png differ
diff --git a/docs/document/level-0/ch04-img12-winscp-locations.png b/docs/document/level-0/ch04-img12-winscp-locations.png
new file mode 100644
index 0000000..5cee059
Binary files /dev/null and b/docs/document/level-0/ch04-img12-winscp-locations.png differ
diff --git a/docs/document/level-0/ch04-img13-winscp-newfolder-key.png b/docs/document/level-0/ch04-img13-winscp-newfolder-key.png
new file mode 100644
index 0000000..6547a63
Binary files /dev/null and b/docs/document/level-0/ch04-img13-winscp-newfolder-key.png differ
diff --git a/docs/document/level-0/ch04-img14-winscp-upload-key.png b/docs/document/level-0/ch04-img14-winscp-upload-key.png
new file mode 100644
index 0000000..52f60f3
Binary files /dev/null and b/docs/document/level-0/ch04-img14-winscp-upload-key.png differ
diff --git a/docs/document/level-0/ch04-img15-winscp-rename-key.png b/docs/document/level-0/ch04-img15-winscp-rename-key.png
new file mode 100644
index 0000000..03498cd
Binary files /dev/null and b/docs/document/level-0/ch04-img15-winscp-rename-key.png differ
diff --git a/docs/document/level-0/ch04-img16-winscp-full.gif b/docs/document/level-0/ch04-img16-winscp-full.gif
new file mode 100644
index 0000000..f99898a
Binary files /dev/null and b/docs/document/level-0/ch04-img16-winscp-full.gif differ
diff --git a/docs/document/level-0/ch04-img17-rsa-login-full.gif b/docs/document/level-0/ch04-img17-rsa-login-full.gif
new file mode 100644
index 0000000..2fc6925
Binary files /dev/null and b/docs/document/level-0/ch04-img17-rsa-login-full.gif differ
diff --git a/docs/document/level-0/ch04-img18-putty-privatekey-location.png b/docs/document/level-0/ch04-img18-putty-privatekey-location.png
new file mode 100644
index 0000000..09233f3
Binary files /dev/null and b/docs/document/level-0/ch04-img18-putty-privatekey-location.png differ
diff --git a/docs/document/level-0/ch04-img19-putty-privatekey-passphrase.png b/docs/document/level-0/ch04-img19-putty-privatekey-passphrase.png
new file mode 100644
index 0000000..3f9c6ce
Binary files /dev/null and b/docs/document/level-0/ch04-img19-putty-privatekey-passphrase.png differ
diff --git a/docs/document/level-0/ch04-img20-winscp-privatekey-location.png b/docs/document/level-0/ch04-img20-winscp-privatekey-location.png
new file mode 100644
index 0000000..4e6406a
Binary files /dev/null and b/docs/document/level-0/ch04-img20-winscp-privatekey-location.png differ
diff --git a/docs/document/level-0/ch04-security.md b/docs/document/level-0/ch04-security.md
new file mode 100644
index 0000000..651f682
--- /dev/null
+++ b/docs/document/level-0/ch04-security.md
@@ -0,0 +1,320 @@
+# 【第4章】安全防护篇
+
+## 4.1 为什么要做安全防护
+
+Linux服务器的安全防护是一个纷繁复杂的巨大课题。无数的网站、APP、服务、甚至线下基础设施都建立在Linux的基石之上,这背后牵涉到巨大的经济利益和商业价值,当然也就就意味着黑灰产有巨大的攻击动力。但是这些服务是如此重要、根本不允许出现重大的安全漏洞。于是无数的运维专业人员都在安全攻防的战场上拼搏努力,这才让大家能享受到基本稳定的现代化数字生活。
+
+现在,你拥有了一台VPS,并且将会敞开他的数据访问渠道来达到流量转发的目标,那就相当于你已经置身于安全攻防战场的第一线、直面所有风险。但与此同时,新人由于知识和信息的不足,看待安全问题是总是难免两极分化:要么觉得轻如鸿毛和自己没有半点关系,要么觉得重于泰山甚至惶惶不可终日。
+
+- 对于前者,我的建议是:安全无小事,尽量多查一些安全方面的信息,免得自己真的受了损失才后悔莫及
+
+- 对于后者,我的建议是:不用紧张,我们的服务器仍不具有太高的价值、一般不会吸引到高水平的攻击,需要面对的基本都是一些自动化脚本的恶意扫描和登录尝试,跟着本文做一些基础的防护即可
+
+## 4.2 具体的风险到底是什么
+
+就像我们在《远程登录篇》配置的一样,任何人只需要知道【IP地址】+【端口】+【用户名】+【密码】这四个要素,就能登录你的VPS服务器。那很显然,这四要素的安全就是我们要防护的底线。我们来逐一分析:
+
+1. 【IP地址】:恶意脚本会随机尝试和扫描IP段,可以简单认为是公开信息、无法隐藏
+
+2. 【端口】:如果使用默认端口,那么【端口 = `22`】
+
+3. 【用户名】:如果使用默认用户,那么【用户名 = `root`】
+
+4. 【密码】:密码不存在默认值,一定是由VPS后台随机生成或由你自行设置的。也就是说,如果你的服务器都是默认设置,则四要素中的三个已经是已知的,那么你整个服务器的安全,就全部寄托在一串小小的密码上了。这时有几种情况:
+
+ - 如果你用了VPS管理后台随机生成密码,它一般包含随机的十几个大小写混杂的字母和符号,相对比较安全
+
+ - 如果你为了好记、把密码改成了类似`123456`这种超弱的密码,破解你的VPS服务器可谓不费吹灰之力
+
+ - 如果你为了好记、把密码改成了比较复杂、但在别的地方用过的密码,其实也并不安全。你要明白黑客手里有作弊器,比如说`密码表`,包含数万、数十万、数百万甚至更多曾经泄漏的真实密码)
+
+5. 但你要明白,没有哪个黑客真的要坐在电脑前一次一次的尝试你的密码,全部的攻击尝试都是恶意脚本自动进行的,它会24小时不眠不休的工作。也许每天你酣睡之时,你的服务器都在经受着一轮又一轮的冲击。
+
+ 一旦密码被成功撞破,意味着你的四要素全部被攻击者掌握,恶意脚本就会快速登录服务器、获取服务器的最高 `root` 控制权、安装部署它的恶意服务,然后就可以用你的服务器来24小时做各种坏事(比如挖矿、传播病毒、发送垃圾邮件、欺诈邮件、做BT中继、甚至暗网公众节点等等等等)。如果恶意脚本比较克制,其实可以做到相当的隐蔽性。而新人一般也不会去观察留意VPS的登录记录、进程变化、CPU占用变化、流量变化等指标,你其实就很难发现自己被黑了。直到你的VPS服务商封禁你的账号、或者收到律师函为止。
+
+6. 别忘了,你获得VPS时大概率需要使用真实的支付信息,你登录各种网站、社交平台时也会留下你的IP地址,这些都与你的身份有直接或者间接的关系。于是,**一旦这些坏事发生,它们就不可避免的与你产生了关联。**
+
+## 4.3 我们要做的安全防护有哪些
+
+基于上述分析,我们要做的,自然就是对【端口】、【用户名】、【密码】这三要素进行加强,来降低被攻破的风险:
+
+1. 【端口】:将SSH远程登录端口修改为【非22端口】 (4.4)
+2. 【用户名】:建立【非root】的新用户、并禁用root用户SSH远程登录 (4.5、4.6)
+3. 【密码】:SSH启用RSA密钥验证登录、同时禁用密码验证登录 (4.7)
+
+记得按顺序来,别把自己锁在门外了。
+
+## 4.4 将SSH远程登录端口修改为非22端口
+
+现在,我们来解决【端口 = `22`】的问题。(注意:有些VPS服务商,默认的端口已经是非22端口,那么你可以忽略这一步,当然也可以跟着本文改成别的端口)
+
+1. 小小白白Linux基础命令:
+
+ | 编号 | 命令名称 | 命令说明 |
+ |:--:|:--:|:--:|
+ | `cmd-03` | `nano` | 文本编辑器 |
+ | `cmd-04` | `systemctl restart` | 重启某个服务 |
+
+2. 小小白白Linux基础配置文件
+
+ | 编号 | 配置文件位置 | 文件说明 |
+ |:--:|:--:|:--:|
+ | `conf-01` | `/etc/ssh/sshd_config` | SSH远程登录程序设置 |
+
+3. 我们要做的第一件事,当然就是【用`nano`这个文本编辑器打开`SSH远程登录程序设置`】,在Windows下,你会【找到文件并双击】,在Linux下该怎么办呢?仔细看看上面的命令说明,是不是就很简单了?没错,就是:
+
+ ```
+ # nano /etc/ssh/sshd_config
+ ```
+
+4. 文件打开后,你就进入了`nano`的界面,稍微观察一下,你会发现,它把重要的快捷键都显示在屏幕下方了(下图红框内),直接开卷考试、不用死记硬背,是不是很贴心呢?
+
+
+
+
+5. 我们要做的第二件事,是【在打开的文件中找到`Port`这一项,并修改它的端口】。Port后面的数字就是SSH的端口,一般建议把它改成一个大于`1024`小于`65535`的整数(本文以`9753`为例)。请结合`nano`的快捷键,想一下该怎么操作呢?果然,你又说对了!就是:
+
+ - 使用 `ctrl+w` 进入搜索模式,然后输入 `Port 22` 并回车
+ - 删除 `22` 并改成 `9753`
+ - 说明:如果这一行开头有个`#`,证明这一行【不生效】(被注释掉了),你可像我一样在文件最后写一个不带`#`的,或者把`#`删掉就好。
+
+
+::: warning 注意
+本文以`9753`为例,就意味着随着本文的发布,这个端口会变成一个不大不小的特征,也许会被攻击者优先尝试、也许被GFW干扰、阻断。所以我强烈建议你用一个自己想到的其他端口,毕竟,你有6万多个端口可以自由选择。
+:::
+
+
+6. 我们要做的第三件事,是【保存文件并退出】
+
+ - 如果第3步你有仔细观察,就会发现保存并不是常见的 `ctrl+s`。
+ - 正确的快捷键:保存是 `ctrl+o` + `回车`,退出是 `ctrl+x`
+
+7. 我们最后要做的事,是【重启ssh服务,使变更生效】
+ ```
+ # systemctl restart ssh
+ ```
+
+8. 完整流程演示如下:
+
+
+
+9. 修改 PuTTY 配置
+
+ 现在新的端口已经生效,下次使用PuTTY登录时就要用`9753`了。所以现在请到PuTTY的设置中修改端口号码,然后保存Session。嗯,你应该知道去哪里改了吧?(如果不知道的话,要重读前面的内容了哦!)
+
+
+
+## 4.5 建立非root的新用户
+
+第二步,我们来解决【用户名 = `root`】的问题。
+
+首先你要理解, Linux系统中的`root`,不仅仅是一个管理员账号那么简单。它是整个系统的【根基】、是系统的主宰、至高无上的神。一旦`root`账号出现安全问题,整个系统都只能任人鱼肉、无处可逃。那么就跟随我进行操作吧:
+
+1. 小小白白Linux基础命令:
+
+ | 编号 | 命令名称 | 命令说明 |
+ |:--:|:--:|:--:|
+ | `cmd-05` | `adduser` | 给系统新增用户 |
+ | `cmd-06` | `apt install` | 安装某个软件 |
+ | `cmd-07` | `visudo` | 修改sudo权限设置专用编辑器 |
+
+2. 我们要做的第一件事,是【新增一个用户并设定登录密码】,名字你可以随便起,我这里以`vpsadmin`为例:
+
+ ```
+ # adduser vpsadmin
+ ```
+
+
+ 执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 `******` 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。
+
+
+
+::: warning 注意
+本文以`vpsadmin`为例,就意味着随着本文的发布,这个用户名也会变成一个不大不小的特征,也许会被攻击者优先尝试。所以和端口一样,我强烈建议你用一个自己想到的其他用户名。
+:::
+
+4. 完整流程演示如下:
+
+
+
+5. 我们要做的第二件事,是【安装`sudo`功能】(`sudo` 就是在关键时刻,让普通账户临时获得 `root` 的神力,战力全开拯救世界)
+ ```
+ # apt update && apt install sudo
+ ```
+
+ 聪明的你大概已经发现,这一行命令其实是两个命令。前一半 `apt update` 你之前已经见过并且用过了,是去服务器刷新软件版本信息。后面的 `apt install` 就是这一次要用到的【安装命令】。两条连接在一起,就是让系统去【刷新可用的最新软件,然后安装最新版的`sudo`程序】。 `&&` 则是把两个命令连起来执行的意思。
+
+6. 我们要做的第三件事,是【把`vpsadmin`用户加入`sudo`名单里,让他有资格借用`root`的神力】
+
+ ```
+ # visudo
+ ```
+
+ 在 `User Privilege Specification` 下加入一行 `vpsadmin ALL=(ALL) NOPASSWD: ALL` 即可。
+
+
+::: warning 注意
+我要特别说明的是`NOPASSWD`这个设置,它的意思是`vpsadmin`用户临时使用`root`权限时,不用额外输入密码。**这与一般的安全建议相反**。我之所以如此推荐,是因为很多新人不顾危险坚持使用`root`账号就是因为用`root`时不用重复输入密码、觉得轻松。“两害相权取其轻”,我认为【直接用`root`用户的风险】大于【使用`sudo`时不用输密码的风险】,所以做了以上的建议。
+
+如果你希望遵守传统习惯、每次使用`sudo`时需要输入密码,那么这一行改成 `vpsadmin ALL=(ALL:ALL) ALL` 即可。
+:::
+
+7. 完整流程演示如下:
+
+
+
+
+
+## 4.6 禁用root用户SSH远程登录
+
+1. 现在你已经逐渐熟悉Linux了,所以这次换你思考,我们要做的第一件事是什么呢?没错,还是【用`nano`编辑器打开`SSH远程登录程序设置`】,什么,你想不起来怎么操作了?那去复习一下上面的内容再回来吧!............ 正确答案:
+ ```
+ # nano /etc/ssh/sshd_config
+ ```
+
+2. 找到`PermitRootLogin Yes`这一项,然后把它后面的设定值改为`no`即可。还记得怎么操作吗?............ 正确答案:
+ - 使用 `ctrl+w` 进入搜索模式,然后输入 `PermitRootLogin` 并回车
+ - 删除 `yes` 并改成 `no`
+
+3. 保存文件并退出。还记得怎么操作吗?............ 正确答案:
+ - 保存是 `ctrl+o`,然后 `回车` 确认
+ - 退出是 `ctrl+x`
+
+4. 重启ssh服务,让变更生效。还记得............ 算了直接公布正确答案:
+ ```
+ # systemctl restart ssh
+ ```
+
+5. 完整流程演示如下:
+
+
+
+6. 下次通过PuTTY远程SSH登录的时候,`root`用户已无法连接,用户名就要换成`vpsadmin`了!方便起见,我们可以在PuTTY中把`vpsadmin`设置成默认登录用户名。(啰嗦君:别忘了保存Session)
+
+
+
+
+
+## 4.7 使用RSA密钥登录并禁用密码登录
+
+第三步,我们来解决【密码】可能被撞破的问题。
+
+前面我说过,黑客并不是很蠢的用穷举法破解你的密码,而是会用一些比如“密码表”的作弊手段。除非你用的是随机生成的超长密码(比如借助1Password,或者macOS的keychain等密码管理工具),否则很容易中招。
+
+超长随机密码虽然安全性有所提高,但是基本上无法记忆,手动输入也十分麻烦易错。为了解决这个困境,我们可以直接弃用【密码验证】方式,改用更安全的【密钥验证】。
+
+所谓的【密钥验证】,就是生成【一对】相关联的密钥文件(公钥和私钥),然后把【公钥】上传到VPS备用。每次登录时,SSH会将【公钥】和【私钥】进行匹配,若验证是正确的【密钥对】,则验证通过。(换言之,你无需记忆和输入复杂的密码,只要保护好【私钥】这个文件不外泄即可)
+
+::: warning 注意
+本文以 `RSA` 密钥举例,是因为 `RSA` 密钥在各种设备、各种 `SSH` 客户端中有广泛悠久的支持历史,且目前依然能提供够用的安全性。但它绝非唯一选择。
+
+其他的常见密钥还有:
+
+- `DSA` - 已经从数学层面被证明不安全,所以永远不要用它
+- `ECDSA` - 密钥小安全性高,但其算法被指留有NSA的后门,如果你的VPS上有值得NSA关注的东西就不要用它
+- `Ed25519` - 这是一个与 `ECDSA` 十分类似的算法,故具有相似的性能优势。同时其文档全部公开,所以普遍认为无后门
+
+所以,如果你的设备和软件都支持的话,我建议优先选择 `Ed25519` 密钥。
+:::
+
+那我们现在就来配置【密钥验证】吧!
+
+1. 运行`PuTTYgen` (PuTTY密钥生成器)。位置是 `开始菜单` --> `所有程序` --> `PuTTY (64-bit)` --> `PuTTYgen`
+ 1. 点击`Generate`开始生成(在界面空白处乱晃鼠标增加随机数)
+
+
+::: warning 注意
+本图中是以 `2048` 位的 `RSA` 密钥为例的。但实际上,如果要获得与 `EDCSA/Ed25519` 的 `256` 位密钥相同的安全性,你需要使用 `3072` 位的 `RSA` 密钥。(即右下角的数字改成 `3072`)
+:::
+
+ 2. 你可以给私钥设置密码,增加一层安全性
+ 3. 点击 `Save public key` 保存公钥,文件名为 `id_rsa.pub`
+ 4. 点击 `Save private key` 保存私钥,文件名为 `id_rsa` (PuTTY私钥自带`.ppk`后缀)
+ 5. 最重要的,将上方红框内的内容,向下滚动全部复制出来并保存,文件名为 `authorized_keys`。(用vscode保存,默认会变成带`txt`后缀的文本文件,这没关系,之后上传VPS时我们会把后缀名去掉)
+
+
+2. 将公钥上传至VPS的`vpsadmin`用户下
+ 1. 这一步就需要用到之前准备的`WinSCP`了。
+ 2. 去[官网](https://winscp.net/eng/index.php)下载并安装,会提示你导入PuTTY的设置,当然一键导入啦!
+
+
+ 3. 如果没有提示导入或者你已经提前安装好了,那按照下图进行配置即可
+
+
+ 4. WinSCP左边的目录就是本地电脑上的文件夹和文件,请定位到密钥所在的文件夹
+
+ 5. WinSCP右边的目录则是VPS服务器上的文件夹和文件,默认就在 `/home/vpsadmin/` 文件夹,此时在请点击右下角 `X hidden` 来显示隐藏文件
+
+
+ 6. 在右边(VPS中)点击右键并新建文件夹,起名`.ssh` (注意有一个`.`)
+
+
+ 7. 将【公钥】`authorized_keys`上传到`.ssh`文件夹内
+
+
+ 8. 在上传时,将【公钥】从 `authorized_keys.txt` 改名为 `authorized_keys`(去掉`.txt`这个后缀名)
+
+
+ 9. 完整流程演示如下:
+
+
+3. 在VPS端设置SSH启用RSA密钥验证登录、同时禁用密码验证登录
+
+ 1. 小小白白Linux基础命令:
+ | 编号 | 命令名称 | 命令说明 |
+ |:--:|:--:|:--:|
+ | `cmd-08` | `sudo` | 用`root`权限运行某个命令 |
+ | `cmd-09` | `chmod` | 修改目标文件/文件夹的权限 |
+
+ 2. SSH远程连接到VPS上(PuTTY)
+
+ 3. 修改 `authorized_keys` 文件权限为 `600` (仅所有者可读可写)
+ ```
+ $ chmod 600 ~/.ssh/authorized_keys
+ ```
+
+ 4. 修改 SSH 配置。这个我们已经用了很多次,但现在我们已经从无所不能的`root`变成了普通用户`vpsadmin`,此时的我们是没有权限直接编辑SSH配置的。这时候就需要使用`sudo`命令了:
+ ```
+ $ sudo nano /etc/ssh/sshd_config
+ ```
+
+ 5. 找到(`ctrl+w`) `PasswordAuthentication` 改成 `no`
+
+ 6. 找到(`ctrl+w`) `PubkeyAuthentication` 改成 `yes`,然后保存(`ctrl+o`)退出(`ctrl+x`)
+
+ 7. 重启SSH服务。(啰嗦君:别忘了现在需要使用`sudo`来获得权限)
+ ```
+ $ sudo systemctl restart ssh
+ ```
+
+ 8. 完整流程如下:
+
+
+
+4. VPS端已经设置好了公钥,现在要给PuTTY指定私钥位置供登录时使用(啰嗦君:别忘了保存Session)
+
+
+
+5. 至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给PuTTY保存了默认的登录用户名和私钥。未来使用PuTTY登录时,载入`VPS-SERVER`配置后,点击`Open`就可以一键登录了。
+
+ 如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图:
+
+
+
+6. 别忘了给`WinSCP`也做对应的密钥设置,否则之后想要传输文件时就无法登录了:
+
+
+
+::: warning 注意
+任何需要借助SSH进行登录的软件都需要密钥验证了,软件过多,无法逐一展示,请根据你的需要自行设置好哦
+:::
+
+
+
+## 4.8 你的进度
+
+到这里为止,你的VPS已经完成了【端口】、【用户名】、【密码】这三要素的基本安全保障,虽然远称不上固若金汤,但一般的恶意脚本应该已经无法对你造成伤害了!
+
+现在我们终于有了一个安全的系统基础,下一章,我们就可以开始逐步安装配置Xray需要的基础设施了!(什么基础设施呢?一个网页,一张证书)
+
+> `⬛⬛⬛⬛⬜⬜⬜⬜ 50%` :::
diff --git a/docs/document/level-0/ch05-img01-nginx-default-running.png b/docs/document/level-0/ch05-img01-nginx-default-running.png
new file mode 100644
index 0000000..bdefe66
Binary files /dev/null and b/docs/document/level-0/ch05-img01-nginx-default-running.png differ
diff --git a/docs/document/level-0/ch05-img02-nginx-conf-full.gif b/docs/document/level-0/ch05-img02-nginx-conf-full.gif
new file mode 100644
index 0000000..4cac56d
Binary files /dev/null and b/docs/document/level-0/ch05-img02-nginx-conf-full.gif differ
diff --git a/docs/document/level-0/ch05-img03-nginx-http-running.png b/docs/document/level-0/ch05-img03-nginx-http-running.png
new file mode 100644
index 0000000..13a8de9
Binary files /dev/null and b/docs/document/level-0/ch05-img03-nginx-http-running.png differ
diff --git a/docs/document/level-0/ch05-webpage.md b/docs/document/level-0/ch05-webpage.md
new file mode 100644
index 0000000..ec41d5d
--- /dev/null
+++ b/docs/document/level-0/ch05-webpage.md
@@ -0,0 +1,155 @@
+# 【第5章】网站建设篇
+
+## 5.1 为什么要做一个网站?
+
+新人也许会迷惑,为什么科学上网还要建一个网站?我不会编程啊,是不是特别麻烦?
+
+先回答第一个问题,建网站的原因有:
+
+1. 申请合法的TLS证书(非常重要)
+2. 提供合理的回落,防止主动探测攻击,提高安全性
+3. 建设一个伪装站(如博客、私人网盘、多媒体网站、游戏网站等),直接访问时有合理的前台,使流量使用看上去更合理。
+
+再回答第二个问题:
+1. 本文作为演示,仅仅使用了一个最简单的【单文件html页面 + Nginx】来搭建,以此完成上面的目标,所以【非常简单】
+2. 这个网站完全可以不仅仅是伪装,而是真的做大做强,这个复杂性就完全取决于你了
+3. 对于“伪装”和“网站运营”这个目标,需要的就是各不相同、秀出真我,需要的同学可以自行搜索学习。这个内容已经完全偏离了科学上网,本文就不深入解析了。
+
+## 5.2 登录VPS、安装运行Nginx
+
+1. 这里用到的,都是之前已经详解过的命令,所以就不重复讲解了。看不懂的同学可以看看前面的章节哦。
+ ```
+ $ sudo apt update && sudo apt install nginx
+ ```
+
+2. 完成后,Nginx已经自动运行。此时打开Windows上的浏览器并输入 `http://100.200.300.400:80`,若看到下图的界面就说明Nginx已经正常在运行了。
+
+
+
+
+## 5.3 创建一个最简单的网页
+
+1. 小小白白Linux基础命令:
+ | 编号 | 命令名称 | 命令说明 |
+ |:--:|:--:|:--:|
+ | `cmd-10` | `mkdir` | 新建文件夹 |
+ | `cmd-11` | `systemctl reload` | 重新加载某个服务 |
+
+2. 小小白白Linux基础配置文件:
+ | 编号 | 配置文件位置 | 文件说明 |
+ |:--:|:--:|:--:|
+ | `conf-02` | `/etc/nginx/nginx.conf` | Nginx程序设置 |
+
+3. 创建一个网站专用的文件夹`/home/vpsadmin/www/webpage/`并建立网页文件`index.html`
+ ```
+ $ mkdir -p ~/www/webpage/ && nano ~/www/webpage/index.html
+ ```
+
+::: warning 注意
+如果你用的不是 `vpsadmin` 这个用户名,请务必理解这条命令中 `“~”` 符号的意义(这关系到【第5步】你要写的内容):
+
+- 如果是 【非 `root` 用户】,`“~”` 就等价于 `/home/用户名`
+- 如果是 【 `root` 用户】,`“~”` 就等价于 `/root`
+:::
+
+4. 把下面的内容完整的复制进去,然后保存(`ctrl+o`)退出(`ctrl+x`)
+ ```
+
+
+
Be bold in stating your key points. Put them in a list:
+Improve your image by including an image.
+Add a link to your favorite Web site. + Break up your page with a horizontal rule or two. +
+Finally, link to another page in your own Web site.
+ +© Wiley Publishing, 2011
+ + + ``` + +5. 修改 `nginx.conf` 并重启 `Nginx` 服务,将`80`端口的http访问定位到刚才建立的 `html` 页面上 + 1. 修改 `nginx.conf` 。 + ``` + $ sudo nano /etc/nginx/nginx.conf + ``` + + 2. 将下面一段,添加在 `http{}` 内,然后保存(`ctrl+o`)退出(`ctrl+x`)。(记得将域名替换为之前准备好的、包含二级域名的真实域名) + ``` + server { + listen 80; + server_name 二级域名.你的域名.com; + root /home/vpsadmin/www/webpage; + index index.html; + } + ``` + + +::: warning 特别注意! +如我在【第3步】中的提示所说,请务必确保 `/home/vpsadmin/www/webpage` 改成你的实际文件路径。 +::: + + + 3. 让 `nginx` 重新载入配置使其生效 + ``` + $ sudo systemctl reload nginx + ``` + + 4. 完整的设置流程如下: + +