嘿,朋友!欢迎来到 Linux 的世界。我知道,当你第一次面对那黑底白字的终端界面时,心里可能有点打鼓:“这玩意儿真的能跑起来吗?会不会一不小心就把服务器炸了?”别担心,AlmaLinux 作为 CentOS 的完美继任者,继承了 RHEL(红帽企业版)的血统,稳定、安全且免费,简直是新手入门和企业生产环境的首选。
今天,我们不讲枯燥的理论,直接上手。我会像老朋友一样,带你一步步从零搭建一台 AlmaLinux 服务器,把它打扮得漂漂亮亮,穿上防弹衣(安全加固),最后再给它做个体检(性能优化)。准备好了吗?让我们开始这段旅程吧。
第一步:初识与连接——不仅仅是“ping”通
首先,你得有一台 AlmaLinux 服务器。假设你已经在阿里云、腾讯云或者 AWS 上买了一台云主机,系统镜像选了 AlmaLinux 8 或 9。拿到手后,第一件事不是急着装软件,而是连进去。
1. SSH 连接的艺术
Windows 用户推荐使用 PuTTY 或 MobaXterm,Mac/Linux 用户直接在终端输入命令。
# 假设你的服务器 IP 是 192.168.1.100,用户名是 root
ssh root@192.168.1.100
这时候,你会看到一串指纹确认提示:Are you sure you want to continue connecting (yes/no/[fingerprint])?。输入 yes 并回车。如果这是你第一次连接,可能会提示你修改密码。
专家提示:在生产环境中,永远不要用
root账号日常操作!这就像拿着钥匙去开保险箱,万一钥匙丢了或者被偷了,后果不堪设想。我们要创建一个普通用户,赋予 sudo 权限。
2. 创建“替身”用户
# 创建新用户,比如叫 'devops'
adduser devops
# 设置密码
passwd devops
# 将用户加入 wheel 组(在 AlmaLinux/RHEL 系中,wheel 组拥有 sudo 权限)
usermod -aG wheel devops
现在,你可以用 devops 账号登录了。试着运行一下 sudo cat /etc/shadow,如果成功了,恭喜你,你已经迈出了安全的第一步。
第二步:系统初始化——磨刀不误砍柴工
刚进系统,第一件事就是更新软件源和安装基础工具。AlmaLinux 使用的是 DNF 包管理器,它比老式的 YUM 快得多,也智能得多。
# 刷新软件源缓存
sudo dnf makecache
# 升级所有已安装的包到最新版本
sudo dnf update -y
# 安装一些常用工具:编辑器、网络工具、压缩工具等
sudo dnf install -y vim net-tools wget curl git htop unzip zip epel-release
这里有个小坑:很多新手安装完系统后发现 ifconfig 用不了,或者 wget 找不到。这就是因为最小化安装(Minimal Install)只给了最核心的组件。上面这条命令帮你补全了“工具箱”。
第三步:安全加固——给服务器穿上防弹衣
这是最关键的一步。云服务器暴露在公网,每天都会有成千上万次的暴力破解尝试。如果不加固,你的服务器可能在几分钟内就被黑掉了。
1. 禁用 Root 远程登录
我们刚才创建了 devops 用户,现在要让 root 只能通过本地登录,不能通过 SSH 远程登录。
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
找到 PermitRootLogin 这一行,改为:
PermitRootLogin no
重启 SSH 服务生效:
sudo systemctl restart sshd
注意:改之前,请务必确保你能用 devops 用户正常登录并执行 sudo 命令,否则一旦出错,你就把自己锁在门外了!
2. 配置防火墙(Firewalld)
AlmaLinux 默认启用 firewalld。我们需要只开放必要的端口。通常我们只需要 HTTP (80)、HTTPS (443) 和 SSH (22)。
# 启动防火墙(如果未启动)
sudo systemctl enable firewalld
sudo systemctl start firewalld
# 允许 SSH 端口(假设你的 SSH 端口还是默认的 22)
sudo firewall-cmd --permanent --add-service=ssh
# 如果你改了 SSH 端口,比如改成 2222,需要这样加:
# sudo firewall-cmd --permanent --add-port=2222/tcp
# 允许 HTTP 和 HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重载防火墙配置
sudo firewall-cmd --reload
你可以用 sudo firewall-cmd --list-all 查看当前开放的端口和服务,确认无误。
3. 安装 Fail2Ban——自动封禁暴力破解者
Fail2Ban 是一个监控日志的服务,当检测到某个 IP 多次登录失败时,会自动将其加入防火墙黑名单。
# 安装 fail2ban
sudo dnf install fail2ban -y
# 启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 查看状态
sudo systemctl status fail2ban
默认配置下,它已经能很好地保护 SSH 了。如果你想自定义,可以复制模板文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
在 [sshd] 段落下,你可以调整 bantime(封禁时间)、findtime(检测时间窗口)和 maxretry(最大重试次数)。
4. 配置 SELinux
SELinux(Security-Enhanced Linux)是 RHEL 系特有的安全模块,很多人因为它难用而选择关闭它,但这绝对是个错误。SELinux 能在系统被攻破时提供最后一道防线。
对于新手,建议保持 SELinux 为 Enforcing 模式,但要注意上下文权限。例如,如果你搭建了 Web 服务器,确保网页文件放在 /var/www/html 下,而不是随便放在 /home/devops/mywebsite 里,否则 Apache/Nginx 会因为 SELinux 拒绝访问而报错。
检查 SELinux 状态:
sestatus
如果显示 SELinux status: enabled 和 Current mode: enforcing,那就完美了。
第四步:常见报错与避坑指南——那些让人头秃的瞬间
在实战中,你可能会遇到一些奇怪的问题。别慌,以下是几个高频“坑”及其解药。
报错 1:Permission denied (publickey,password)
现象:SSH 登录时提示权限被拒。 原因:
- 密码输错了(大小写锁定?)。
- 使用了密钥登录,但私钥权限不对。
- SSH 配置禁止了密码登录。
解决: 如果是密钥问题,检查私钥权限:
chmod 600 ~/.ssh/id_rsa
如果是配置问题,检查 /etc/ssh/sshd_config 中的 PasswordAuthentication 是否为 yes,然后重启 sshd。
报错 2:Connection timed out
现象:Ping 不通,SSH 连不上。 原因:
- 安全组/防火墙规则没开。
- 服务器本身防火墙拦截。
- IP 地址填错。
解决:
先检查云厂商控制台的安全组规则,确保入方向放行了 22 端口。然后在服务器内部检查 firewall-cmd --list-all。
报错 3:Nginx/Apache 启动失败,报 Address already in use
现象:Web 服务器无法绑定 80 端口。 原因:另一个进程占用了 80 端口。 解决: 查找占用端口的进程:
sudo lsof -i :80
# 或者
sudo ss -tlnp | grep :80
如果发现有其他服务(比如之前的 Nginx 没杀干净,或者 Apache 在运行),停止它或杀掉进程:
sudo systemctl stop nginx
sudo kill -9 <PID>
报错 4:DNF 安装报错,Repo 不可用
现象:Error: Failed to download metadata for repo 'appstream'
原因:DNS 解析失败或网络问题。
解决:
检查 /etc/resolv.conf,确保有有效的 nameserver,如 8.8.8.8 或 114.114.114.114。
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
第五步:性能优化——让服务器跑得更飞
服务器稳了,安全了,接下来让它更高效地工作。AlmaLinux 默认的内核参数对于大多数场景是够用的,但在高并发或大数据处理场景下,微调一下会有奇效。
1. 调整内核参数(sysctl)
编辑 /etc/sysctl.conf:
sudo vim /etc/sysctl.conf
添加以下内容(针对高并发 TCP 连接优化):
# 增加文件描述符限制
fs.file-max = 65535
# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 开启 TCP 快速回收
net.ipv4.tcp_tw_reuse = 1
# 增加 TCP 连接队列长度
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# 启用 TCP 拥塞控制算法 BBR(推荐)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
应用配置:
sudo sysctl -p
小贴士:BBR 是 Google 开发的拥塞控制算法,在现代 Linux 内核(4.9+)中表现极佳,能显著提升网络吞吐量。
2. Swap 分区优化
如果你的内存很小(比如 1GB 或更低),Swap 是救命稻草。但如果内存充足,Swap 可能会拖慢速度。
检查 Swap 状态:
free -h
swapon --show
如果希望系统更倾向于使用物理内存,可以将 Swappiness 值调低(默认 30,可调至 10 或 1):
# 临时生效
sudo sysctl vm.swappiness=10
# 永久生效
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 日志轮转优化
系统日志(/var/log/messages, /var/log/secure)如果不定期清理,会撑爆磁盘。AlmaLinux 使用 logrotate 自动管理。
检查 /etc/logrotate.d/ 下的配置文件,确保它们合理。例如,对于 Web 服务器的访问日志,可能需要更频繁的轮转。
第六步:实战演练——部署一个 Nginx + PHP-FPM 环境
光说不练假把式。我们来搭建一个轻量级的 Web 服务器环境。
1. 安装 Nginx 和 PHP
# 安装 EPEL 源(包含一些额外包)
sudo dnf install epel-release -y
# 安装 Nginx 和 PHP-FPM(以 PHP 8.2 为例)
sudo dnf install nginx php-fpm php-cli php-mysqlnd php-gd php-xml php-mbstring -y
# 启动并设置开机自启
sudo systemctl enable nginx
sudo systemctl enable php-fpm
sudo systemctl start nginx
sudo systemctl start php-fpm
2. 配置 Nginx 支持 PHP
默认情况下,Nginx 不知道如何处理 .php 文件。我们需要修改配置文件。
sudo vim /etc/nginx/conf.d/default.conf
在 server 块中添加或修改 location ~ \.php$ 部分:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注意:确保 $document_root 指向正确的网站目录,通常是 /usr/share/nginx/html。
测试配置并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
3. 创建测试页面
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
现在,打开浏览器访问 http://你的服务器IP/info.php。如果看到 PHP 信息页,说明环境搭建成功!
结语:持续学习与维护
亲爱的朋友,到这里,你已经完成了一台 AlmaLinux 服务器的基础搭建、安全加固和性能优化。但这只是开始。
Linux 的世界很大,还有很多东西等你探索:
- 容器化:试试 Docker 或 Podman,它们是现代应用部署的标准。
- 监控:安装 Prometheus + Grafana,实时监控服务器健康状态。
- 备份:定期备份重要数据,永远不要相信“我不会丢数据”这句鬼话。
记住,安全是一个过程,不是一个终点。定期检查日志,更新系统补丁,关注社区动态。如果你在过程中遇到了任何报错,不要害怕,善用 journalctl -xe 查看详细日志,或者在 Stack Overflow 上搜索,那里有成千上万的前辈为你铺好了路。
祝你在这台服务器上玩得开心,创造出令人惊叹的应用!如果有具体问题,随时回来问我,我一直在这里。🚀
