简介:本资源是一份面向Linux系统运维工程师与CentOS/RHEL初学者的实战配置指南,聚焦最小化安装后的30项关键初始化操作,覆盖生产环境部署必备技能。文档以清晰条目形式组织,涵盖红帽订阅注册、静态IP与主机名配置、系统更新、基础工具(如links、wget、telnet)安装、Web服务(Apache+PHP+MariaDB)、安全加固(SELinux、防火墙、Rootkit Hunter、LMD)、虚拟化支持(VirtualBox)、GRUB密码保护等核心环节,兼顾功能性与安全性。资源为单个Word文档(.doc格式),文件大小3.1MB,内容完整、步骤详实,适合作为服务器初始化检查清单或自学参考手册。目前已有476人学习下载,内容源自一线实践,可直接用于RHEL 7/CentOS 7企业级服务器部署前的标准化配置。
1. 最小化安装的 RHEL/CentOS 7 不是“能用就行”,而是“默认不安全、不连通、不运维”的裸系统
刚在 VMware 或 KVM 里完成 RHEL/CentOS 7 的最小化安装(Minimal Install),敲完root密码、重启进系统,执行ip addr却看不到eth0的 IPv4 地址;ping www.baidu.com直接超时;systemctl status sshd显示 inactive;想装vim或net-tools,yum install却报错Cannot find a valid baseurl for repo: base/7/x86_64——这不是你操作失误,而是最小化安装的设计事实:它只保留内核、init 系统、基础 shell 和极简工具链,主动剥离了网络配置服务、防火墙管理、远程登录守护进程、常用诊断命令、软件源元数据甚至 man 手册。它面向的是自动化部署场景(如 Ansible + Kickstart),而非交互式运维。如果你正用它搭建测试环境、学习 Linux 系统管理、或为后续部署 Docker/Kubernetes 做准备,那么这 30 件事不是“锦上添花”,而是让系统从“开机黑屏”走向“可 SSH 连、可 yum 装、可 systemctl 管、可日志查、可安全加固”的必经路径。本文不罗列清单,而是按真实运维动线组织:先让系统活过来(联网+基础工具),再让它稳下来(安全+服务+日志),最后让它好管起来(用户+权限+监控+排错)。所有步骤均基于 RHEL 7.9 / CentOS 7.9 x86_64 官方 ISO 验证,参数精确到nmcli子命令和firewalldzone 名称。
2. 让系统活过来:网络连通、基础工具补全与软件源修复
最小化安装后最典型的“失联”症状,本质是三个独立问题叠加:网络接口未启用、关键诊断工具缺失、YUM 源配置失效。必须按顺序解决,否则后续所有操作都卡死。
2.1 启用并持久化网络连接:用 nmcli 替代 ifconfig 和 network.service
最小化安装默认禁用传统network.service,改用 NetworkManager 管理。但其默认配置不自动激活有线网卡,需手动触发:
# 查看可用连接配置(注意 NAME 列,通常是 "System eth0" 或类似) nmcli connection show # 启用名为 "System eth0" 的连接(请将 eth0 替换为你实际的接口名,如 ens33) nmcli connection up "System eth0" # 验证 IP 获取(应看到 inet 192.168.x.x/24 或 DHCP 分配地址) ip addr show eth0 | grep "inet " # 设为开机自启(关键!否则重启后又断网) nmcli connection modify "System eth0" connection.autoconnect yes提示:
nmcli connection show输出中UUID是唯一标识,若 NAME 含空格或特殊字符,建议用 UUID 替代 NAME 执行up和modify,避免 shell 解析错误。例如:nmcli connection up 5f4b3a1c-2d8e-4f1a-9b0c-1a2b3c4d5e6f。
2.2 补全基础诊断工具包:一次性安装 net-tools、vim-enhanced、wget、curl
最小化安装默认只含busybox级精简命令,ifconfig、netstat、nslookup全部缺失。vim-minimal功能残缺,无法进行高效编辑。必须安装net-tools和vim-enhanced:
# 安装核心工具包(此命令在联网且 YUM 源正常时执行) yum install -y net-tools vim-enhanced wget curl bash-completion # 验证安装效果 which ifconfig netstat nslookup vim # 应返回 /usr/sbin/ifconfig 等路径,非空注意:
net-tools包含ifconfig、netstat、route、arp;vim-enhanced提供完整 vim 功能(语法高亮、多窗口、插件支持);bash-completion启用yum install <Tab>自动补全,大幅提升效率。这些不是“可选”,而是日常排查的呼吸器。
2.3 修复 YUM 软件源:从 baseurl 失效到清华/阿里云镜像切换
Cannot find a valid baseurl for repo: base/7/x86_64错误,根源在于/etc/yum.repos.d/CentOS-Base.repo中的$releasever变量未被正确解析,或默认 mirrorlist 服务器不可达。直接切换至国内稳定镜像:
# 备份原配置 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 下载清华镜像源配置(适用于 CentOS 7) curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/cfg/centos/7/base.repo # 清理缓存并生成新元数据 yum clean all yum makecache # 验证源是否生效(应列出 base、updates、extras 等仓库,且 status 为 enabled) yum repolist逻辑说明:清华镜像站
base.repo文件已预置mirrorlist和baseurl备用方案,并针对 CentOS 7 优化 GPG key 路径。yum makecache强制下载最新repodata,解决因缓存过期导致的baseurl解析失败。若使用 RHEL,需替换为 Red Hat 官方 Subscription Manager 注册,此处以 CentOS 为通用场景。
2.4 配置 DNS 与主机名:确保域名解析与系统标识准确
网络连通后,ping baidu.com仍可能失败,常因 DNS 未配置。同时,hostname默认为localhost.localdomain,影响日志可读性与集群识别:
# 编辑网络连接,添加 DNS 服务器(以清华 DNS 为例) nmcli connection modify "System eth0" ipv4.dns "114.114.114.114 223.5.5.5" nmcli connection modify "System eth0" ipv4.ignore-auto-dns yes nmcli connection down "System eth0" && nmcli connection up "System eth0" # 设置永久主机名(替换 your-hostname 为实际名称) hostnamectl set-hostname your-hostname.example.com # 更新 /etc/hosts,防止 hostname -f 解析失败 echo "127.0.0.1 $(hostname)" >> /etc/hosts echo "::1 $(hostname)" >> /etc/hosts # 验证 DNS 解析 nslookup www.baidu.com # 验证 FQDN 解析 hostname -f参数说明:
ipv4.ignore-auto-dns yes强制忽略 DHCP 分配的 DNS,使用手动指定值;hostnamectl修改/etc/hostname并同步内核 hostname;/etc/hosts添加条目是hostname -f正常工作的前提,否则返回localhost.localdomain。
3. 让系统稳下来:SSH 加固、防火墙策略、SELinux 调优与时间同步
系统联网后,首要任务是建立安全、可控的远程访问通道,并确保底层服务策略符合生产规范。最小化安装默认关闭 SSH 服务、放行所有端口、SELinux 处于 enforcing 但无策略适配,极易成为攻击入口。
3.1 启用并加固 SSH 服务:修改端口、禁用 root 登录、启用密钥认证
最小化安装虽含openssh-server,但sshd服务默认未启动,且配置为最宽松状态:
# 启用并启动 sshd systemctl enable sshd systemctl start sshd # 备份原始配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup # 使用 sed 批量修改关键安全项(生产环境必须) sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config # 重载配置使生效 systemctl reload sshd # 验证端口监听(应显示 2222 端口) ss -tlnp | grep :2222提示:修改
Port为2222是基础防爆破手段;PermitRootLogin no强制使用普通用户再sudo;PasswordAuthentication no仅允许密钥登录,杜绝密码暴力破解。执行前务必确保本地已有可用密钥对并分发至~/.ssh/authorized_keys,否则将锁死 SSH。
3.2 配置 firewalld:从默认 public zone 到 trusted zone 的精准放行
最小化安装的firewalld默认启用publiczone,仅开放ssh(22端口),而我们已将 SSH 改为 2222,必须同步更新规则:
# 查看当前活跃 zone firewall-cmd --get-active-zones # 将 eth0 接口永久加入 trusted zone(完全信任,放行所有流量) firewall-cmd --permanent --zone=trusted --add-interface=eth0 # 重新加载防火墙(永久规则生效) firewall-cmd --reload # 验证:trusted zone 应包含 eth0,且无端口限制 firewall-cmd --zone=trusted --list-all注意:
trustedzone 适用于内网可信环境(如 VMware NAT 模式下的宿主机通信);若部署于公网,应改用publiczone 并仅开放必要端口:firewall-cmd --permanent --zone=public --add-port=2222/tcp。--permanent参数确保重启不失效,--reload是应用变更的必需步骤。
3.3 调整 SELinux 策略:在 enforcing 模式下保障服务正常运行
最小化安装默认SELinux=enforcing,但部分服务(如 httpd、vsftpd)的策略包未安装,导致服务启动失败。需安装策略并验证:
# 安装 SELinux 策略包(提供 httpd、postgresql 等服务的策略) yum install -y selinux-policy-targeted # 检查 SELinux 状态(应为 enforcing) sestatus # 若需临时调试,可设为 permissive(仅记录不阻止,生产禁用) # setenforce 0 # 查看最近 SELinux 拒绝日志(关键排错依据) ausearch -m avc -ts recent | audit2why逻辑说明:
selinux-policy-targeted是 RHEL/CentOS 7 的标准策略包,定义了 200+ 服务的安全上下文。ausearch结合audit2why可将二进制 AVC 拒绝日志转为人类可读的解释,例如 “httpd 无法绑定 80 端口,因端口类型为 http_port_t,需执行 semanage port -a -t http_port_t -p tcp 8080”。这是 SELinux 排错的核心方法。
3.4 配置 chronyd 时间同步:替代 ntpd 的现代时间服务
RHEL/CentOS 7 默认使用chronyd替代ntpd,但最小化安装未配置上游 NTP 服务器,导致系统时间漂移:
# 编辑 chronyd 配置,添加国内 NTP 服务器 cat >> /etc/chrony.conf << 'EOF' server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp3.aliyun.com iburst EOF # 重启 chronyd 并设为开机启动 systemctl enable chronyd systemctl restart chronyd # 验证同步状态(应显示 "System clock synchronized: yes") chronyc tracking chronyc sources -v参数说明:
iburst在初始同步时发送多个包加速校准;chronyc tracking显示系统时钟偏移、同步状态;chronyc sources列出所有 NTP 源及其延迟。时间不同步会导致证书失效、日志时间错乱、分布式系统故障,是基础设施的隐形地雷。
4. 让系统好管起来:用户权限体系、日志集中管理与磁盘空间预警
系统稳定运行后,运维重心转向长期可维护性:避免 root 直接操作、确保关键日志可追溯、预防磁盘写满导致服务崩溃。最小化安装未配置 sudo 权限、未启用 journald 日志转发、未设置磁盘告警。
4.1 建立标准运维用户:添加普通用户、授予 sudo 权限、禁用密码登录
禁止 root 直接 SSH 是安全基线,必须创建专用运维账户:
# 创建用户 ops(可替换为实际用户名) useradd -m -c "Operations User" ops # 为 ops 用户设置密码(仅用于首次登录,后续禁用) passwd ops # 将 ops 加入 wheel 组(sudo 权限组) usermod -aG wheel ops # 验证 sudo 权限(切换用户后执行) su - ops -c "sudo -l" # 应显示 "(ALL) ALL" # (可选)禁用 ops 密码登录,强制密钥认证 mkdir -p /home/ops/.ssh chmod 700 /home/ops/.ssh # 将公钥写入 authorized_keys(此处省略具体密钥内容) # chown -R ops:ops /home/ops/.ssh提示:
wheel组在/etc/sudoers中默认配置为%wheel ALL=(ALL) ALL,usermod -aG的-a参数确保追加而非覆盖组成员。su - ops -c "sudo -l"是验证 sudo 权限的黄金命令,避免配置后才发现无权执行。
4.2 配置 journald 日志持久化与轮转:避免重启丢失日志
journalctl默认日志存储在/run/log/journal/(内存文件系统),重启即清空。必须启用持久化存储:
# 创建持久化日志目录 mkdir -p /var/log/journal # 重新加载 systemd 配置(journald 配置位于 /etc/systemd/journald.conf) systemctl daemon-reload # 重启 journald 生效持久化 systemctl restart systemd-journald # 验证日志目录已生成(应有 16 进制命名子目录) ls /var/log/journal/ # 设置日志轮转:限制最大占用 100M,保留最近 30 天 echo "SystemMaxUse=100M" >> /etc/systemd/journald.conf echo "MaxRetentionSec=30day" >> /etc/systemd/journald.conf systemctl restart systemd-journald注意:
/var/log/journal/目录创建后,journald自动将新日志写入该路径;SystemMaxUse控制总大小,MaxRetentionSec按时间清理旧日志。这是journalctl --since "2 weeks ago"能查到历史记录的前提。
4.3 部署磁盘空间监控脚本:当 /var 或 / 分区使用率超 85% 时邮件告警
最小化安装无内置磁盘监控,df -h手动检查易遗漏。编写轻量级监控脚本:
# 创建监控脚本 cat > /usr/local/bin/disk-monitor.sh << 'EOF' #!/bin/bash THRESHOLD=85 ALERT_LOG="/var/log/disk-alert.log" EMAIL="admin@example.com" # 替换为实际邮箱 # 检查 /var 和 / 分区 for PARTITION in "/var" "/"; do USAGE=$(df "$PARTITION" | tail -1 | awk '{print $5}' | sed 's/%//') if [ "$USAGE" -gt "$THRESHOLD" ]; then echo "$(date): WARNING: $PARTITION usage is ${USAGE}%!" >> "$ALERT_LOG" # 发送邮件(需配置 mailx 或 sendmail) echo "$PARTITION usage is ${USAGE}% at $(date)" | mail -s "Disk Alert on $(hostname)" "$EMAIL" fi done EOF # 设置执行权限 chmod +x /usr/local/bin/disk-monitor.sh # 添加 cron 任务,每 30 分钟检查一次 (crontab -l 2>/dev/null; echo "*/30 * * * * /usr/local/bin/disk-monitor.sh") | crontab -逻辑说明:脚本提取
df输出的第五列(使用率百分比),去除%符号后数值比较;mailx包(yum install -y mailx),若需 SMTP 认证,需配置/etc/mail.rc。crontab -l读取现有任务,echo追加新行,避免覆盖原有定时任务。
5. 关键排错与进阶技巧:快速定位 baseurl 失效、SSH 连接拒绝、firewalld 规则冲突
当上述步骤执行失败,常见于三类高频场景:YUM 源配置错误、SSH 服务异常、防火墙拦截。掌握以下技巧,5 分钟内定位根因。
5.1 诊断 baseurl 失效:从 DNS 到 repo 文件的四层检查法
yum makecache失败时,按顺序执行以下命令,逐层排除:
# 第一层:DNS 解析(ping mirrorlist 地址) ping -c 3 mirrors.tuna.tsinghua.edu.cn # 第二层:HTTP 连通性(curl 测试 repo 文件可访问) curl -I https://mirrors.tuna.tsinghua.edu.cn/repo/cfg/centos/7/base.repo # 第三层:repo 文件语法(检查 baseurl 是否含 $releasever 且未被注释) grep -E "^(baseurl|mirrorlist)" /etc/yum.repos.d/CentOS-Base.repo # 第四层:GPG key 验证(检查 keyurl 是否有效) rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n' | grep centos技巧:若
curl -I返回 404,说明镜像站路径变更,需更新 repo 文件;若grep显示baseurl行被#注释,则需取消注释;若rpm -q无输出,需手动导入 GPG key:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7。
5.2 排查 SSH 连接拒绝:从服务状态到 SELinux 上下文的链路分析
客户端ssh -p 2222 ops@ip报Connection refused,按此顺序检查:
# 检查 sshd 进程与端口监听 systemctl status sshd ss -tlnp | grep :2222 # 检查 SELinux 是否阻止绑定端口 ausearch -m avc -ts recent | grep sshd | audit2why # 检查 sshd_config 语法(避免配置错误导致服务退出) sshd -t # 检查防火墙是否放行 2222 端口(即使用了 trusted zone,也需确认) firewall-cmd --list-ports注意:
sshd -t是验证配置文件语法的唯一可靠方法,返回空表示正确;ausearch输出若含bind拒绝,需执行semanage port -a -t ssh_port_t -p tcp 2222授权新端口。
5.3 解决 firewalld 规则冲突:当 multiple zones 同时匹配时的优先级规则
若将同一接口加入public和trustedzone,firewall-cmd --get-active-zones显示两者,但实际生效的是trusted(zone 优先级:trusted>home>public>drop)。验证方法:
# 查看接口实际应用的 zone(最高优先级者胜出) firewall-cmd --get-zone-of-interface=eth0 # 强制将 eth0 从 public 移除(避免冗余) firewall-cmd --permanent --zone=public --remove-interface=eth0 # 重新加载 firewall-cmd --reload技巧:
firewall-cmd --get-zone-of-interface直接返回接口归属的 zone,是判断实际策略的金标准;--remove-interface必须指定 zone,否则报错。
5.4 一个实用技巧:用 journalctl 实时追踪服务启动全过程
当systemctl start httpd失败,不要只看systemctl status httpd,用journalctl追踪完整启动链:
# 实时跟踪 httpd 启动日志(Ctrl+C 退出) journalctl -u httpd -f # 查看 httpd 启动的完整历史(含依赖服务如 network、dbus) journalctl -u httpd --since "2024-01-01" --no-pager | less # 过滤 ERROR 级别日志(快速定位失败点) journalctl -u httpd | grep -i "error\|fail\|denied"参数说明:
-f类似tail -f,实时输出;--since指定时间范围;--no-pager避免进入 less 分页;grep -i不区分大小写搜索关键词。这是比systemctl status更深入的服务排错入口。
本文还有配套的精品资源,点击获取