Rocky Linux 9/10 企业级初始化、安全加固与运维实践指南
欢迎你来读这篇博客,这篇博客主要是关于 Rocky Linux 9/10 企业级初始化、安全加固与运维实践。
它不是一份“装完系统之后复制几条命令”的简单教程,而是一份面向企业服务器交付、Java 后端部署、容器宿主机、基础安全基线、日常运维排障和 CentOS 7 迁移的系统化手册。
序言
很多 Linux 初始化教程还停留在 CentOS 7 时代:
yum和dnf混着用;- 继续编辑
/etc/sysconfig/network-scripts/ifcfg-*; - 直接关闭 SELinux;
- 直接关闭 firewalld;
- 只安装
vim、wget、net-tools; - 网络、审计、日志、安全、容器、自动更新几乎不管;
- 一台服务器“能 ping、能 ssh、能跑服务”就算交付。
这种做法在个人测试环境里可以凑合,但在企业生产环境里并不合格。真正的企业级初始化,目标不是“能跑”,而是:
- 可维护;
- 可审计;
- 可回滚;
- 可排障;
- 可迁移;
- 可安全交付;
- 半年后还能知道当初为什么这么配。
尤其是 Rocky Linux 9/10,已经不是 CentOS 7 的换皮。网络配置、包管理、安全策略、容器生态、systemd 管理方式都有明显变化。继续拿 CentOS 7 的习惯去初始化 Rocky 9/10,就像拿诺基亚教程教别人开发 iPhone App —— 不是不能学历史,但别拿它上线。
本文基于 Rocky Linux 9/10 的现代实践重新整理,重点纠正以下旧习惯:
| 旧习惯 | 新建议 |
|---|---|
yum 与 dnf 混用 |
正文统一使用 dnf,Rocky 10 注意 dnf5 |
编辑 /etc/sysconfig/network-scripts |
使用 NetworkManager / nmcli |
systemctl restart network |
使用 nmcli con reload/up 或 NetworkManager |
| 关闭 SELinux | 保持 Enforcing,学会放行和排错 |
| 关闭 firewalld | 保持开启,只开放必要端口 |
| 只用 iptables 思维 | 使用 firewalld / nftables |
| 只讲 Docker | 增加 Podman / Buildah / Skopeo / Quadlet |
| 只讲基础命令 | 增加 auditd、fail2ban、journald、tuned、dnf-automatic |
| 只讲静态 IP | 增加 Bond、VLAN、Bridge、静态路由 |
| 只讲 LVM 创建 | 增加 LVM 扩容、fstab 风险、文件系统扩容 |
本文适合以下场景:
- 云服务器初始化;
- VMware / KVM 虚拟机初始化;
- 裸金属服务器初始化;
- Java 后端应用服务器;
- Podman / Docker 容器宿主机;
- Kubernetes Node 预备环境;
- 企业内网服务器交付;
- CentOS 7 / Rocky 8 向 Rocky 9/10 迁移。
正文
第一章 Rocky Linux 简介
1.1 Rocky Linux 是什么
Rocky Linux 是一个企业级 Linux 发行版,目标是提供与 Red Hat Enterprise Linux,也就是 RHEL,兼容的社区发行版。
它常用于:
- 企业服务器;
- 数据库服务器;
- 中间件服务器;
- Java 应用服务器;
- 容器宿主机;
- 虚拟化环境;
- 内网基础设施;
- 替代 CentOS 7/8 的长期稳定发行版。
你可以简单理解为:
Rocky Linux 是企业 Linux 生态中的稳定型选手,不追求天天上新功能,而是追求长期稳定、安全维护、RHEL 生态兼容。
1.2 为什么选择 Rocky Linux
选择 Rocky Linux 的主要原因:
RHEL 生态兼容
企业软件、中间件、数据库、监控、备份、安全扫描工具,很多都围绕 RHEL 生态适配。Rocky Linux 的优势在于尽量贴近这个生态。
生命周期长
Rocky 8/9/10 都有相对长的维护周期,适合服务器长期稳定运行。
适合生产环境
相比滚动发行版,Rocky 更适合“业务服务器”,不是天天追新,而是稳。
社区活跃
Rocky Linux 社区、文档、镜像、EPEL 生态都比较完善。
迁移成本可控
从 CentOS 7/8 迁移到 Rocky Linux,思维成本比迁移到 Debian/Ubuntu 小很多。
1.3 Rocky Linux 与 CentOS / AlmaLinux 对比
| 项目 | CentOS 7 | CentOS Stream | Rocky Linux | AlmaLinux |
|---|---|---|---|---|
| 定位 | 传统 RHEL rebuild | RHEL 上游滚动预览 | RHEL 兼容重构 | RHEL 兼容重构 |
| 新项目推荐 | 不推荐 | 谨慎 | 推荐 | 推荐 |
| 稳定性 | 已经过生命周期 | 更偏前置验证 | 稳定 | 稳定 |
| 企业生态 | 老项目很多 | 与 RHEL 节奏不同 | RHEL 生态友好 | RHEL 生态友好 |
| 学习迁移成本 | 熟悉但老旧 | 中等 | 中等 | 中等 |
我的建议:
- 新生产项目:优先 Rocky Linux 9;新硬件、新容器宿主机可以评估 Rocky Linux 10。
- 老系统续命:不要继续新装 CentOS 7。
- 强稳定保守业务:Rocky 9 更稳妥。
- 想跟进新生态:Rocky 10 可以作为新平台规划。
1.4 Rocky Linux 版本生命周期
大方向:
- Rocky Linux 8:适合存量系统维护;
- Rocky Linux 9:当前生产部署的稳妥选择;
- Rocky Linux 10:面向新硬件、新容器生态、新平台建设。
新项目不要只看“哪个版本新”,还要看硬件兼容、团队运维经验、第三方软件支持情况。
1.5 Minimal 安装建议
企业服务器建议选择 Minimal 安装。
不要在生产服务器上安装完整图形桌面,原因很简单:
- 包更多,漏洞面更大;
- 服务更多,资源占用更多;
- 排障更复杂;
- 没必要。
推荐原则:
- 只安装必要组件;
- 使用普通用户登录;
- 使用 sudo 提权;
- SSH 密钥登录;
- 保留 SELinux;
- 保留 firewalld;
- 日志持久化;
- 开启审计;
- 配置监控;
- 记录交付信息。
第二章 Rocky Linux 版本选择与迁移路线
2.1 CentOS 7 到 Rocky Linux 的迁移思路
CentOS 7 到 Rocky Linux 的迁移,不建议直接照搬配置文件。更推荐:
新系统重新安装 + 配置迁移 + 数据迁移 + 验证切换。
迁移重点不是“系统能不能启动”,而是:
- 网络配置是否变更;
- 防火墙规则是否迁移;
- SELinux 上下文是否正确;
- 应用服务是否 systemd 托管;
- 用户与 sudo 权限是否一致;
- crontab / timer 是否迁移;
- 数据库与中间件版本是否兼容;
- 日志路径是否一致;
- 监控与备份是否接入;
- 回滚方案是否准备好。
2.2 CentOS 7 到 Rocky 9/10 的关键差异
| CentOS 7 习惯 | Rocky 9/10 推荐方式 |
|---|---|
yum |
dnf / Rocky 10 注意 dnf5 |
/etc/sysconfig/network-scripts |
NetworkManager / nmcli / keyfile |
systemctl restart network |
nmcli con reload、nmcli con up、NetworkManager |
iptables |
firewalld / nftables |
ntpd |
chrony |
| 关闭 SELinux | SELinux Enforcing |
| 关闭 firewalld | firewalld 开启,最小端口开放 |
| service 脚本 | systemd unit |
| Docker-only | Podman / Docker 按场景选择 |
| 手动日志清理 | journald + rsyslog + logrotate |
2.3 Rocky 8 与 Rocky 9 差异
Rocky 8 和 Rocky 9 看起来都很像 RHEL 系,但运维上有几个差异需要注意:
网络配置主线变化
Rocky 9 更强调 NetworkManager 的 keyfile 方式。老的 ifcfg 文件还可能被兼容读取,但不应该再作为新教程主线。
加密策略变化
新版本 OpenSSL、系统 crypto policy 更严格,可能影响老应用、老 TLS 协议、老 SSH 算法。
容器生态变化
Podman、cgroups v2、rootless 容器生态更成熟。
软件版本更新
Java、Python、数据库、Web 服务器版本都比 Rocky 8 更新。
2.4 Rocky Linux 10 新特性与注意事项
Rocky Linux 10 不是“Rocky 9 加个版本号”。它有一些需要提前知道的变化:
x86_64 硬件基线提升
Rocky 10 在 x86_64 上以 x86-64-v3 为基线,老 CPU 可能无法安装。上线前必须检查 CPU 兼容性。
移除 x86_64 上的 32 位兼容包
如果你有很老的 32 位依赖,不能想当然迁移。
DNF5
Rocky 10 引入下一代 DNF,部分命令行为与旧版 dnf 有差异,尤其是模块化相关能力。
Podman 5
容器运行时、cgroups、Quadlet 支持都更现代。
新硬件支持更好
对新服务器、新 CPU、新平台更友好。
我的建议:
| 场景 | 推荐版本 |
|---|---|
| 传统生产 Java 应用 | Rocky 9 |
| 新服务器、新容器平台 | Rocky 10 可评估 |
| 老硬件 | Rocky 9 或 Rocky 8 |
| 从 CentOS 7 迁移 | 优先 Rocky 9 |
| 强依赖老软件 | 先做兼容性验证 |
第三章 安装建议与系统初始化原则
3.1 安装介质选择
常见安装镜像:
- Minimal ISO;
- DVD ISO;
- Boot ISO;
- Cloud Image;
- Container Image。
企业服务器推荐:
- 虚拟机:Minimal ISO 或 Cloud Image;
- 裸金属:DVD ISO / PXE / Kickstart;
- 云服务器:云厂商官方 Rocky 镜像;
- 批量交付:Kickstart + Ansible / Terraform / Packer。
3.2 分区建议
通用建议:
| 挂载点 | 建议大小 | 说明 |
|---|---|---|
/boot |
1G | 内核与启动文件 |
/boot/efi |
600M - 1G | UEFI 启动 |
/ |
50G 起 | 系统盘 |
/var |
20G 起 | 系统日志、缓存 |
/app |
按业务 | 应用部署目录 |
/data |
按业务 | 业务数据 |
/logs |
按业务 | 应用日志 |
| swap | 按内存与业务 | 数据库/容器/K8s 需单独评估 |
我的建议:
- 小型应用服务器:
/+/data即可; - 中型生产服务器:
/、/app、/data、/logs分开; - 数据库服务器:数据盘、日志盘、备份盘分开;
- 容器宿主机:重点规划
/var/lib/containers或 Docker 数据目录。
3.3 初始化前检查
安装完成后先确认系统状态:
1 | |
检查失败服务:
1 | |
第四章 DNF 软件源配置
4.1 统一使用 dnf
Rocky Linux 8/9/10 应统一使用 dnf 作为包管理命令。虽然部分系统中 yum 仍然可用,甚至可能只是兼容入口,但教程和脚本不应该继续混用。
推荐写法:
1 | |
不推荐在同一篇脚本中这样混着写:
1 | |
统一之后有几个好处:
- 脚本更清晰;
- 版本迁移更容易;
- 方便记录
dnf history; - 更符合 Rocky 9/10 文档和习惯。
4.2 查看系统仓库
1 | |
常见仓库:
- BaseOS;
- AppStream;
- Extras;
- CRB;
- EPEL。
4.3 启用 CRB
Rocky 9+:
1 | |
Rocky 8:
1 | |
如果提示 dnf config-manager 不存在,安装插件:
1 | |
4.4 安装 EPEL
1 | |
EPEL 非常常用,但要注意:
- 生产环境不要随便启用一堆第三方仓库;
- 尽量使用 Rocky 官方仓库 + EPEL;
- Remi、ELRepo、RPM Fusion 等按需启用;
- 启用第三方仓库前要评估包覆盖风险。
4.5 国内镜像源
国内服务器可以考虑配置阿里云、清华、中科大等镜像。
以阿里云为例,思路是:
- 备份原仓库文件;
- 替换 baseurl;
- 清理缓存;
- 重建缓存;
- 更新系统。
示例:
1 | |
注意:
- 企业生产环境更推荐内部 DNF/YUM Proxy;
- 不要随便使用来历不明的镜像源;
- 切源后要做安装、更新、回滚验证。
4.6 Rocky Vault
Vault 是历史版本归档,不建议作为生产新服务器的常规源。
适合场景:
- 需要还原历史环境;
- 需要构建老版本镜像;
- 离线兼容测试。
不适合场景:
- 新生产服务器;
- 直接长期使用旧包;
- 逃避安全更新。
4.7 DNF 常用命令
1 | |
4.8 Rocky 10 与 dnf5
Rocky 10 中需要关注 dnf5 带来的变化。最明显的是模块化使用方式变化,旧的 dnf module 不应再作为 Rocky 10 教程主线。
建议:
- Rocky 9 教程使用
dnf; - Rocky 10 补充
dnf5注意事项; - 不要在 Rocky 10 上继续围绕 AppStream Module 写老教程;
- 生产升级前记录
dnf history。
4.9 dnf-automatic 自动更新
安装:
1 | |
配置:
1 | |
推荐思路:
1 | |
解释:
upgrade_type = security:只关注安全更新;apply_updates = no:不自动安装,只下载或提示;- 生产环境不建议无脑自动升级所有包。
启动 timer:
1 | |
企业建议:
- 测试环境可以自动安装安全更新;
- 生产环境建议自动下载 + 人工维护窗口安装;
- 核心数据库、核心网关不要无脑自动重启;
- 所有更新必须能追踪、能回滚、能说明原因。
第五章 基础工具安装
5.1 基础工具
Minimal 安装后很多工具没有,需要补齐:
1 | |
5.2 网络工具
1 | |
说明:
ifconfig、netstat、route来自net-tools,属于老工具,但排查时仍有价值;- 新工具推荐
ip、ss、nmcli、resolvectl; dig、host、nslookup来自bind-utils;nc在 Rocky 中通常使用nmap-ncat。
5.3 性能排查工具
1 | |
常用对应关系:
| 工具 | 用途 |
|---|---|
htop |
进程与 CPU 观察 |
iotop |
磁盘 IO 进程定位 |
iftop |
网络带宽连接观察 |
sysstat |
sar、iostat、mpstat、pidstat |
dstat |
综合资源监控 |
ncdu |
磁盘空间分析 |
lsof |
文件句柄、端口占用 |
psmisc |
pstree、killall |
perf |
CPU 性能分析 |
strace |
系统调用排查 |
5.4 开发工具
1 | |
常用于编译依赖、安装驱动、构建本地工具。
5.5 一键基础安装命令
1 | |
第六章 用户、用户组与 sudo
6.1 不建议长期使用 root
生产服务器不建议长期使用 root 直接登录。
推荐方式:
- root 只用于初始化;
- 创建普通用户;
- 普通用户使用 SSH 密钥登录;
- 需要管理时通过 sudo 提权;
- sudo 权限按职责最小化分配。
6.2 创建用户
1 | |
6.3 加入 wheel 组
1 | |
6.4 sudo 配置
编辑 sudoers 必须使用:
1 | |
推荐:
1 | |
谨慎使用:
1 | |
如果是自动化部署用户,可以限制命令范围:
1 | |
6.5 用户锁定与解锁
1 | |
6.6 查看登录记录
1 | |
第七章 SSH 安全加固
7.1 SSH 加固原则
SSH 是服务器入口,必须认真处理。
推荐原则:
- 禁止 root 远程登录;
- 使用公钥认证;
- 禁止密码登录;
- 限制认证失败次数;
- 限制登录用户;
- 限制来源 IP;
- 配合 fail2ban;
- 修改配置前保留一个已登录 session。
7.2 生成 SSH Key
客户端执行:
1 | |
上传公钥:
1 | |
或者手动写入:
1 | |
7.3 推荐 sshd_config
编辑:
1 | |
建议配置:
1 | |
配置检查:
1 | |
重载:
1 | |
如果系统不支持 reload,再使用:
1 | |
7.4 修改 SSH 端口
例如改为 2222:
1 | |
1 | |
firewalld 放行:
1 | |
SELinux 放行:
1 | |
查看:
1 | |
重载 SSH:
1 | |
7.5 防止把自己锁在门外
改 SSH 前必须记住:
- 保留当前 SSH 会话;
- 新开一个终端测试新端口;
- 确认 firewalld 已放行;
- 确认 SELinux 已放行;
- 云服务器确认有控制台入口;
- 不要一边改端口,一边禁密码,一边禁 root,一边重启防火墙。
这叫“连环自杀式加固”,很刺激,但不推荐。
第八章 Fail2ban
8.1 Fail2ban 解决什么问题
Fail2ban 可以根据日志检测暴力破解行为,并自动封禁来源 IP。常见用途:
- SSH 爆破防护;
- Nginx 登录爆破防护;
- Web 管理后台防护;
- 暴力请求限流辅助。
它不能替代 SSH 密钥认证、不能替代防火墙、不能替代安全策略,但很适合作为额外防线。
8.2 安装
1 | |
8.3 配置 sshd jail
1 | |
示例:
1 | |
启动:
1 | |
查看:
1 | |
解封:
1 | |
8.4 企业建议
- SSH 最好限制来源网段;
- Fail2ban 作为辅助,不是主防线;
- 不要把办公公网 IP 封了还没人知道;
- 重要服务器建议接入集中日志和告警。
第九章 SELinux 企业级实践
9.1 为什么不能直接关闭 SELinux
很多老教程会写:
1 | |
这在企业生产环境里不应该作为默认方案。
SELinux 是强制访问控制,不是“报错制造机”。它限制的是进程、文件、端口、上下文之间的访问关系。服务被攻陷之后,SELinux 可以降低横向破坏范围。
简单说:
防火墙管“谁能进来”,SELinux 管“进来之后能干什么”。
关闭 SELinux 的短期收益是少几个报错,长期代价是安全边界变薄。生产环境不建议为了省事永久关闭。
9.2 SELinux 三种模式
| 模式 | 说明 | 建议 |
|---|---|---|
| Enforcing | 按策略拦截违规访问 | 生产推荐 |
| Permissive | 不拦截,但记录日志 | 调试使用 |
| Disabled | 完全关闭,不记录 | 不推荐 |
查看:
1 | |
临时切换:
1 | |
永久配置:
1 | |
推荐:
1 | |
9.3 安装 SELinux 管理工具
1 | |
查找命令来源:
1 | |
9.4 文件上下文
查看:
1 | |
临时修改上下文:
1 | |
恢复默认上下文:
1 | |
更推荐持久化规则:
1 | |
9.5 端口上下文
查看 http 端口:
1 | |
允许 Nginx/Apache 使用 8080:
1 | |
修改已有端口:
1 | |
删除:
1 | |
9.6 Boolean 开关
查看:
1 | |
例如允许 httpd 访问网络:
1 | |
注意:
- 不加
-P只对当前运行态生效; - 加
-P才能持久化。
9.7 SELinux 排错流程
查看拒绝日志:
1 | |
分析原因:
1 | |
生成策略模块:
1 | |
但不要看到 audit2allow 就无脑执行。企业里要先判断:
- 是路径上下文错了?
- 是端口类型错了?
- 是 boolean 没开?
- 是应用真的越权了?
- 是不是应该改应用配置,而不是放宽 SELinux?
9.8 容器与 SELinux
Podman/Docker 挂载宿主机目录时,需要注意 SELinux label。
私有目录:
1 | |
共享目录:
1 | |
区别:
| 参数 | 含义 |
|---|---|
:Z |
给单个容器独占使用 |
:z |
多个容器共享使用 |
9.9 企业建议
- 生产环境保持 Enforcing;
- 调试可以临时 Permissive;
- 不要永久 Disabled;
- 应用目录迁移后执行
restorecon; - 自定义端口使用
semanage port; - 容器挂载目录注意
:Z/:z; - SELinux 问题先看 audit 日志,不要第一反应关掉。
第十章 Firewalld 企业级实践
10.1 为什么不能直接关闭 firewalld
老教程常见写法:
1 | |
这不应该作为企业服务器默认配置。
firewalld 是服务器的第一道网络边界。企业环境应当保留 firewalld,只开放必要端口。
简单说:
关闭 firewalld 不是初始化,是裸奔。服务器不是海边度假,没必要穿这么少。
10.2 firewalld 核心概念
| 概念 | 说明 |
|---|---|
| zone | 区域,不同网络信任级别 |
| service | 服务规则,如 ssh/http/https |
| port | 端口规则,如 8080/tcp |
| source | 来源地址 |
| rich rule | 富规则,支持更复杂条件 |
| masquerade | 地址伪装,常用于 NAT |
| runtime | 运行时配置,重载后可能丢失 |
| permanent | 永久配置,reload 后生效 |
10.3 查看状态
1 | |
10.4 开放服务
1 | |
10.5 开放端口
1 | |
删除端口:
1 | |
10.6 限制来源 IP
只允许内网访问 PostgreSQL:
1 | |
只允许运维网段访问 SSH:
1 | |
修改远程防火墙规则时一定要谨慎,避免把自己踢出去。
10.7 企业端口开放策略
| 服务 | 端口 | 暴露范围 | 建议 |
|---|---|---|---|
| SSH | 22 / 自定义 | 运维网段 | 不建议公网无限制暴露 |
| HTTP | 80 | 公网/内网 | Web 服务需要 |
| HTTPS | 443 | 公网/内网 | Web 服务推荐 |
| PostgreSQL | 5432 | 应用网段 | 禁止公网 |
| MySQL | 3306 | 应用网段 | 禁止公网 |
| Redis | 6379 | 应用网段 | 强烈禁止公网 |
| Kafka | 9092 | 应用网段 | 按集群规划 |
| Cockpit | 9090 | 运维网段 | 不建议公网 |
| Node Exporter | 9100 | 监控网段 | 不建议公网 |
| Prometheus | 9090 | 监控网段 | 不建议公网 |
10.8 firewalld 与 nftables
Rocky 9/10 应以 firewalld / nftables 为主线,不建议新教程继续围绕 iptables 展开。
理解方式:
- firewalld 是管理层;
- nftables 是底层框架;
- iptables 是老习惯,正在退出主线。
第十一章 Chrony 时间同步
11.1 为什么时间同步重要
时间不准会带来很多诡异问题:
- 日志时间对不上;
- 分布式链路追踪错乱;
- TLS 证书校验失败;
- Kerberos 认证异常;
- 数据库复制异常;
- Kafka / MQ 消费排查困难;
- 定时任务错位;
- 审计日志失去可信度。
11.2 查看时间状态
1 | |
11.3 设置时区
国内服务器通常设置:
1 | |
查看:
1 | |
11.4 配置 NTP 源
编辑:
1 | |
示例:
1 | |
重启:
1 | |
强制同步:
1 | |
11.5 企业内网 NTP
企业环境建议:
- 内网部署 NTP Server;
- 普通服务器只同步内网 NTP;
- 防火墙开放 UDP 123;
- 关键系统避免依赖公网 NTP。
服务端示例:
1 | |
放行:
1 | |
第十二章 网络配置:NetworkManager / nmcli
12.1 不再推荐 network-scripts
Rocky 9/10 不应继续把 /etc/sysconfig/network-scripts/ifcfg-* 作为主线教程。
推荐方式:
- NetworkManager;
nmcli;nmtui;- keyfile:
/etc/NetworkManager/system-connections/。
不要再写:
1 | |
12.2 查看网络状态
1 | |
12.3 配置静态 IP
假设网卡连接名为 ens160:
1 | |
查看:
1 | |
12.4 配置主机名
1 | |
建议命名规范:
1 | |
例如:
1 | |
12.5 DNS 配置
通过 nmcli 配置:
1 | |
不要长期手工修改 /etc/resolv.conf,因为它可能被 NetworkManager 覆盖。
12.6 静态路由
添加静态路由:
1 | |
查看:
1 | |
12.7 Bond 配置
Bond 常用于双网卡冗余或带宽聚合。
active-backup 示例:
1 | |
常见模式:
| 模式 | 说明 |
|---|---|
| active-backup | 主备,高可用,最常见 |
| balance-rr | 轮询,需要交换机配合 |
| 802.3ad | LACP,需要交换机支持 |
12.8 VLAN 配置
例如在 bond0 上创建 VLAN 100:
1 | |
VLAN 常用于:
- 管理网;
- 业务网;
- 存储网;
- 监控网;
- 容器网络隔离。
12.9 Bridge 配置
Bridge 常用于虚拟化、KVM、容器网络。
1 | |
12.10 企业网络规划示例
| 网络 | 网段 | 用途 |
|---|---|---|
| Management | 192.168.9.0/24 | SSH / Cockpit / 监控 |
| Business | 192.168.8.0/24 | 应用访问 |
| Storage | 192.168.7.0/24 | NFS / MinIO / 备份 |
| Container | 10.88.0.0/16 | Podman / 容器 |
第十三章 存储管理与 LVM
13.1 查看磁盘
1 | |
13.2 parted 创建 GPT 分区
1 | |
进入 parted 后:
1 | |
查看:
1 | |
13.3 创建 LVM
1 | |
查看:
1 | |
13.4 文件系统选择
| 文件系统 | 场景 |
|---|---|
| XFS | Rocky/RHEL 默认,适合大文件、大分区 |
| ext4 | 通用、简单、兼容性强 |
XFS 格式化:
1 | |
ext4 格式化:
1 | |
13.5 挂载目录
1 | |
查看:
1 | |
13.6 fstab 配置
获取 UUID:
1 | |
编辑:
1 | |
示例:
1 | |
验证:
1 | |
注意:
/etc/fstab写错可能导致系统启动异常;- 生产环境修改前先备份;
- 建议使用 UUID,不要直接使用
/dev/sdb1。
13.7 LVM 在线扩容
假设磁盘变大后,先扩展分区,再执行:
1 | |
-r 会尝试自动扩展文件系统。
13.8 XFS 手动扩容
1 | |
13.9 ext4 手动扩容
1 | |
13.10 企业建议
- 生产扩容前必须有快照或备份;
- 数据库目录、日志目录、备份目录建议独立规划;
- 不要让
/被应用日志打满; - 容器宿主机重点关注容器镜像和 overlay 存储;
- 扩容后要验证
df -h、应用写入、监控告警。
第十四章 systemd 常用管理
14.1 systemd 是什么
systemd 是现代 Linux 的系统与服务管理框架,负责:
- 服务启动;
- 服务停止;
- 开机自启;
- 日志集成;
- 依赖管理;
- 定时任务;
- 资源限制;
- 服务安全隔离。
14.2 systemctl 常用命令
1 | |
14.3 创建 Java 应用 systemd unit
创建应用用户:
1 | |
创建 unit:
1 | |
示例:
1 | |
生效:
1 | |
14.4 systemd override
不要直接改系统包自带 unit,推荐 override:
1 | |
示例:
1 | |
查看合并后配置:
1 | |
14.5 systemd timer
timer 可以替代部分 cron 场景。
查看 timer:
1 | |
适合:
- 定期清理;
- 定期备份;
- 定期巡检;
- 定期执行脚本。
14.6 systemd 安全加固
服务 unit 可以增加:
1 | |
解释:
| 参数 | 作用 |
|---|---|
NoNewPrivileges |
禁止进程获得新权限 |
PrivateTmp |
独立临时目录 |
ProtectSystem |
限制系统目录写入 |
ProtectHome |
限制访问 home |
ReadWritePaths |
指定可写路径 |
CapabilityBoundingSet |
限制 Linux capabilities |
不要一上来全部开启,应该按服务逐步验证。
第十五章 日志管理:journald / rsyslog / logrotate
15.1 Linux 日志体系
Rocky Linux 中常见日志组件:
- journald:systemd 日志;
- rsyslog:传统系统日志;
- logrotate:日志切割;
- auditd:安全审计日志;
- 应用自身日志:如 Java Logback / Log4j2。
15.2 journalctl 常用命令
1 | |
15.3 journald 持久化
默认情况下,一些系统可能只保留运行时日志。建议启用持久化:
1 | |
15.4 journald 空间限制
编辑:
1 | |
示例:
1 | |
重启:
1 | |
查看占用:
1 | |
清理:
1 | |
15.5 rsyslog 常见日志
| 文件 | 说明 |
|---|---|
/var/log/messages |
系统综合日志 |
/var/log/secure |
安全认证日志 |
/var/log/cron |
定时任务日志 |
/var/log/maillog |
邮件日志 |
/var/log/audit/audit.log |
auditd 审计日志 |
15.6 logrotate
查看配置:
1 | |
应用日志示例:
1 | |
Java 应用建议:
- 应用内部按大小和日期切割;
- logrotate 兜底;
- 日志不要无限写入
/; - 重要日志接入集中采集。
第十六章 系统监控与性能排查工具
16.1 CPU 排查
1 | |
关注:
- user CPU;
- system CPU;
- iowait;
- steal;
- load average;
- 单核打满;
- 线程数异常。
16.2 内存排查
1 | |
关注:
- available;
- swap 使用;
- cache/buffer;
- OOM 日志。
查看 OOM:
1 | |
16.3 磁盘排查
1 | |
关注:
- 磁盘使用率;
- inode;
- await;
- util;
- 大文件;
- 日志暴涨。
查看 inode:
1 | |
16.4 网络排查
1 | |
常用场景:
1 | |
16.5 进程排查
1 | |
16.6 Java 服务专项排查
1 | |
常见问题:
| 现象 | 排查方向 |
|---|---|
| CPU 飙高 | top 找线程、jstack 定位 |
| 内存上涨 | heap dump、GC 日志 |
| Full GC | GC 日志、对象分配 |
| 连接数过高 | ss、lsof、连接池 |
| 文件句柄耗尽 | lsof、limits、systemd LimitNOFILE |
| 日志打满磁盘 | logrotate、应用日志策略 |
第十七章 sysctl 内核参数优化
17.1 配置文件位置
不要直接把所有参数塞进 /etc/sysctl.conf,更推荐:
1 | |
17.2 常见网络参数
示例:
1 | |
生效:
1 | |
17.3 容器/Kubernetes 常用参数
1 | |
加载模块:
1 | |
持久化模块:
1 | |
17.4 文件句柄相关
1 | |
查看:
1 | |
17.5 不要无脑复制“万能优化参数”
sysctl 调优一定要按场景来。
| 场景 | 优化重点 |
|---|---|
| Web 网关 | 连接队列、端口范围、TIME_WAIT |
| 数据库 | 内存、IO、文件句柄 |
| 容器宿主机 | bridge、ip_forward、conntrack |
| 高吞吐网络 | buffer、队列、网卡参数 |
| 低延迟服务 | 调度、CPU、网络延迟 |
调优流程:
- 记录当前值;
- 明确瓶颈;
- 修改少量参数;
- 压测验证;
- 监控观察;
- 文档记录。
第十八章 limits.conf 与资源限制
18.1 为什么要配置 limits
高并发服务经常遇到:
- 文件句柄不足;
- 进程数不足;
- 线程数不足;
- Nginx 连接数不够;
- Java 服务打开文件太多;
- 数据库连接异常。
18.2 limits.conf 配置
推荐新建文件:
1 | |
示例:
1 | |
指定用户:
1 | |
18.3 查看当前限制
1 | |
查看进程限制:
1 | |
18.4 systemd 服务限制
注意:systemd 托管的服务不一定完全受 limits.conf 影响。应在 unit 中配置:
1 | |
生效:
1 | |
第十九章 TuneD 性能配置
19.1 TuneD 是什么
TuneD 是系统性能 profile 管理工具,可以根据场景切换系统调优策略。
常见 profile:
| Profile | 场景 |
|---|---|
| balanced | 通用平衡 |
| throughput-performance | 高吞吐服务器 |
| latency-performance | 低延迟服务 |
| virtual-guest | 虚拟机 Guest |
| virtual-host | 虚拟化宿主机 |
| powersave | 节能 |
19.2 安装与启动
1 | |
查看:
1 | |
切换:
1 | |
19.3 企业建议
| 服务器类型 | 推荐 profile |
|---|---|
| 普通应用服务器 | balanced |
| 高吞吐 API 网关 | throughput-performance |
| 低延迟交易/网关 | latency-performance |
| 虚拟机 | virtual-guest |
| KVM 宿主机 | virtual-host |
不要为了“性能”无脑切 latency-performance。调优不是玄学开光,得看指标。
第二十章 auditd 审计
20.1 auditd 解决什么问题
auditd 用于记录安全相关事件,例如:
- 用户登录;
- sudo 使用;
- SSH 配置修改;
/etc/passwd修改;/etc/shadow修改;- 审计规则变更;
- SELinux AVC 拒绝;
- 关键文件访问。
它不是直接防护工具,但它能告诉你“谁在什么时候干了什么”。
20.2 安装与启动
1 | |
查看:
1 | |
20.3 常用命令
1 | |
20.4 持久化审计规则
编辑:
1 | |
示例:
1 | |
加载:
1 | |
20.5 企业建议
- 审计账号变更;
- 审计 sudoers 变更;
- 审计 SSH 配置变更;
- 审计安全配置目录;
- 审计日志接入集中日志平台;
- 不要让 audit 日志打满根分区。
第二十一章 安全加固总章
21.1 基础安全原则
企业服务器安全基线可以概括为:
- 最小化安装;
- 最小化开放端口;
- 最小化用户权限;
- 最小化服务自启动;
- 保留 SELinux;
- 保留 firewalld;
- 开启 auditd;
- 配置 fail2ban;
- 配置日志持久化;
- 配置安全更新策略;
- 定期巡检;
- 有备份和回滚。
21.2 密码策略
查看 authselect:
1 | |
密码复杂度通常通过 PAM 相关模块配置。企业环境建议结合:
- 密码长度;
- 复杂度;
- 历史密码;
- 登录失败锁定;
- 账号过期;
- MFA / 堡垒机。
21.3 umask
查看:
1 | |
常见建议:
1 | |
但不要无脑改全局,避免影响应用写文件权限。
21.4 Shell history 安全
可以增加时间戳:
1 | |
注意:history 不是审计系统,用户可以清理;真正审计要靠 auditd、堡垒机、集中日志。
21.5 检查开放端口
1 | |
21.6 检查自启动服务
1 | |
21.7 检查 SUID 文件
1 | |
21.8 OpenSCAP / Lynis / CIS Benchmark
建议企业环境引入:
- OpenSCAP;
- Lynis;
- CIS Benchmark;
- 内部安全基线扫描;
- 云安全中心 / 主机安全 Agent。
不要把 Checklist 当摆设。Checklist 的价值不是写出来,而是每台服务器交付时真的打勾。
第二十二章 Cockpit Web Console
22.1 Cockpit 是什么
Cockpit 是 Linux Web 管理控制台,可以通过浏览器管理:
- 系统状态;
- 服务;
- 日志;
- 存储;
- 网络;
- 防火墙;
- 软件更新;
- 虚拟机;
- 容器部分能力。
22.2 安装与启动
1 | |
查看:
1 | |
22.3 防火墙放行
1 | |
访问:
1 | |
22.4 企业建议
- Cockpit 不建议暴露公网;
- 只允许运维网段访问;
- 配合 HTTPS;
- 配合堡垒机或 VPN;
- 配合 auditd;
- 不要把 Cockpit 当成替代自动化运维的平台。
限制来源示例:
1 | |
第二十三章 容器环境:Podman / Docker / Buildah
23.1 为什么 Rocky Linux 要关注 Podman
在 RHEL/Rocky 生态里,Podman 是非常重要的容器工具。它的特点:
- 无中心 daemon;
- Rootless 支持好;
- 与 SELinux 配合自然;
- 与 systemd 集成好;
- 支持 Quadlet;
- 搭配 Buildah、Skopeo 构成完整容器工具链。
23.2 Podman 与 Docker 对比
| 项目 | Podman | Docker |
|---|---|---|
| Daemon | 无中心 daemon | Docker daemon |
| Rootless | 原生支持较好 | 支持但复杂一些 |
| systemd 集成 | Quadlet 很自然 | 需要额外 unit 或 Compose |
| Compose 生态 | 相对弱一些 | 更成熟 |
| RHEL/Rocky 原生生态 | 更推荐 | 常见但非默认主线 |
| 团队接受度 | 需要学习 | 更普及 |
我的建议:
- 新 Rocky 原生环境:优先学 Podman;
- 团队已有 Docker / Compose / CI/CD:可以继续 Docker;
- 企业内网服务器:Podman rootless 很值得考虑;
- K8s 节点:按集群运行时规划,不要单独乱装 Docker。
23.3 安装 Podman / Buildah / Skopeo
1 | |
常用命令:
1 | |
23.4 Rootless Podman
普通用户运行容器:
1 | |
检查 subuid/subgid:
1 | |
开启用户 linger:
1 | |
23.5 Quadlet
Quadlet 允许用 systemd 风格管理 Podman 容器。
用户级目录:
1 | |
示例:
1 | |
启用:
1 | |
23.6 SELinux 与容器挂载
1 | |
23.7 Docker 安装是否需要
如果团队已有 Docker 标准,可以安装 Docker。但在 Rocky 文章里,不建议只讲 Docker。
Docker 更适合:
- 团队已标准化 Docker Compose;
- CI/CD 强依赖 Docker;
- 开发环境统一 Docker Desktop;
- 生态插件依赖 Docker。
Podman 更适合:
- Rocky/RHEL 原生服务器;
- Rootless 容器;
- systemd 托管容器;
- SELinux 友好环境。
第二十四章 Java 后端服务器推荐配置
24.1 JDK 安装选择
常见选择:
- OpenJDK;
- Eclipse Temurin;
- Oracle JDK;
- GraalVM。
Rocky 官方仓库可能提供 OpenJDK:
1 | |
查看:
1 | |
24.2 应用目录规划
推荐:
1 | |
示例:
1 | |
24.3 Java systemd unit
1 | |
24.4 Java 日志建议
- 应用日志写
/logs/<app>; - GC 日志单独目录;
- 日志按天和大小切割;
- 保留周期明确;
- 接入 ELK / Loki / OpenSearch;
- 日志中必须有 traceId。
24.5 Java 排查命令
1 | |
文件句柄:
1 | |
端口:
1 | |
第二十五章 Kubernetes / 容器宿主机预留配置
25.1 内核模块
1 | |
25.2 sysctl
1 | |
25.3 swap
Kubernetes 节点通常需要按版本和 kubelet 配置处理 swap。很多环境会关闭 swap:
1 | |
编辑 /etc/fstab 注释 swap 项。
注意:
- 不同 Kubernetes 版本对 swap 支持不同;
- 生产环境按集群规范执行;
- 不要只复制旧教程。
25.4 firewalld 与 Kubernetes
不建议一句话“关闭 firewalld”。
应该:
- 根据 CNI 插件确定规则;
- 明确控制平面端口;
- 明确节点端口;
- 明确监控端口;
- 明确 Pod/Service CIDR;
- 写入交付文档。
第二十六章 常用运维命令速查
26.1 系统信息
1 | |
26.2 包管理
1 | |
26.3 网络
1 | |
26.4 服务
1 | |
26.5 日志
1 | |
26.6 磁盘
1 | |
26.7 安全
1 | |
第二十七章 CentOS 7 迁移避坑清单
27.1 不要照搬的旧配置
不要把这些作为 Rocky 9/10 新服务器主线:
1 | |
27.2 应替换为
| 旧方式 | 新方式 |
|---|---|
| yum | dnf |
| network-scripts | NetworkManager / nmcli |
| restart network | nmcli con reload/up |
| iptables | firewalld / nftables |
| ntp | chrony |
| service | systemctl |
| 关闭 SELinux | 配置 SELinux |
| 关闭 firewalld | 配置 firewalld |
| cron-only | systemd timer 可选 |
27.3 迁移流程建议
- 资产盘点;
- 配置盘点;
- 应用依赖盘点;
- 数据备份;
- 新系统安装;
- 基础初始化;
- 安全加固;
- 应用部署;
- 数据迁移;
- 联调测试;
- 灰度切流;
- 观察与回滚准备;
- 下线旧服务器。
第二十八章 企业初始化 Checklist
28.1 基础初始化
- 确认系统版本;
- 配置主机名;
- 配置时区;
- 配置 chrony;
- 配置 DNF 源;
- 启用 CRB;
- 安装 EPEL;
- 安装基础工具;
- 创建普通用户;
- 配置 sudo。
28.2 网络初始化
- 配置静态 IP;
- 配置 DNS;
- 配置默认路由;
- 配置静态路由;
- 检查 NetworkManager;
- 检查 firewalld zone;
- 如有需要配置 Bond;
- 如有需要配置 VLAN;
- 如有需要配置 Bridge。
28.3 安全初始化
- 禁止 root SSH;
- 配置密钥登录;
- 禁止空密码;
- 配置 SSH 登录限制;
- 开启 SELinux Enforcing;
- 开启 firewalld;
- 配置 fail2ban;
- 配置 auditd;
- 配置密码策略;
- 配置 sudo 权限;
- 检查开放端口;
- 检查自启动服务。
28.4 运维初始化
- journald 持久化;
- 配置 logrotate;
- 配置 dnf-automatic 策略;
- 配置 tuned;
- 配置 sysctl;
- 配置 limits;
- 配置监控 agent;
- 配置备份策略;
- 记录交付文档。
第二十九章 企业服务器交付 Checklist
29.1 基础交付信息
- 主机名;
- IP 地址;
- 系统版本;
- 内核版本;
- CPU / 内存 / 磁盘;
- 挂载点;
- 业务用途;
- 负责人;
- 监控状态;
- 备份状态。
29.2 安全交付信息
- SSH 仅允许指定用户;
- SSH 仅允许指定来源;
- SELinux 状态;
- firewalld 规则;
- fail2ban 状态;
- auditd 状态;
- sudoers 记录;
- 开放端口清单;
- 自启动服务清单。
29.3 应用交付信息
- 应用目录;
- 日志目录;
- systemd unit;
- 环境变量;
- 启停命令;
- 回滚方式;
- 健康检查;
- 监控指标。
第三十章 企业安全 Checklist
30.1 账号安全
- root 不能远程登录;
- 密码复杂度开启;
- 失败登录锁定;
- sudo 最小权限;
- 离职账号清理;
- 自动化账号权限受控。
30.2 网络安全
- firewalld 开启;
- 最小端口开放;
- 数据库不暴露公网;
- Redis 不暴露公网;
- Cockpit 不暴露公网;
- 运维入口限制来源;
- 公网入口有 WAF / LB / 安全组。
30.3 系统安全
- SELinux Enforcing;
- auditd 开启;
- 自动安全更新策略;
- 禁止无用服务;
- 检查 SUID 文件;
- 检查空密码用户;
- 检查过期账号;
- 检查异常登录。
30.4 日志与审计
- journald 持久化;
- rsyslog 正常;
-
/var/log/secure可查; - audit 日志可查;
- 日志切割正常;
- 日志集中采集;
- 关键操作可追踪。
第三十一章 常见问题 FAQ
Q1:Rocky Linux 9/10 还能用 yum 吗?
可能还能用兼容命令,但新脚本和新教程建议统一写 dnf。不要在同一套初始化脚本里 yum、dnf 混着来。
Q2:为什么不建议关闭 SELinux?
因为 SELinux 是强制访问控制,能限制服务被攻陷后的破坏范围。生产环境应该学会配置和排查,而不是直接关掉。
Q3:为什么不建议关闭 firewalld?
因为服务器应该最小端口开放。关闭防火墙会让暴露面变大,尤其是数据库、Redis、监控端口,一旦暴露公网,后果很刺激,刺激到你可能不想体验第二次。
Q4:为什么不推荐 /etc/sysconfig/network-scripts?
Rocky 9/10 的网络管理主线是 NetworkManager / nmcli / keyfile。老 ifcfg 方式可能还兼容,但不应作为新教程主线。
Q5:Podman 能完全替代 Docker 吗?
大部分单机容器运行场景可以。Docker 的优势是生态普及、Compose 成熟。Podman 的优势是 rootless、systemd、SELinux、RHEL/Rocky 原生生态。企业中应按团队标准选择。
Q6:Cockpit 能不能暴露公网?
不建议。Cockpit 应限制在运维网段,或者通过 VPN / 堡垒机访问。
Q7:dnf-automatic 要不要自动安装更新?
测试环境可以。生产环境建议至少先自动下载或提醒,安装要走维护窗口。核心业务服务器不要无脑自动更新后半夜重启。
Q8:sysctl 参数能不能复制网上的万能优化?
不建议。调优必须基于业务场景、瓶颈指标和压测结果。没有指标的调优,就是给服务器算命。
参考资料
- Rocky Linux Documentation:https://docs.rockylinux.org/
- Rocky Linux Release Notes:https://docs.rockylinux.org/10/release_notes/
- Rocky Linux 10 Release Notes:https://docs.rockylinux.org/10/release_notes/10_0/
- Rocky Linux DNF Package Manager:https://docs.rockylinux.org/10/guides/package_management/dnf_package_manager/
- Rocky Linux Repositories Wiki:https://wiki.rockylinux.org/rocky/repo/
- Rocky Linux SELinux Security:https://docs.rockylinux.org/10/guides/security/learning_selinux/
- Rocky Linux firewalld for Beginners:https://docs.rockylinux.org/10/guides/security/firewalld-beginners/
- Rocky Linux chrony:https://docs.rockylinux.org/10/guides/automation/configuring_chrony/
- Rocky Linux dnf-automatic:https://docs.rockylinux.org/10/guides/security/dnf_automatic/
- Rocky Linux systemd:https://docs.rockylinux.org/10/books/admin_guide/16-about-sytemd/
- Rocky Linux Log Management:https://docs.rockylinux.org/9/books/admin_guide/17-log/
- Red Hat RHEL 9 NetworkManager keyfile:https://www.redhat.com/en/blog/rhel-9-networking-say-goodbye-ifcfg-files-and-hello-keyfiles
- Red Hat Audit Documentation:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/security_hardening/auditing-the-system_security-hardening
- Red Hat TuneD Documentation:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/monitoring_and_managing_system_status_and_performance/optimizing-system-performance-with-tuned
- Podman Documentation:https://docs.podman.io/
- systemd Documentation:https://systemd.io/
- firewalld Documentation:https://firewalld.org/documentation/
- 博客园原始参考:https://www.cnblogs.com/liujunjun/p/17847847.html
启示录
富贵岂由人,时会高志须酬。
能成功于千载者,必以近察远。
服务器初始化的最高境界,不是命令敲得快,而是半年后还能知道当初为什么这么配。