一、 为什么是 AlmaLinux 9?先聊聊我的选择逻辑
老实说,在云原生时代,选择操作系统就像选搭档。Red Hat 宣布不再更新 CentOS 8,RHEL 8.5 之后的一系列操作让很多运维人员心寒。这时候,AlmaLinux 横空出世,它不仅仅是 CentOS 的“平替”,更是 RHEL 的 1:1 二进制兼容复刻。对于企业级用户来说,这意味着你可以免费拥有 Red Hat Enterprise Linux 9 的所有稳定性、安全性和长达十年的支持周期,却不需要支付那一笔不菲的订阅费用。
我为什么强烈推荐 AlmaLinux 9 作为你的云服务器首选?
首先,它的生态兼容。几乎所有为 CentOS 7⁄8 开发的软件包、脚本、工具都能在 AlmaLinux 9 上无缝运行。其次,它在云环境下的表现极为优异,启动速度快、资源占用低、网络栈优化得当。最重要的是,作为一个社区驱动的项目,它的更新节奏透明且迅速,安全补丁通常在 RHEL 发布后极短的时间内跟进。
如果你正在纠结是选 Ubuntu Server、Debian 还是 AlmaLinux,我的建议是:如果你的业务依赖 yum/dnf 包管理,或者需要运行某些仅支持 RHEL 系的商业软件(比如某些版本的 Java 中间件、数据库驱动),AlmaLinux 9 是最稳妥的选择。它既没有 CentOS Stream 那种“滚动预览”的不确定性,又没有 Debian 系在非主流软件支持上的潜在麻烦。
二、 准备阶段:别让基础不牢,地动山摇
在动手敲下第一行命令之前,很多新手会忽略准备工作,导致后续配置处处碰壁。我来给你梳理几个关键的前置条件。
1. 云服务商的选择与实例配置
不管你用的是 AWS EC2、阿里云 ECS、腾讯云 CVM 还是 DigitalOcean,基本原则是一致的:
- 地域选择:选择距离你的目标用户最近的数据中心。延迟对用户体验的影响是巨大的。
- 实例类型:对于生产环境,建议选择通用型(General Purpose)实例,如 AWS 的 t3/m5 系列,阿里云的 g7 系列等。不要为了省钱选择突发性能实例(如 t2.micro)作为长期生产节点,CPU 积分耗尽会导致服务严重卡顿。
- 存储类型:务必选择 SSD 云盘。机械硬盘的 IOPS 太低,会导致数据库查询缓慢、文件读写瓶颈。
- 镜像选择:在创建实例时,选择 AlmaLinux 9 的最新版本(目前是 9.4 或更新版本)。注意,不同云服务商可能只提供最小化安装(Minimal),这反而是好事,因为攻击面最小。
2. 本地环境准备
你需要一个稳定的 SSH 客户端。对于 Windows 用户,推荐安装 Windows Terminal 配合 OpenSSH 客户端,或者使用 PuTTY 的替代品如 MobaXterm。Mac/Linux 用户直接使用终端即可。
# 检查本地 SSH 版本,确保支持 ed25519 等现代加密算法
ssh -V
同时,准备好你的密钥对。虽然密码登录更方便,但在生产环境中,密钥对是安全的第一道防线。
# 生成密钥对(如果还没有的话)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 查看公钥
cat ~/.ssh/id_ed25519.pub
三、 系统安装:极简主义的最佳实践
很多教程会建议你安装带有 GUI(图形用户界面)的版本。在这里,我要明确反对这个观点。云服务器不是桌面机。安装 GUI 会占用大量的 CPU、内存和磁盘资源,增加攻击面,且在生产环境中几乎没有任何用处。
1. 最小化安装(Minimal)
在云控制台中创建实例时,选择 “Minimal” 或 “Base” 镜像。如果云服务商只提供标准安装,进入系统后,你可以先不安装图形组件,而是通过包管理来移除不需要的组件。
2. 网络配置:静态 IP 的重要性
DHCP 虽然方便,但在服务器领域是忌讳。IP 地址变化会导致 DNS 解析失败、防火墙规则失效、备份中断等一系列问题。
在 AlmaLinux 9 中,网络管理由 NetworkManager 负责。我们可以使用 nmcli 命令行工具来配置静态 IP。
# 查看当前网络接口名称
nmcli device status
# 假设你的接口是 eth0,以下是配置静态 IP 的示例
sudo nmcli connection modify eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 1.1.1.1" \
connection.autoconnect yes
# 重启网络连接使配置生效
sudo nmcli connection up eth0
避坑指南:如果你是通过 SSH 远程连接的,修改网络配置时务必小心。错误的网关或 DNS 配置可能导致你立即失联。建议先在同一控制台开启一个 VNC 远程连接,以防万一。
四、 系统初始化:让系统进入最佳状态
刚刚安装好的 AlmaLinux 9 就像一辆刚出厂的汽车,发动机能转,但缺乏润滑和调整。我们需要进行一系列初始化操作。
1. 更新系统
这是最重要的一步。厂商在发布镜像时,可能已经有一些安全补丁过时了。
# 更新所有软件包
sudo dnf update -y
# 清理缓存和过期包
sudo dnf autoremove -y
sudo dnf clean all
2. 配置主机名
一个清晰的主机名有助于在多服务器环境中快速识别。
# 设置临时主机名(立即生效,重启后失效)
sudo hostnamectl set-hostname prod-web-01
# 设置永久主机名
sudo hostnamectl set-hostname prod-web-01 --static
sudo hostnamectl set-hostname prod-web-01 --transient
3. 配置 yum 源
虽然默认的 AppStream 源可以使用,但对于国内用户,配置镜像源可以极大提升下载速度。
# 备份默认源
sudo cp /etc/yum.repos.d/AlmaLinux.repo /etc/yum.repos.d/AlmaLinux.repo.bak
# 使用阿里云镜像源(示例)
sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/AlmaLinux.repo
sudo sed -i 's|#baseurl=http://dl.almalinux.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/AlmaLinux.repo
注意:不同云服务商可能已有预配置的国内镜像,你可以先
dnf makecache测试一下速度,再决定是否替换。
4. 配置时间同步
准确的时间对于日志分析、证书验证、分布式系统同步至关重要。
# 启用 chronyd 服务
sudo systemctl enable --now chronyd
# 查看时间同步状态
chronyc tracking
五、 安全加固:构建你的数字堡垒
这是本教程的核心部分。一个未加固的服务器,在公网暴露几分钟后就可能被扫描并入侵。我们将采取纵深防御策略。
1. 创建普通用户并授予 sudo 权限
永远不要直接使用 root 用户登录服务器。创建一个普通用户,仅在日常操作中使用,需要特权时才通过 sudo 提权。
# 创建用户,指定 home 目录和默认 shell
sudo useradd -m -s /bin/bash devops
# 设置密码
sudo passwd devops
# 将用户添加到 wheel 组(AlmaLinux 默认 wheel 组拥有 sudo 权限)
sudo usermod -aG wheel devops
# 测试登录(在新终端窗口中,不要关闭当前的 root 会话)
# ssh devops@your_server_ip
# 输入密码,尝试 sudo 命令
2. 配置 SSH 密钥认证,禁用密码登录
密码爆破是最常见的攻击方式。密钥认证强度高得多。
# 在你的本地机器上,将公钥复制到服务器
ssh-copy-id devops@your_server_ip
# 登录服务器,编辑 SSH 配置文件
sudo vi /etc/ssh/sshd_config
修改以下关键参数:
# 禁用密码认证
PasswordAuthentication no
# 禁用 root 直接登录
PermitRootLogin no
# 使用密钥认证
PubkeyAuthentication yes
# 限制登录用户(可选,只允许特定用户登录)
AllowUsers devops
# 更改默认端口(可选,增加一点隐蔽性,但不是真正的安全措施)
# Port 2222
保存后重启 SSH 服务:
sudo systemctl restart sshd
重要提醒:在禁用密码登录前,务必确保你已经能够使用密钥成功登录。否则,你将无法再登录服务器,只能联系云服务商通过 VNC 控制台重置。
3. 配置防火墙
AlmaLinux 9 默认使用 firewalld 作为防火墙。我们需要只开放必要的端口。
# 启用 firewalld 并设置默认区域为 trusted(危险,仅用于初始配置)
sudo systemctl enable --now firewalld
# 切换到更安全的做法:设置默认区域为 public,并只开放必要服务
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --reload
# 开放 SSH 端口(如果使用默认 22 端口)
sudo firewall-cmd --permanent --add-service=ssh
# 如果运行 Web 服务,开放 HTTP 和 HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 如果更改了 SSH 端口,需要添加端口规则
# sudo firewall-cmd --permanent --add-port=2222/tcp
# 重载防火墙使配置生效
sudo firewall-cmd --reload
# 查看当前开放的端口和服务
sudo firewall-cmd --list-all
4. 安装并配置 fail2ban
fail2ban 可以监控日志文件,当检测到多次失败登录尝试时,自动封禁攻击者的 IP 地址。
# 安装 fail2ban
sudo dnf install fail2ban -y
# 启用并启动服务
sudo systemctl enable --now fail2ban
# 创建本地配置文件,覆盖默认配置
sudo vi /etc/fail2ban/jail.local
配置内容:
[DEFAULT]
# ban 时间,10 分钟
bantime = 600
# 查找时间窗口,10 分钟
findtime = 600
# 最大重试次数
maxretry = 3
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
backend = systemd
重启 fail2ban:
sudo systemctl restart fail2ban
# 查看状态
sudo fail2ban-client status sshd
5. SELinux 配置
SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块,提供强制访问控制。新手往往倾向于禁用它,但这是错误的。正确的做法是学习如何配置它。
# 查看 SELinux 状态
getenforce
# 确保 SELinux 处于 Enforcing 模式
sudo setenforce 1
# 查看 SELinux 上下文
ls -Z /var/www/html
如果你遇到应用无法访问文件的问题,可以使用 audit2allow 工具生成策略模块,而不是直接禁用 SELinux。
# 查看 SELinux 审计日志中的拒绝记录
sudo ausearch -m avc -ts recent
# 将拒绝记录转换为策略模块
sudo audit2allow -m mymodule -a | sudo tee mymodule.te
sudo semodule -i mymodule.pp
六、 实用工具安装:提升运维效率
1. 安装常用开发工具
sudo dnf groupinstall "Development Tools" -y
sudo dnf install git curl wget vim htop tmux unzip zip -y
2. 配置 htop
htop 是一个交互式的进程查看器,比 top 更直观。
sudo dnf install htop -y
htop
3. 安装 Docker
现代应用部署离不开容器化。
# 安装依赖
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启用并启动 Docker
sudo systemctl enable --now docker
# 将当前用户添加到 docker 组,避免每次命令都加 sudo
sudo usermod -aG docker devops
# 验证安装
docker --version
docker compose version
4. 安装 Nginx 或 Caddy
如果你需要反向代理或 Web 服务器,推荐使用 Nginx 或 Caddy。Caddy 的优势在于自动 HTTPS。
# 安装 Nginx
sudo dnf install nginx -y
sudo systemctl enable --now nginx
# 安装 Caddy(需要添加仓库)
sudo dnf install 'dnf-command(copr)' -y
sudo copr enable @caddy/stable -y
sudo dnf install caddy -y
sudo systemctl enable --now caddy
七、 监控与日志:让系统透明化
1. 配置日志轮转
默认配置通常够用,但可以检查 /etc/logrotate.conf。
2. 安装监控代理
对于云服务器,云服务商通常提供免费的监控代理。例如,阿里云有云监控 agent,AWS 有 CloudWatch agent。安装这些代理可以将 CPU、内存、磁盘等指标直接推送到云控制台,无需额外搭建监控系统。
3. 本地监控:Prometheus + Grafana
如果你需要更灵活的监控,可以自建监控系统。
# 使用 Docker 部署 Prometheus 和 Grafana
mkdir -p ~/monitoring
cd ~/monitoring
# 创建 docker-compose.yml
cat <<EOF > docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
- '--web.enable-lifecycle'
restart: unless-stopped
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:
EOF
# 创建 prometheus.yml
cat <<EOF > prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
EOF
# 启动服务
docker compose up -d
八、 常见避坑指南:血泪教训总结
不要关闭 SSH 会话前测试新配置:每次修改 SSH 配置或防火墙规则后,先开一个新的 SSH 会话测试,确认能登录后再关闭旧会话。
备份重要数据:在进行任何重大操作前,备份
/etc目录、数据库和数据文件。可以使用rsync或云服务商的快照功能。不要随意关闭 SELinux:SELinux 配置复杂,但它的存在能防止服务越权访问。遇到问题时,先尝试调整策略,而不是直接禁用。
定期更新系统:设置 cron 任务自动更新安全补丁。
# 编辑 crontab
crontab -e
# 添加每天凌晨 2 点自动更新
0 2 * * * /usr/sbin/dnf update -y --security
最小权限原则:只授予用户和服务所需的最小权限。不要给 Web 服务器 root 权限,不要给数据库用户不必要的文件系统访问权限。
关注云服务商的安全组:防火墙不止在服务器上,云服务商的虚拟防火墙(安全组)同样重要。在安全组层面限制入站流量,减少服务器的压力。
九、 结语:持续学习与迭代
安装和配置 AlmaLinux 9 只是第一步。服务器的安全是一个持续的过程,需要定期审查日志、更新软件、调整策略。建议你建立一个文档,记录每次变更的操作和原因,便于后续追踪和排查。
希望这份指南能帮助你搭建一个安全、稳定的 AlmaLinux 9 服务器。如果你在过程中遇到任何问题,欢迎随时查阅官方文档或社区资源。记住,实践是最好的老师,多动手,多试错,你会越来越熟练。
祝你在云服务器的管理之路上顺利前行!
