2025-11-10 13:06
“万丈高楼平地起”。在开始构建复杂的应用集群之前,我们必须首先确保承载所有服务的底层操作系统是坚固、安全且配置得当的。本章将带你完成从操作系统选型到完成安全加固的完整初始化流程。一个配置得当的服务器基石,能为你避免未来无数潜在的性能瓶颈和安全噩梦。
选择合适的Linux发行版是第一步,它决定了软件生态、稳定性策略和后续的维护成本。
1.1.1 选型核心考量因素
稳定性与更新策略:你需要追求极致的稳定(如RHEL),还是需要较新的软件包(如Ubuntu)?
软件包管理生态:yum/dnf (RPM系) vs apt (Debian系)。
社区与商业支持:活跃的社区和可靠的商业支持是企业环境的定心丸。
学习曲线与文档:哪个发行版的文档和社区资源更符合你的团队习惯?
1.1.2 主流发行版深度对比
特点:纯粹的社区发行版,以“稳如磐石”和严格的自由软件哲学闻名。
优势:极其稳定,软件包质量高,是很多其他发行版(包括Ubuntu)的基石。
劣势:发布周期不固定,软件版本可能比CentOS更旧。
特点:基于Debian,由Canonical公司提供商业支持。每两年发布一个LTS版本,提供5年支持。
优势:平衡了稳定性与软件的新颖性,拥有庞大的社区和丰富的在线资源。对新手友好,且云市场镜像支持完善。
劣势:部分纯化论者认为其系统集成度较高(如snap包)。
特点:源于Red Hat Enterprise Linux,以极致稳定性著称。软件版本可能较旧,但经过充分测试。
优势:生命周期长,安全更新可靠,广泛用于企业级服务器和生产环境。
劣势:默认软件仓库中的软件版本相对保守。
CentOS/RHEL (及其衍生版,如Rocky Linux, AlmaLinux)
Ubuntu Server
Debian
1.1.3 最终建议
企业级生产环境,追求最大稳定性:首选 RHEL 或其免费衍生版(Rocky Linux / AlmaLinux)。
需要较新软件栈,或部署在云端:Ubuntu Server LTS 是最流行的选择之一。
对系统有极致控制欲,崇尚稳定和简洁:Debian Stable 是不会出错的选择。
行动指南:本书后续命令和示例将主要基于 Ubuntu Server 22.04 LTS 和 Rocky Linux 9,以确保广泛的适用性。
“最少的服务,最小的攻击面”。这是服务器安全的第一原则。
1.2.1 为何要最小化安装?
减少不必要的运行服务,降低被利用的风险。
减少系统资源占用,为应用程序留出更多资源。
减少需要维护和打补丁的软件包数量。
1.2.2 安装时的关键选择
在安装类型中,明确选择 “Minimal Install”(最小化安装)。
除非确有必要,否则不默认安装Web服务器、数据库等任何应用软件。这些应在初始化后,按需独立安装。
1.2.3 首次启动后的清理工作
# 在Ubuntu/Debian上,删除不必要的预装软件sudo apt purge --auto-remove package-name# 在Rocky Linux/CentOS上,删除不必要的包sudo dnf remove package-name
手动配置每一台服务器是低效且易错的。我们应该使用一个初始化脚本来自动化完成这些任务。
1.3.1 创建专属用户并禁止Root登录
风险:允许root用户直接通过SSH登录是极大的安全风险,会面临无尽的暴力破解攻击。
操作:
# 1. 添加新用户(例如 `deployer`)sudo adduser deployer# 2. 将用户加入sudo组,以获得管理权限sudo usermod -aG sudo deployer # Ubuntu/Debiansudo usermod -aG wheel deployer # Rocky Linux/CentOS# 3. 切换到新用户,并配置SSH密钥登录su - deployermkdir ~/.sshchmod 700 ~/.ssh# 将你的公钥(id_rsa.pub)内容写入 authorized_keysecho "your-public-key-content" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys# 4. (重要!)在确认能用新用户和密钥登录后,再禁用root登录和密码登录# 编辑 /etc/ssh/sshd_config,确保有以下配置:# PermitRootLogin no# PasswordAuthentication no# 然后重启SSH服务: sudo systemctl restart sshd
1.3.2 配置时区与本地化
# 设置时区为上海(中国时间)sudo timedatectl set-timezone Asia/Shanghai# 更新系统语言环境sudo localectl set-locale LANG=en_US.UTF-8
1.3.3 配置自动安全更新(非破坏性)
Ubuntu: 使用 unattended-upgrades 包。
RHEL/Rocky Linux: 使用 dnf-automatic 或配置 yum-cron。
1.3.4 编写一个可复用的初始化脚本
将上述所有步骤(创建用户、配置SSH、更新系统、安装基础工具等)编写成一个Shell脚本。
新服务器启动后,只需运行此脚本,即可完成基础环境的搭建。
防火墙是服务器的“门卫”,必须严格管控所有进出流量。
1.4.1 现代防火墙管理工具
UFW (Uncomplicated Firewall):Ubuntu/Debian的默认工具,对用户极其友好。
firewalld:RHEL/Rocky Linux/CentOS 7+ 的默认工具,支持动态更新和“区域”概念。
1.4.2 基础防火墙策略
默认策略:拒绝所有进入(INPUT) 连接,允许所有发出(OUTPUT) 连接。
按需开放端口:
# 使用 UFW (Ubuntu/Debian)sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow ssh # 开放SSH端口(22),这是生命线!sudo ufw allow 80 # 开放HTTPsudo ufw allow 443 # 开放HTTPSsudo ufw --force enable # 启用防火墙# 使用 firewalld (RHEL/Rocky Linux)sudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reload
切记:在启用防火墙前,务必确保SSH端口是允许的,否则你将失去与服务器的连接!
掌握如何管理和洞察系统服务,是运维人员的基本功。
1.5.1 systemd 核心命令
sudo systemctl start service-name # 启动服务sudo systemctl stop service-name # 停止服务sudo systemctl restart service-name # 重启服务sudo systemctl reload service-name # 平滑重载配置(如果支持)sudo systemctl enable service-name # 设置开机自启sudo systemctl status service-name # 查看服务状态(非常重要!)
1.5.2 系统日志分析
了解 /var/log/ 目录下的关键日志文件:/var/log/syslog (Ubuntu), /var/log/messages (RHEL), /var/log/auth.log (SSH登录日志) 等。
学会使用 grep, tail, less 等命令快速过滤和查看日志。
实践:尝试在日志中查找一次失败的SSH登录记录,体会日志排查的重要性。
journalctl (systemd的日志系统)
sudo journalctl -u service-name # 查看指定服务的日志sudo journalctl -f # 实时跟踪日志sudo journalctl --since "1 hour ago" # 查看过去一小时的日志
rsyslog (传统的系统日志服务)
至此,你已经成功地将一台“裸机”服务器,武装成了一个配置规范、基础安全、便于管理的系统基石。我们强调了最小化安装以减少攻击面,使用非root用户和SSH密钥来加固访问,配置防火墙来过滤流量,并学会了使用 systemd和日志工具 来管理服务和排查问题。
这个坚实的基础,将是我们后续部署Web服务、数据库以及构建复杂集群的可靠起点。在下一章,我们将在这块基石上,搭建起Web服务的第一块砖——Nginx。