文章

服务器系列课程

第壹节 初识服务器:选购、安装与配置

1. 背景

社团的 3d 打印机经常要用U盘拷贝文件,不能通过网络传输,十分麻烦;加之社团的电脑本来就不多,经常有人多机少的情况。于是乎,搭建一台服务器似乎很有必要了。

1.1 服务器市场概况

  • 市场规模
    • 全球服务器市场规模持续增长(2023年约1,500亿美元),云计算、AI和大数据是主要驱动力。
    • 中国服务器市场占全球25%以上,华为、浪潮、新华三等国产厂商份额持续扩大。
  • 技术趋势
    • 云化:公有云服务商(如AWS、阿里云)大量采用定制化服务器。
    • 边缘计算:小型化、低功耗服务器需求增长(用于物联网、智能工厂等场景)。
    • 绿色节能:液冷技术、模块化设计成为热点,降低数据中心能耗。

1.2 主流服务器分类

  • 按应用场景
    • 通用服务器:适用于Web服务、数据库等常规业务(如Dell PowerEdge、HPE ProLiant)。
    • 高性能计算(HPC)服务器:用于科学计算、AI训练(配备多GPU/TPU)。
    • 存储服务器:大容量硬盘+高IOPS设计(如NAS、分布式存储节点)。
  • 按硬件架构
    • x86架构:主流选择(Intel Xeon、AMD EPYC),生态成熟,兼容性强。
    • ARM架构:低功耗优势突出(如Ampere Altra),逐步渗透云计算领域。
    • 国产化平台:飞腾、鲲鹏等国产CPU服务器,满足信创需求。

1.3 主要厂商与竞争格局

  • 国际品牌:Dell、HPE、联想(ThinkSystem系列)占据中高端市场。
  • 国内品牌:浪潮(NF系列)、华为(FusionServer)、新华三(UniServer)快速崛起。
  • 白牌服务器:ODM厂商(如广达、纬创)为云计算巨头提供定制化方案,成本更低。

2. 选购

2.0 需求分析的一般办法

  1. 明确应用场景
    • Web服务器?数据库?虚拟化平台?AI训练?
  2. 预估负载类型
    • CPU密集型(如科学计算)vs. IO密集型(如文件存储)。
  3. 确定扩展性需求
    • 是否需要未来升级CPU、内存或存储?
  4. 预算与合规性
    • 是否受信创政策限制(需国产化硬件)?

2.0.1 关键配置选择指南

(1)服务器类型选择
类型适用场景优点缺点
塔式服务器小微企业、轻量级应用静音、易部署扩展性有限
机架式服务器数据中心、企业级业务高密度、易管理需专用机柜
刀片服务器大规模虚拟化、云计算集群超高密度、共享电源初始成本高
(2)CPU选型
  • 核数与频率
    • Web服务器:8-16核,主频≥2.5GHz(如Intel Xeon Silver 4310)。
    • 数据库/虚拟化:16-32核,支持多线程(如AMD EPYC 7543)。
  • 特殊需求
    • AI训练:需搭配GPU(NVIDIA A100/A800)或专用AI加速卡。
(3)内存与存储
  • 内存容量
    • 基础应用:32-64GB DDR4 ECC。
    • 大数据分析:≥256GB,支持LRDIMM内存扩展。
  • 存储方案
    • HDD:大容量冷数据存储(如8TB SATA)。
    • SSD/NVMe:高性能热数据(如Intel P5510 3.84TB U.2 SSD)。
(4)网络与冗余
  • 网卡配置
    • 默认1Gbps,高并发场景需10G/25G网卡(如Mellanox ConnectX-6)。
  • 冗余设计
    • 双电源(如550W×2)、RAID卡(支持RAID 5/6)、热插拔硬盘。

2.0.2 典型配置示例

  • 中小型Web服务器
    • CPU:Intel Xeon E-2378(8核/16线程)
    • 内存:64GB DDR4
    • 存储:2×1TB NVMe SSD(RAID 1)
    • 网络:双千兆网口
  • 企业级虚拟化平台
    • CPU:2×AMD EPYC 7713(64核/128线程)
    • 内存:512GB DDR4
    • 存储:8×3.84TB NVMe SSD + 12×8TB HDD(混合存储池)
    • 冗余:双电源+硬件RAID卡

2.1 准系统

**这次选取的是 **戴尔 PowerEdge R730xd 。选取原因有三:

  • 市场存量多,货源充足,性价比高;
  • 使用人数多,网上教程丰富,小白友好;
  • 可扩展性强。

**在某网店选购 **R730XD准系统+H730卡+单750W电源 ,价格仅需 ¥699 ,实属物美价廉。

2.2 CPU

**网上相关教程推荐的U有很多,但性能较好的还看 **E5-2680V4 E5-2690V4

但其实一对比,E5-2680V4价格便宜了很多,性能也不算很差,所以最终选择了 E5-2680V4 。由于预算有限,只买一颗(最多能装两颗)。

2.3 内存条

理论上,内存条是 $ 8G \times 4$ 能跑出更好的性能,但这样的方案显然更加昂贵。这次先一次性买了一条 三星 32G 4DR*4 2133P,只要¥139。等以后再升级吧。

2.4 硬盘

由于社团里有老电脑的硬盘,这里就买一块杂牌的sata硬盘测试一下。$ 480G$ 杂牌 sata ,只要139元。值得注意的是,启动盘必须是 sata 接口,m2 接口的只能作为副盘使用,不能作为系统启动盘(当然,曲线救国之路就是拿个u盘引导)。

2.5 小计

这样算下来,一套基础版大概需要 1000r 左右:

2024-10-09 23.30.06.png

3. 硬件安装过程

3.1 开箱

按下按钮,掀开后盖,可以看到内部构造。

3.2 换 CPU

原来厂家发过来的时候已经随附了两颗 E5-2650 V3 ,但我们自己买了另外的CPU,需要拆除原来的CPU。两个都要拆,CPU不能混用。

按照官方教程,先选择一颗螺丝转下来,等待30s自己会松掉;然后再卸下对角线的那颗螺丝,就能成功拆除散热器了。

这是拆完散热器以后的样子:

拆下来的散热器:

接下来取出cpu:按下两边的弹簧开关,将金属结构弹出,就能拿出CPU了。

然后放上我们自己买的cpu,按刚才相反的步骤,即可装入。

值得注意的是,先应将下方的卡扣抬起,再放下另一边的金属片,否则是盖不上的。

请一定不要使用蛮力,否则可能会损坏服务器!

如果您只装了一颗U,而另一个位置上仍有另一颗不同型号的U,那么服务器开机自检是无法通过的。

3.3 上内存

如果厂家是帮您预装好的,那么直接装在默认位置就行;如果需要自己安装,可能有以下两种情况:

  • 按照整流罩上标的顺序,放在一号内存槽位;
  • 直接插在离cpu最近的那个槽位。

上面两种情况试一试即可,如果不正确可能会导致无法开机。

3.4 装硬盘

这款服务器一共有14个盘位。

后方一共是 $ 3\times 4=12$ 个 3.5 寸盘位,前面还有 $ 2$ 个 2.5 寸的。

直接一块硬盘我们是无法直接装到服务器上的,需要先给它固定到硬盘架上,然后再将硬盘架安装进盘位中。

如图是 3.5 寸硬盘架,它是兼容 2.5 寸的硬盘的。直接将硬盘放入硬盘架中,对准螺丝孔并上螺丝即可。硬盘架可能需要另外购买,价格在 6~6.9 人民币左右,可能还要 ¥5 的运费。

如果您还想要安装 M.2 接口的固态硬盘(类似于下图),您还需要购买一块 M.2 转 PCIe 卡(首单 ¥5 便宜!),然后安装到服务器上为数不多的三个 PCIe 插槽上。

4. 系统的选取与安装

本文只介绍虚拟化的系统方案。主流的有两种系统方案:一是 PVE 虚拟化,二是 VMware vSphere 虚拟化。这两种方式都是在底层进行硬件互联,运行多系统时的资源损失较小。下面是这两种方案的比较:

对比项目PVEVMware ESXi
成本开源免费,适合预算有限的小型企业和个人用户,可免费使用全部功能,但付费可获得技术支持服务等。基本版本免费,但高级功能如高可用性的 HA、负载均衡等需付费购买 vmware vsphere 获得。
技术基础基于 Debian Linux 发行版,支持 KVM 全虚拟化和 LXC 轻量级容器两种虚拟化技术。基于 VMware 的专有架构,是直接安装在物理服务器硬件之上的裸金属型 hypervisor,主要使用全虚拟化技术。
用户界面提供基于 Web 的图形用户界面,同时支持命令行界面,界面相对简洁直观,对于有 Linux 基础的用户来说较易上手,但对新手而言,部分操作需使用命令行,有一定学习成本。通过 vSphere Client 或 vCenter Server 进行管理,提供了丰富直观的图形用户界面,与 VMware 的其他产品紧密集成,管理体验高效,易于新手入门。
性能和资源利用支持 LXC 容器,在资源利用方面更加高效,特别是处理 I/O 密集型任务时表现较好,用户能够对虚拟机实施详细的资源控制和配额,确保每个应用获取所需资源。其性能优势来自于为虚拟化特制的内核,能更高效地管理和分配资源,资源调度和动态迁移技术进一步优化了虚拟机的性能和资源利用率,在硬盘和网络 I/O 等方面表现出色。
管理和扩展通过 Web 界面管理,可使用 Proxmox VE Cluster 进行集群扩展,管理相对灵活,扩展性强,适合有一定技术能力和对定制化有需求的用户。通常与 vCenter Server 结合使用,可轻松实现大规模的虚拟化管理和自动化,更适合企业级的大规模部署和管理,但对技术人员的专业要求较高。
社区和支持拥有活跃的开源社区,用户可获得广泛的帮助和支持,社区资源丰富,更新速度快,但对于一些复杂问题的解决可能需要用户自身具备一定的技术能力。依托 VMware 的品牌和庞大的技术支持团队,能够获得专业的技术支持服务,对于企业级用户来说,在遇到问题时可获得更及时有效的解决方案。
安全性基于 Linux 内核,具有良好的安全特性,但需要用户自己负责及时更新和维护系统以确保安全性。经过严格的安全测试和优化,提供了企业级的安全保障,内置的安全功能如 vShield 和 NSX 等强化了虚拟化环境的安全性。
硬件兼容性硬件兼容性优秀,对多种硬件设备的支持较好,尤其是对 Realtek 网卡等设备的兼容性优于 ESXi。硬件兼容性相对较差,主要面向服务器硬件,对一些常见的桌面级或消费级硬件设备的支持可能存在不足,但对主流服务器硬件及 Intel 网卡等兼容性良好。
高级功能提供如实时迁移、快照等高级功能,但不如 ESXi 的功能全面。拥有广泛的企业级高级功能,如 VMotion、DRS、HA 等,可实现虚拟机的动态迁移、资源的智能调度和高可用性保障等。

由于考虑到 VMware ESXi 比较商业化,功能较为完善,而且对我们的 R730xd 有专门的适配,所以这里我们选择 VMware 的虚拟化。

笔者这里使用的 raid 方案是 一块 raid0 装系统,其他盘作数据盘。

4.1 设立 VD 和 RAID 模式

4.1.1 磁盘阵列(RAID)是什么?

磁盘阵列(Redundant Arrays of Independent Disks,RAID)是一种将多个独立的磁盘组合成一个逻辑磁盘的技术。通过特定的算法,把数据分散存储在多个磁盘上,从而提升存储系统的性能、可靠性和数据安全性。

常见的磁盘阵列级别包括:

  • RAID 0:数据被分割成块并分布在多个磁盘上,没有冗余信息。它能提高读写性能,但一个磁盘损坏就会导致数据丢失。
  • RAID 1:数据在两个或更多磁盘上进行镜像。写入数据时,会同时写入到多个镜像磁盘中。这种方式可靠性高,一块磁盘损坏,数据可从镜像磁盘获取,但磁盘利用率低。
  • RAID 5:数据和奇偶校验信息分布在多个磁盘上。通过奇偶校验信息,可以在一个磁盘损坏的情况下恢复数据,兼顾了存储性能、数据安全和存储成本等因素。
  • RAID 6:与RAID 5类似,但有两份独立的奇偶校验信息,能允许两块磁盘同时损坏而不丢失数据。
  • RAID 10:是RAID 0和RAID 1的组合,先做镜像再做条带化,具有高性能和高可靠性。

4.1.2 磁盘阵列的重要性

  1. 提高数据存储性能 在RAID 0等模式下,通过并行读写多个磁盘,可以显著提高数据的读写速度。对于需要处理大量数据的服务器和存储系统,如数据库服务器、视频编辑工作站等,磁盘阵列能够加快数据的访问速度,从而提高整个系统的工作效率。
  2. 增强数据安全性和可靠性 在RAID 1、RAID 5、RAID 6等具有冗余功能的模式下,即使磁盘出现故障,数据仍然可以通过冗余信息进行恢复。这对于企业级的数据存储至关重要,可避免因磁盘故障导致的数据丢失,保护企业的核心数据资产,减少因数据丢失带来的损失和业务中断风险。
  3. 便于数据管理和扩展 磁盘阵列可以作为一个统一的逻辑存储单元进行管理,方便管理员进行存储容量的分配和调整。同时,通过添加新的磁盘,可以相对容易地扩展存储容量,满足企业不断增长的数据存储需求。

4.1.3 建立磁盘阵列

开机以后等待以下界面,当看到 Press <Ctrl><R> to Run ... 时,按下 Ctrl+R ,进入 H730/H330 MiniBIOS ,设置磁盘阵列。

进入 minibios 后,使用 ⬆️/⬇️ 键将高亮移动到最顶端的你的阵列卡的条目(字样:H310、H730等)。然后再按下 F2 。

在弹出的菜单中,移动高亮至 Create New VD ,按下 Enter 。

因为我们这里只有一块盘的话,我们就只能选择 RAID 0 。

按 Tab 以切换到下一个条目。当在选择右侧硬盘时,按下空格键以选中/取消选择。VD Size 保持默认,VD Name 自己随便取,比如笔者这里可以取了叫做 System 。然后 OK ,退出后会自动重启。

这里是组了一块 raid ,然后通过虚拟磁盘的方式传给上层系统使用。当然,也可以组完 raid 后直通给系统使用,这样效率更高。

4.1.4 在图形化界面中设置 raid1

上面我们的系统盘设置的是 raid0 ,但对于数据盘来说,我们有充裕的机械硬盘,而且数据盘是给网盘使用,不能够丢失数据,因此我们至少需要组建 raid1 。

示例图片里是 raid5 ,但其实组 raid1 是一样的,一个是三块盘,一个是两块盘。

4.2 使用 u 盘安装 vmware esxi

这里我们使用简单易用的 Ventoy 。当然,您也可以根据您的喜好选择其他程序来安装。这里介绍使用 Ventoy 的安装方法。

首先,到 https://github.com/ventoy/Ventoy/releases/ 找到并下载最新的程序。

直接选择你的U盘,然后点击“安装”。安装完后你的优盘名称会变成“Ventoy”字样,是空的。直接把你想安装的 ESXi 镜像拖进去就行了。

这里安装的是 8.0.0 版本。

插上 U 盘,进 iDrac 可以图形化安装。

镜像安装成功后,按照指引重启系统,然后进入 ESXi 设置。

4.3 安装 Ubuntu24.04 (现场演示)

进入 ESXi 网页管理页面,我们点击 “创建/注册虚拟机”。

这里可以配置 CPU 核心数、分配的内存和硬盘空间大小。注意,硬盘选项要选择“薄置备”,这样才不会一次占用太多空间。

上面的步骤完成后直接点击小企鹅上的播放按钮。如果启动失败的可以按照下图检查一下引导选项。

打开自带的控制台,按 Enter 选中“安装 Ubuntu Server”。

然后会开始跑代码,稍等一下即可。

选择语言,没有中文。使用英语。

不要更新,否则会很慢。

这里根据自己的情况配置网络环境。

自己选择源,中科大源应该是比较快的。

学校里用不了 Ubuntu pro。但它其实是免费的。

这里提示 FAILED ,其实不用担心,直接重启就好了,无事发生。

重启后登录,我们就能进入一个 Ubuntu Server 了。

你还可以选择安装 1Panel,这样就能方便地管理服务器了。

4.4 安装 飞牛NAS

系统基础信息

  • 开发基础:基于Linux内核(Debian发行版)开发,稳定性和安全性高,可扩展性与自由度强。
  • 硬件兼容性:兼容主流X86架构设备,可利用闲置硬件如PC、软路由、NUC等搭建私有云存储。

功能特性

存储管理
  • 硬盘信息展示:全面展示硬盘类型、时长、健康、接口协议、温度等,可查看S.M.A.R.T信息。
  • 存储模式:创建空间时依硬盘数量自动切换模式,展示容量、优缺点。系统盘和数据盘独立管理,系统盘只能单独组basic。
  • RAID管理:支持换盘、设热备盘、改模式、扩容。能自动重组raid、自动替换热备盘,可升级RAID等级,RAID5以上可直接扩容。
文件管理

一个页面管理内、外、远程文件,操作简易。

智能影视

飞牛影视应用支持App远程下载解析种子,自动刮削成海报墙,电影准确率高,自动下载字幕,兼容主流硬件转码,多端同步,支持蓝光杜比,TV版未完全上线。

照片备份

飞牛私有云App相册备份功能可将手机照片备份到NAS,支持原画、实况、RAW格式。

远程访问

有公网IP直连、FN Connect、DDNS域名转发、P2P等多种方式。

应用中心

常用应用全,支持Docker,可按需安装应用扩展功能。

系统优势

  • 界面友好:扁平化设计,类似macOS,人机交互合理,美观适合国人,有引导和手册,新手易上手。
  • 免费使用:个人用户免费,降低成本。

目前公测阶段,存在RAID模式有限、共享功能不足等问题,持续更新改进后有望提升体验。

在此处可以看到下载地址:飞牛私有云 fnOS

94ecca0fe377e3f8f598478d75a303a2.png

f4f39eab935c55da5035a04b59eff7b6.png

682b0aba4e55001f58a980dcea225f7b.png

157b3e987307ee5be4d29358b90e965f.png

f6781c73950afd3db2f02f0b2e0f6ca2.png

00cddddd75c6c3d8e1bf21dc197fec9e.png

3794fb26400424daa6147e88317e9ba8.png

69eef747ba552ca20c9d612bc6530f2b.png

1d569e288854c78fa4fb4e5edd92824c.png

d8828418a8a33c412e59917bbbc56ac2.png

30288505acd2bbfe4405ca479841db93.png

8f865ce2f962da02eb1dc77bd93f6e67.png

5. 课后思考题

夯实基础

  • 假设你需要为一家视频渲染公司选购服务器,需支持10个4K视频同时渲染,请列出关键配置要求。
  • 国产化服务器在哪些场景下具备优势?可能存在哪些挑战?

拓展提升

ESXi虚拟化环境中的Ubuntu部署

场景:某企业需要在VMware ESXi 7.0虚拟化平台上部署一台Ubuntu 22.04 LTS服务器,用于运行Python数据分析服务。 任务要求

  1. 虚拟机配置规划
    • 需要分配多少vCPU和内存?若物理服务器为双路CPU(共32核/64线程),如何避免vCPU超分导致的性能瓶颈?
    • 存储应选择“厚置备延迟置零”还是“精简置备”?为什么?
  2. 安装过程关键点
    • 安装时需特别注意哪些虚拟硬件兼容性设置(如SCSI控制器类型、网卡驱动)?
    • 为何推荐在Ubuntu中安装open-vm-tools而非ISO镜像自带的VMware Tools?
  3. 网络优化
    • 若Ubuntu需通过NAT模式访问外网,ESXi侧的虚拟交换机(vSwitch)应如何配置?
    • 如何验证虚拟机与宿主机之间的网络延迟是否正常?

物理服务器上ESXi的安装挑战

场景:一台新采购的Dell PowerEdge R760服务器(Intel Xeon Gold 6430 ×2,512GB DDR5,8×3.84TB NVMe SSD),需直接安装ESXi 8.0作为虚拟化基础平台。 任务要求

  1. 安装前准备
    • 如何通过Dell iDRAC远程控制台完成RAID配置(如RAID 10)?需注意哪些SSD固件兼容性问题?
    • 为什么必须验证该服务器是否在VMware HCL(硬件兼容性列表)中?若不在列表如何解决?
  2. 安装过程问题排查
    • 安装时提示“No Network Adapters Found”,可能的原因是什么?(提示:考虑网卡驱动未内置)
    • 如何通过ESXi命令行(如通过Live CD)手动注入自定义网卡驱动?
  3. 基础配置验证
    • 安装完成后,如何通过ESXi Shell检查NVMe硬盘的PCIe链路速率是否正常?
    • 若需通过vCenter集中管理,ESXi主机应启用哪些网络端口和防火墙规则?

延伸讨论

  • 若企业要求国产化替代,将ESXi替换为华为FusionSphere或OpenEuler虚拟化平台,上述问题中的哪些步骤会发生重大变化?

第贰节 善用命令行:初探 Linux 终端操作

1. 什么是 Linux 终端

在 Linux 系统中,终端就像是你和计算机交流的 “秘密通道”。你可以通过输入特定的命令,让计算机完成各种任务,比如查看文件、创建文件夹、安装软件等等。Ubuntu 24.04 server 是一种常用的 Linux 服务器版本,我们就以它为例来学习终端操作。

2. 打开终端

在 Ubuntu 24.04 server 中,一般通过 SSH 连接来打开终端。如果你是在本地虚拟机中安装的 Ubuntu,可以在应用程序列表中找到 “终端” 图标点击打开。

例如,在 Windows 下,您可以直接打开 cmd ,运行:

1
ssh jks@172.28.1.11

默认是 $22$ 端口。

3. 基本命令

3.1 文件和目录操作

  1. 查看当前目录pwd(print working directory)

    • 作用:显示当前所在的目录路径。
    • 示例:在终端输入pwd,会输出类似/home/user的路径,表示当前在user用户的主目录下。
  2. 列出目录内容ls(list)

    • 作用:列出当前目录下的文件和子目录。
    • 示例:
    • 直接输入ls,会显示当前目录下的文件和目录的简略信息。
    • 输入ls -l,会以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。
    • 输入ls -a,会显示所有文件和目录,包括隐藏文件(以点开头的文件)。
  3. 切换目录cd(change directory)

    • 作用:切换到指定的目录。
    • 示例:
    • cd /home:切换到/home目录。
    • cd ..:返回上一级目录。
    • cd ~:回到当前用户的主目录。
  4. 创建目录mkdir(make directory)

    • 作用:创建一个新的目录。
    • 示例:mkdir new_folder,在当前目录下创建一个名为new_folder的新文件夹。
  5. 删除目录rmdir(remove directory)

    • 作用:删除一个空目录。
    • 示例:rmdir old_folder,删除名为old_folder的空文件夹,如果文件夹不为空则无法删除。
  6. 创建文件touch

    • 作用:创建一个新的空文件,或者更新文件的时间戳。
    • 示例:touch new_file.txt,在当前目录下创建一个名为new_file.txt的空文件。
  7. 删除文件rm(remove)

    • 作用:删除文件或目录(删除目录时需加-r选项)。
    • 示例:
    • rm file.txt:删除名为file.txt的文件。
    • rm -r folder:删除名为folder的目录及其所有内容,使用时要谨慎,因为删除后文件很难恢复。
  8. 复制文件和目录cp(copy)

    • 作用:复制文件或目录。
    • 示例:
    • cp file.txt new_file.txt:将file.txt复制为new_file.txt。
    • cp -r folder new_folder:将folder目录及其所有内容复制为new_folder。
  9. 移动文件和目录(重命名)mv(move)

    • 作用:移动文件或目录到指定位置,也可用于重命名。
    • 示例:
    • mv file.txt /new_path/:将file.txt移动到/new_path/目录下。
    • mv old_name new_name:将文件或目录old_name重命名为new_name。

3.2 文件内容查看

  1. 查看文件内容cat(concatenate)

    • 作用:显示文件的全部内容,适合查看较小的文件。
    • 示例:cat file.txt,显示file.txt的内容。
  2. 分页查看文件内容more

    • 作用:分页显示文件内容,按空格键向下翻页,按q键退出。
    • 示例:more large_file.txt,用于查看较大的文件,避免内容一次性全部输出导致屏幕混乱。
  3. 实时查看文件内容更新tail

    • 作用:显示文件的末尾几行内容,默认显示 10 行,可通过选项指定行数。加上-f选项后可以实时跟踪文件的更新。
    • 示例:
    • tail file.txt:显示file.txt的末尾 10 行。
    • tail -20 file.txt:显示file.txt的末尾 20 行。
    • tail -f log.txt:实时查看log.txt文件的更新,常用于查看日志文件。

3.3 文件搜索

  1. 查找文件find

    • 作用:在指定目录及其子目录中查找文件。
    • 示例:
    • find /home -name "*.txt":在/home目录及其子目录中查找所有扩展名为.txt的文件。
    • find / -size +10M:在整个系统中查找大小大于 10MB 的文件。
  2. 搜索文件内容grep(global search regular expression and print out the line)

    • 作用:在文件中搜索指定的字符串,并显示包含该字符串的行。
    • 示例:grep "error" log.txt:在log.txt文件中搜索包含 “error” 的行,常用于日志分析。

3.4 系统信息查看

  1. 查看系统信息:uname(Unix name)

    • 作用:查看系统的基本信息,如内核版本、主机名等。
    • 示例:
    • uname:显示内核名称。
    • uname -a:显示详细的系统信息,包括内核版本、主机名、硬件架构等。
  2. 查看系统资源使用情况:top

    • 作用:实时查看系统的资源使用情况,如 CPU、内存、进程等。
    • 示例:输入top后,会进入一个动态的界面,不断更新显示系统资源的使用状态,按q键退出。
  3. 查看磁盘空间:df(disk free)

    • 作用:查看磁盘的使用空间和剩余空间。
    • 示例:df -h,以人类可读的方式显示磁盘空间信息,方便查看。

3.5 网络相关命令

  1. 查看网络配置:ifconfig 或 ip addr

    • 作用:查看网络接口的配置信息,如 IP 地址、子网掩码等。
    • 示例:
    • ifconfig:显示网络接口的详细配置信息(在一些新系统中已被ip命令替代)。
    • ip addr:显示网络接口的详细配置信息,更通用的查看网络配置方式。
  2. 测试网络连接:ping

    • 作用:测试与目标主机的网络连接是否正常。
    • 示例:ping www.baidu.com,通过向百度服务器发送 ICMP 数据包,检查网络连接是否正常,按Ctrl + C组合键停止。
  3. 查看路由表:route 或 ip route

    • 作用:查看系统的路由表,了解数据包的转发路径。
    • 示例:
    • route -n:以数字形式显示路由表。
    • ip route:显示当前的路由规则。

3.6 进程管理

  1. 查看进程:ps(process status)

    • 作用:查看当前运行的进程。
    • 示例:
    • ps aux:查看所有用户的所有进程,包括详细信息,如 CPU 使用率、内存使用率等。
    • ps -ef:以全格式显示所有进程及其父子关系。
  2. 杀死进程:kill

    • 作用:终止指定的进程。
    • 示例:kill 1234,其中1234是进程 ID(PID),使用ps命令获取,用于终止指定进程。对于一些顽固进程,可能需要使用kill -9强制终止。

3.7 用户和权限管理

  1. 查看当前用户:whoami

    • 作用:显示当前登录的用户名。
    • 示例:输入whoami,会输出当前登录的用户名,如user。
  2. 切换用户:su(switch user)

    • 作用:切换到其他用户。
    • 示例:su root,切换到超级用户root,需要输入root用户的密码。
  3. 修改文件权限:chmod(change mode)

    • 作用:改变文件或目录的访问权限。
    • 示例:chmod 755 file.txt,将file.txt的权限设置为所有者可读、可写、可执行,组用户和其他用户可读、可执行。权限数字的每一位分别对应所有者、组用户和其他用户的权限,r(读)对应 4,w(写)对应 2,x(执行)对应 1 。

3.8 软件安装和管理

  1. 更新软件源:apt update

    • 作用:更新软件源列表,获取最新的软件包信息。
    • 示例:在安装新软件前,一般先运行apt update,确保获取到最新的软件版本信息。
  2. 安装软件:apt install

    • 作用:安装软件包。
    • 示例:apt install firefox,安装火狐浏览器。
  3. 卸载软件:apt remove

    • 作用:卸载软件包,但保留配置文件。
    • 示例:apt remove firefox,卸载火狐浏览器,但相关配置文件仍会保留在系统中。
  4. 彻底卸载软件:apt purge

    • 作用:卸载软件包并删除配置文件。
    • 示例:apt purge firefox,彻底卸载火狐浏览器及其所有相关配置文件。

3.9 第三方软件工具

  1. 下载工具:wget

    • 作用:从网络上下载文件,支持 HTTP、HTTPS、FTP 等协议。
    • 示例:wget https://example.com/file.zip,从指定网址下载file.zip文件到当前目录。
  2. 网络请求工具:curl

    • 作用:用于发送 HTTP 或其他协议的请求,获取数据。
    • 示例:curl https://www.baidu.com,获取百度首页的 HTML 内容并输出在终端。

4. 命令行快捷键

  1. 命令补全:按Tab键。当你输入命令或文件路径的一部分时,按Tab键可以自动补全。如果有多个匹配项,再按一次Tab键会列出所有匹配项。
  2. 历史命令:按↑和↓键可以浏览之前输入过的命令。
  3. 中断命令执行:按Ctrl + C组合键,可以中断正在执行的命令。

5. 总结

通过这节课的学习,我们了解了 Linux 终端的基本操作,包括文件和目录操作、文件内容查看、文件搜索、系统信息查看、网络相关、进程管理、用户和权限管理以及软件安装和管理等方面的常用命令,还学习了wget、curl等第三方软件工具的使用。希望大家在课后多练习,熟练掌握这些命令,为进一步学习 Linux 系统打下坚实的基础。

6. 课后思考题

  1. 在当前目录下创建一个名为practice的文件夹,并在其中创建一个名为test.txt的空文件,写出对应的命令。
  2. 假设你现在位于/home/user目录,要将test.txt文件移动到/var/tmp目录下,应该使用什么命令?
  3. 如何查看/etc目录下所有以conf结尾的文件,并以长格式列出它们的详细信息?请写出完整命令。
  4. grep命令在/var/log/syslog文件中搜索包含error关键词的行,同时显示该行的行号,写出命令。
  5. 假设你发现系统中某个进程占用大量 CPU 资源,已知该进程名为bad_process,请写出查看该进程 PID(进程 ID)以及杀死该进程的完整步骤和命令。
  6. 系统突然无法访问外网,你需要检查网络配置,使用ip addr命令查看网络接口配置,根据查看结果,分析可能导致无法访问外网的原因(至少列举两个)。
  7. 想要安装vim文本编辑器,更新软件源后,写出安装vim的命令。如果安装完成后想卸载vim,但保留配置文件,又该用什么命令?
  8. 使用wget命令从https://github.com/xxx/xxx/archive/refs/heads/main.zip下载一个项目压缩包到/tmp目录下,写出命令。

第叁节 Vim the Editor: 编辑进化

一、Vim 是什么?

1. 历史渊源

  • 1980年代诞生于Unix系统的vi编辑器
  • 1991年Bram Moolenaar开发Vim(Vi IMproved)
  • 支持跨平台(Windows/macOS/Linux)

2. 为什么选择Vim?

  • 纯键盘操作,手不离键盘
  • 所有Linux系统预装
  • 处理大文件速度极快
  • 高度可定制(插件/配色/快捷键)

3. 常见编辑器对比

编辑器特点适合场景
记事本简单临时记录
VS Code图形化日常开发
Emacs全功能深度定制
Vim模式化高效编辑

二、基础生存指南(15分钟)

1. 启动与退出

1
2
3
4
vim 文件名       # 打开文件
:q              # 退出
:q!             # 强制退出不保存
:wq             # 保存并退出

2. 三种模式

1
2
3
4
5
graph LR
    A[普通模式] -->|i/I/a/A| B[插入模式]
    B -->|ESC| A
    A -->|: / / ?| C[命令模式]
    C -->|回车| A

3. 移动光标(普通模式)

1
2
3
4
5
6
h ←    j ↓    k ↑    l →
w 下一个单词开头
$ 行尾
gg 文件开头
G 文件末尾
50% 跳转到50%位置

4. 文本操作

命令功能
i进入插入模式
a在光标后插入
o下方新建行
dd删除当前行
yy复制当前行
p粘贴
u撤销
Ctrl+r重做

三、进阶修炼手册

1. 多窗口操作

1
2
3
:split     # 水平分屏
:vsplit    # 垂直分屏
Ctrl+w w   # 切换窗口

2. 宏录制

1
2
3
4
5
qa         # 开始录制宏到寄存器a
...操作...
q          # 停止录制
@a         # 执行宏
10@a       # 执行10次

3. 插件管理(示例使用Vundle)

1
2
3
4
" 在.vimrc中添加:
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-surround'  " 自动补全括号
:PluginInstall  # 安装插件

4. 搜索替换

1
2
3
/pattern    # 搜索
:%s/old/new/g  # 全局替换
:set hlsearch  # 高亮搜索结果

5. 配置秘籍

1
2
3
4
5
" ~/.vimrc 示例配置
set number     " 显示行号
syntax on      " 语法高亮
set tabstop=4  " Tab缩进4格
map <F2> :w<CR>  " F2快速保存

四、课堂小练习

  1. 用vim创建hello.txt
  2. 输入三行文字:”第一行测试”、”第二行练习”、”第三行成功”
  3. 将”练习”替换为”训练”
  4. 复制第二行到文件末尾
  5. 保存并退出

五、总结升华

  • Vim是”编辑的进化”:从打字机到智能编辑
  • 学习曲线像骑自行车:开始难,学会后自由驰骋
  • 推荐配置:安装vimtutor(输入vimtutor可直接学习)

第肆节 走进网络安全:防御导向的渗透测试

目录

  1. Nmap基础扫描实践
  2. 防火墙规则分析与突破方案
  3. 流量特征隐匿实战

一、Nmap基础扫描实践

1.1 什么是Nmap?

网络映射器(Network Mapper),用于:

  • 发现网络设备
  • 扫描开放端口
  • 识别服务版本
  • 检测操作系统

1.2 安装与基础命令

1
2
3
4
5
# Windows安装(下载地址:https://nmap.org/download)
# 基础扫描命令:
nmap -sS 172.28.1.11          # 默认TCP SYN扫描
nmap -p 1-1000 172.28.1.11    # 指定端口范围
nmap -O 172.28.1.11           # 操作系统检测

1.3 网关扫描实践

1
nmap -T4 -A -v 172.28.1.1     # 网关扫描示例

扫描结果解读:

1
2
3
4
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
22/tcp  open  ssh

1.4 注意事项

  • 需管理员权限运行
  • 扫描前需获得授权
  • 避免高频扫描触发防火墙

二、防火墙规则突破方案

2.1 RDP连接被阻原理分析

学校防火墙可能:

  • 阻断3389端口的出站连接
  • 检测RDP协议特征
  • 限制特定IP段的访问

2.2 Socks5代理方案

graph LR
A[本地PC] --> B[Socks5公网服务器:1080] --> C[目标RDP服务器]

配置步骤:

  1. 购买云服务器(阿里云/腾讯云)
  2. 安装Socks5服务:
1
sudo apt install dante-server
  1. 客户端配置:
1
proxychains rdesktop 目标IP:3389

2.3 反向代理方案(推荐)

使用FRP反向代理:

1
2
3
4
5
6
# frpc.ini
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000

三、流量特征隐匿实战

3.1 Wireshark抓包分析

  1. 安装Wireshark(官网下载)
  2. 过滤FRP流量:
1
tcp.port == 7000 && tcp contains "frp"
  1. 特征头示例:
1
0000  02 00 00 01 04 00 00 00  00 00 00 00              ............

3.2 Frp的使用

本段来自:https://zhuanlan.zhihu.com/p/599688608

Frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

https://github.com/fatedier/frp

3.2.1 常见流量特征

3.2.1.1 基本配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# frpc.ini
[common]
server_addr = your vps 
server_port = 7000

# kcp监听的端口
protocol = kcp

[plugin_socks5]
type = tcp
remote_port = 6005
plugin = socks5
plugin_user = admin888
plugin_passwd = admin888
# frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
# 开启kcp模式
kcp_bind_port = 7000

这里在不使用任何安全配置,和该工具什么都没改的情况下,我们看下流量特征,使用Socks5的流量规则:

tcp.port == 6005

img

可以看到在进行 Socks 的用户和密码(admin888/admin888)校验整体交互都是属于明文,能看到我们认证的账号密码

img

在攻防渗透中为了提高传输效率,可能会开启KCP,那么这时候抓到的就是走UDP协议

img

另外frpc在连接认证Frps的时候,会进行三次握手,会把Frp的版本信息发给frps进行认证,如果是用的一个没有改过的Frp那么这时候只要建立连接,很容易就会被安全设备捕获到。如下可以看到该工具版本Version、Arch、User、Privilege_key等字段

这时候追踪 TCP 流可以看到我这个 Frp 版本为0.38

img

很多安全设备也会基于 Frp 的相关特征进行流量识别,判断是否遭受黑客攻击

img

TLS加密之后,对比在frpc.ini的[common]中配置tls_enable = true来启用此功能,这时候再看下流量发现整个流量过程都已经被加密了:

img

这时候再去看对应数据包,发现确实已经看不到明文信息了,但是有个新的问题,使用 tls_enable 加密后,首次连接会一个0x17的头部特征,并发送一个大小为243的数据包

img

特征改造

Frpc的入口文件为 cmd/frpc/main.go,go build cmd/frpc/main.go。Frps的入口文件为cmd/frps。

3.3 流量特征改造

默认字节修改

上面提到的当使用了TLS加密之后,因为frp为了端口复用首次frp建立连接会出现一个 0x17 特征包,建立的第一个字节就是固定在 /pkg/util/net/t l s.go 处,这里对 FRPTLSHeadByte 进行修改,补充单字节为多字节。

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var (
        //FRPTLSHeadByte = 0x17

        // 修改后
        FRPTLSHeadByte = 0x16
)

func WrapTLSClientConn(c net.Conn, tlsConfig *tls.Config, disableCustomTLSHeadByte bool) (out net.Conn) {
        if !disableCustomTLSHeadByte {
                //c.Write([]byte{byte(FRPTLSHeadByte)})

                //修改后
                c.Write([]byte{byte(FRPTLSHeadByte), byte(0x71), byte(0x72)})
        }
        out = tls.Client(c, tlsConfig)
        return
}

func CheckAndEnableTLSServerConnWithTimeout(
        c net.Conn, tlsConfig *tls.Config, tlsOnly bool, timeout time.Duration,
) (out net.Conn, isTLS bool, custom bool, err error) {

        //sc, r := gnet.NewSharedConnSize(c, 2)
        //修改后
        sc, r := gnet.NewSharedConnSize(c, 4)
        //buf := make([]byte, 1)
        //修改后
        buf := make([]byte, 3)
        var n int
        c.SetReadDeadline(time.Now().Add(timeout))
        n, err = r.Read(buf)
        c.SetReadDeadline(time.Time{})
        if err != nil {
                return
        }

        //if n == 1 && int(buf[0]) == FRPTLSHeadByte
        //修改之后
        if n == 3 && int(buf[0]) == FRPTLSHeadByte {
                out = tls.Server(c, tlsConfig)
                isTLS = true
                custom = true
        } else if n == 1 && int(buf[0]) == 0x16 {
                out = tls.Server(sc, tlsConfig)
                isTLS = true
        } else {
                if tlsOnly {
                        err = fmt.Errorf("non-TLS connection received on a TlsOnly server")
                        return
                }
                out = sc
        }
        return
}

这里改完只要能重新编译那就没什么问题,这时候就可以看到成功后的值,从一个字节变成了3个字节。

img

代理特征修改

如果不开启 TLS 选项的话,避免配置代理时暴露服务器 IP 和本机IP 的话,修改 server/proxy/proxy.go 文件。把源地址和目的地址写死114.114.114.114,这里可以任意修改。

img

记录的 src_addrdst_addr 地址已经变成 114.114.114.114 了。

img

3.4 功能改造

3.4.1 配置文件自删除

正常情况在客户端启动时会去加载配置文件,这样就会导致我们的vps服务器地址泄露。故可以使用以下几种方法:

  1. 加上命令行参数,这种就是将配置文件内容全部写入代码中,实现带参执行,但是这种还是比较容易被发现;
  2. 远程去加载配置文件,这样需要通过域名或者ip去解析,这样隐藏也不是太好;
  3. 在客户端执行之后直接删除frpc.ini,这样的话直接在代码中写死即可。这样较为隐蔽

修改文件 /frp/cmd/frpc/sub/root.go 文件

添加一个变量,

img

然后在 RegisterCommonFlags 函数中去进行修改,

1
cmd.PersistentFlags().BoolVarP(&delEnable, "delEnable", "", true, "remove frpc.ini")

默认运行之后直接将配置文件进行删除

img

最终只需要在启动函数中加上即可

img

没有报错就可以直接进行交叉编译生成

img

运行前

img

运行之后,只剩下 frpc.exe,配置文件自动删除

img

成功连接

img

2.1.4 总结

这里只是做了一个初步的改造,比如后续可以考虑本身免杀问题、功能上还可以添加端口转发、以及利用cdn隐藏ip,带参数版加密执行等。企业在遭受到黑客攻击进入到后渗透阶段隧道的搭建和流量隐匿是常用的基础手段,安全设备在原有的流量检测设备中进行规则判断是远远不够的,需要针对 Frp 等隧道工具流量特征细节化进行更加深入的研究,针对隧道流量进行更详细的规则提取,不断完善企业威胁流量监测,提高企业安全建设能力。


四、注意事项

  1. 所有操作需在合法授权范围内进行
  2. 禁止扫描非授权目标
  3. 修改流量特征需配合TLS加密
  4. 遵守学校网络安全规定

实践建议:可在虚拟机环境搭建实验网络(推荐使用VirtualBox)

五、课后思考

基础思考

  1. TCP SYN扫描(-sS)与TCP全连接扫描(-sT)有何本质区别? 如果目标服务器开启了防火墙但未启用IDS,哪种扫描方式被发现的风险更低?为什么?
  2. 当使用Socks5代理突破防火墙时 如果代理服务器IP被学校防火墙加入黑名单,可以通过哪些技术手段继续建立RDP连接?(提示:考虑协议伪装或分布式架构)
  3. Wireshark流量分析实践 若发现FRP流量特征不仅存在于MagicNumber,还包含固定心跳包间隔(30秒),如何通过修改源码实现动态随机化心跳间隔?

进阶挑战

  1. 协议特征深度隐匿 现有方案仅修改了FRP的MagicNumber特征:

    • 如何通过修改frp/pkg/util/net/conn.go中的WrapConn方法,使流量特征更接近HTTPS?
    • 若同时配合Let’s Encrypt证书部署TLS加密,需修改哪些核心模块?(需阅读frp TLS相关源码)
  2. 防火墙对抗推演 假设学校防火墙升级为:

    • 深度包检测(DPI)识别非标准Socks5握手
    • 机器学习模型分析流量时序特征 请设计一套结合「随机化分片传输」+「QUIC协议隧道」+「噪声流量注入」的三层隐匿方案,要求:
    • 说明各层对抗的技术原理
    • 绘制数据封装流程图(可文字描述)
本文由作者按照 CC BY 4.0 进行授权

© Dignite. 保留部分权利。 由  提供CDN加速。

浙ICP备2023032699号 | 使用 Jekyll 主题 Chirpy