说实话,当我第一次面对一个刚初始化、光秃秃的 Linux 服务器时,心里也是咯噔一下。尤其是当你还在调试业务,突然接到报警说服务器连不上了,那种“天塌了”的焦虑感,我懂。但别慌,今天咱们就聊聊怎么在 AlmaLinux 9 上稳稳当当地把环境搭起来,从连不上 SSH 到 Nginx 跑通,再到给服务器穿上一层“防弹衣”。这篇文章不是那种枯燥的说明书,而是我踩过的坑、修过的 bug,手把手教你把这些步骤变成肌肉记忆。
第一步:SSH 连接——别被拒之门外
很多新手(包括当年的我)最容易卡在第一步:连不上 SSH。你以为账号密码输对了就行?不,AlmaLinux 9 默认的安全策略比 CentOS 7 严苛得多,尤其是 PermitRootLogin 这个选项,如果你没提前配置好,直接就被拒之门外了。
1.1 为什么你的 SSH 连不上?
AlmaLinux 9 默认禁用了 root 直接登录。这是好事,但从运维角度看,如果你没配置好普通用户 sudo 权限,又忘了 root 密码,那就真·崩盘了。
常见错误场景:
- 用 root 账号登录,提示 “Permission denied”。
- 用普通用户登录,但
sudo命令无效。 - 端口不是 22,但没改本地配置。
1.2 正确姿势:创建专用用户并配置密钥登录
强烈建议: 永远不要用密码登录 SSH,尤其是生产环境。密码可以被暴力破解,密钥对则几乎不可能。
步骤一:通过控制台或云服务商后台创建用户
假设你无法 SSH 进去,那就用云服务商(阿里云、腾讯云、AWS 等)提供的“VNC 控制台”或“Cloud Shell”进入系统。
# 创建新用户,比如叫 'devops'
sudo useradd -m -s /bin/bash devops
# 设置密码(先设一个临时的,用于首次登录配置密钥)
sudo passwd devops
步骤二:生成 SSH 密钥对(在你的本地电脑执行)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 按回车默认保存,建议不设密码,方便脚本自动连接
步骤三:将公钥复制到服务器
# 如果无法 scp,可以手动复制
# 先查看本地公钥
cat ~/.ssh/id_ed25519.pub
# 登录服务器后,创建 .ssh 目录并写入公钥
sudo mkdir -p /home/devops/.ssh
sudo echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI..." /home/devops/.ssh/authorized_keys
sudo chown -R devops:devops /home/devops/.ssh
sudo chmod 700 /home/devops/.ssh
sudo chmod 600 /home/devops/.ssh/authorized_keys
步骤四:配置 sudo 权限
AlmaLinux 9 默认没有把新用户加入 wheel 组,你需要手动操作:
sudo usermod -aG wheel devops
步骤五:修改 SSH 配置,禁用 root 登录
sudo vi /etc/ssh/sshd_config
找到并修改以下行:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH 服务:
sudo systemctl restart sshd
现在,你用本地电脑的私钥登录:
ssh -i ~/.ssh/id_ed25519 devops@你的服务器IP
如果能连上,恭喜你,第一步稳了。
第二步:系统更新与基础环境准备
连上服务器只是开始,AlmaLinux 9 作为一个相对新的发行版,依赖关系比 CentOS 7 复杂一些。别急着装软件,先让系统自身达到最佳状态。
2.1 全量更新
sudo dnf update -y
这个过程可能需要几分钟,取决于网络速度。更新完成后,建议重启一次,确保新内核生效:
sudo reboot
重启后重新 SSH 登录,检查内核版本:
uname -r
2.2 安装常用工具
有些工具 AlmaLinux 9 默认没装,比如 curl、wget、vim、net-tools 等。
sudo dnf install -y curl wget vim git net-tools epel-release
注意: EPEL(Extra Packages for Enterprise Linux)是必须的,很多第三方软件(如 Nginx 的某些模块)依赖 EPEL。
2.3 时间同步
服务器时间不准,会导致日志混乱、证书验证失败等问题。AlmaLinux 9 默认使用 chronyd:
sudo timedatectl set-timezone Asia/Shanghai
sudo systemctl enable --now chronyd
第三步:Nginx 环境搭建——别再用源码编译了
老手可能喜欢从源码编译 Nginx,以获得最大定制性。但对于大多数业务场景,直接通过包管理器安装更稳定、更容易维护。AlmaLinux 9 的 AppStream 仓库里就有 Nginx,但版本可能不是最新的。我们推荐使用 Nginx 官方仓库,这样能拿到最新的安全补丁。
3.1 添加 Nginx 官方仓库
sudo dnf install -y nginx
# 如果默认仓库版本太旧,可以使用官方源
sudo dnf install -y https://nginx.org/packages/centos/9/x86_64/RPMS/nginx-1.24.0-1.el9.ngx.x86_64.rpm
重要提示: 从源码编译 Nginx 时,你可能会遇到 pcre2、zlib、openssl 等依赖问题,尤其是在 AlmaLinux 9 上。用 DNF 安装能自动解决这些依赖,省掉大量排查时间。
3.2 启动并设置开机自启
sudo systemctl enable --now nginx
sudo systemctl status nginx
访问 http://你的服务器IP,如果看到 “Welcome to nginx!” 页面,说明安装成功。
3.3 配置防火墙开放 80⁄443 端口
AlmaLinux 9 使用 firewalld,默认可能没有开放 HTTP/HTTPS。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
第四步:初始安全加固——给服务器穿上一层“防弹衣”
服务器上线前,不加固等于裸奔。以下操作能挡住 90% 的自动化扫描攻击。
4.1 修改 SSH 默认端口
默认 22 端口是黑客扫描的重点目标。改成高位端口(如 2222)能大幅减少暴力破解尝试。
编辑 /etc/ssh/sshd_config:
Port 2222
重启 SSH:
sudo systemctl restart sshd
之后连接 SSH 时需要指定端口:
ssh -p 2222 devops@你的服务器IP
注意: 修改端口后,务必确保防火墙已开放新端口,否则你会被自己锁在门外。
4.2 配置 Fail2ban 防止暴力破解
Fail2ban 可以监控日志,发现多次登录失败后自动封禁 IP。
sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban
配置 SSH 防护规则,创建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 3600
重启 fail2ban 生效:
sudo systemctl restart fail2ban
4.3 禁用不必要的服务
AlmaLinux 9 默认开启了一些可能不需要的服务,关掉它们减少攻击面。
# 查看当前运行的服务
systemctl list-units --type=service --state=running
# 禁用不需要的服务,如 cups(打印)、dbus-socket 等
sudo systemctl disable --now cups
sudo systemctl disable --now bluetooth
4.4 配置 SELinux
SELinux 是 AlmaLinux 9 默认开启的强制访问控制机制,能限制进程权限,防止被入侵后横向移动。
检查状态:
getenforce
如果显示 Enforcing,则保持开启。如果你不确定如何配置 SELinux 策略,建议不要将其设为 Permissive 或 Disabled,除非你有把握处理由此引发的兼容性问题。
4.5 定期更新系统
设置自动安全更新,避免遗漏关键补丁。
sudo dnf install -y dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
编辑 /etc/dnf/automatic.conf,将 apply_updates 设为 yes:
apply_updates = yes
第五步:常见问题排查——崩盘时的急救包
即使做了上述所有准备,服务器仍可能出问题。以下是几个高频“崩盘”场景及解决方案。
5.1 服务器突然无法 SSH 登录
排查步骤:
- 网络层面: ping 服务器 IP,看是否通。如果不通,可能是云服务商的安全组规则被修改,或服务器宕机。
- SSH 服务层面: 通过 VNC 控制台登录,检查
systemctl status sshd。 - 端口层面: 确认 SSH 端口是否被修改,防火墙是否开放。
- 磁盘空间: 登录控制台,执行
df -h,如果根分区满了,SSH 可能无法写入日志而拒绝登录。清理日志文件或大文件。
5.2 Nginx 启动失败
常见错误: “Address already in use” 或 “Permission denied”。
解决方法:
- 端口冲突: 检查是否有其他进程占用 80⁄443 端口。
sudo lsof -i :80 sudo lsof -i :443 - 权限问题: 确保 Nginx 配置文件中
user指令正确,且日志目录权限正确。sudo chown -R nginx:nginx /var/log/nginx sudo chmod 750 /var/log/nginx - 配置语法错误: 检查 Nginx 配置。
sudo nginx -t
5.3 内存不足导致服务崩溃
AlmaLinux 9 对内存管理更严格,OOM Killer 可能误杀进程。
排查方法:
dmesg | grep -i 'killed process'
解决方法:
- 增加 Swap 分区。
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - 优化应用内存使用,或升级服务器配置。
结语:崩盘并不可怕,可怕的是没预案
服务器崩盘,本质上是因为我们对系统底层理解不够深,或者对风险预估不足。AlmaLinux 9 作为一个由社区驱动的 CentOS 替代品,稳定性和安全性都很出色,但前提是你得知道怎么正确地使用它。
从 SSH 密钥登录、Fail2ban 防暴力破解、Nginx 官方源安装,到 SELinux 和自动更新,每一步都是在为服务器增加一层保险。把这些步骤写成脚本,每次新服务器部署时自动化执行,能节省大量时间,也能减少人为错误。
最后,记得定期备份!备份是最后一道防线,比任何安全加固都重要。当一切崩盘时,你能从容恢复,才是真正的专家。
