CentOS系统默认安装后的安全基线并不适合直接暴露在生产环境,尤其是对等保合规、金融政务或高并发业务场景。高安全级别配置的核心思路不是堆砌工具,而是从系统启动、账户权限、网络栈、审计日志到内核参数形成闭环。下面直接拆解具体配置项和操作方法,以CentOS 7/8系列为基准,部分参数兼容CentOS Stream。

1. 最小化安装与软件包裁剪

系统安装阶段就应选择Minimal Install,避免图形界面和无关服务组件。安装完成后执行包组裁剪,移除不需要的编译工具、旧版服务与调试工具:

yum remove -y gcc make perl python3-devel tcpdump wireshark
yum autoremove -y

同时锁定内核与关键基础库版本,防止误升级导致配置失效。生产环境建议关闭自动更新,改为定期人工评估后更新:

sed -i 's/^enabled=1/enabled=0/' /etc/yum/pluginconf.d/refresh-packagekit.conf
systemctl disable packagekit.service
2. 账户与口令策略强化

高安全级别要求所有账户具备唯一性、口令复杂度与定期轮换机制。编辑/etc/login.defs,将口令策略参数调整为:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_MIN_LEN    12
PASS_WARN_AGE   14

使用pam_pwquality模块强制复杂度,修改/etc/security/pwquality.conf:

minlen = 12
minclass = 3
maxrepeat = 3
maxsequence = 4
enforce_for_root

同时锁定系统默认账户,禁止非root账户使用su切换。编辑/etc/pam.d/su,取消以下行注释并添加wheel组限制:

auth required pam_wheel.so use_uid group=wheel

将需要管理权限的用户加入wheel组,其他普通用户一律禁止su。另外检查空口令账户与无主目录账户:

awk -F: '($2==""){print $1}' /etc/shadow
awk -F: '($7=="/sbin/nologin" || $7=="/bin/false"){print $1}' /etc/passwd
3. SSH安全基线配置

SSH是远程管理的入口,必须关闭不安全的认证方式。编辑/etc/ssh/sshd_config,核心参数如下:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers adminuser
Protocol 2
X11Forwarding no
AllowTcpForwarding no

重启sshd服务后,所有登录必须使用密钥认证,且仅允许指定用户。对于必须保留密码登录的场景,至少应限制来源IP并启用fail2ban。高安全级别建议直接禁用root远程登录,日常操作通过普通用户sudo执行。

4. 防火墙与网络访问控制

CentOS 7/8使用firewalld作为前端管理工具,底层基于nftables或iptables。高安全级别应默认拒绝所有入站流量,仅放行明确需要的服务端口:

systemctl enable firewalld --now
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --new-zone=admin
firewall-cmd --permanent --zone=admin --add-source=192.168.10.0/24
firewall-cmd --permanent --zone=admin --add-service=ssh
firewall-cmd --permanent --zone=admin --add-port=443/tcp
firewall-cmd --reload

同时限制ICMP响应,避免主机被扫描探测。在内核参数中关闭ICMP重定向和源路由:

echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/99-security.conf
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/99-security.conf
echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/99-security.conf
sysctl -p /etc/sysctl.d/99-security.conf
5. 内核参数加固

内核参数直接决定系统对网络攻击和资源滥用的抵抗能力。在/etc/sysctl.d/99-hardening.conf中集中配置:

# 开启TCP SYN Cookie防护
net.ipv4.tcp_syncookies = 1
# 禁止IP转发,除非作为路由器
net.ipv4.ip_forward = 0
# 忽略所有ICMP echo请求
net.ipv4.icmp_echo_ignore_all = 1
# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 记录可疑包
net.ipv4.conf.all.log_martians = 1
# 限制core dump
fs.suid_dumpable = 0
kernel.core_uses_pid = 1
# 地址空间随机化
kernel.randomize_va_space = 2
# 禁止加载新模块
kernel.modules_disabled = 1

执行sysctl -p立即生效。注意kernel.modules_disabled=1后无法加载任何内核模块,包括后续可能需要的驱动,需在确认硬件驱动全部就绪后再启用。

6. 审计与日志策略

高安全级别要求对关键文件、系统调用和用户行为进行审计。安装并配置auditd:

yum install -y audit
systemctl enable auditd --now

在/etc/audit/rules.d/audit.rules中添加重点监控规则:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /var/log/secure -p wa -k auth_log
-w /etc/sudoers -p wa -k sudoers
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_cmd

重启auditd服务加载规则。同时调整journald日志持久化与容量限制,防止日志丢失或占满磁盘:

mkdir -p /var/log/journal
sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
sed -i 's/#SystemMaxUse=/SystemMaxUse=500M/' /etc/systemd/journald.conf
systemctl restart systemd-journald
7. 文件系统与权限加固

对关键目录和文件设置不可更改属性,防止篡改。使用chattr命令:

chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
chattr +i /etc/ssh/sshd_config
chattr +i /etc/sudoers

需要修改时先chattr -i解除锁定。同时检查系统中所有SUID/SGID文件,仅保留必要项:

find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

对不需要的SUID程序移除特殊权限,例如:

chmod u-s /usr/bin/chage /usr/bin/gpasswd /usr/bin/newgrp

另外将/tmp、/var/tmp挂载为独立分区并添加noexec、nosuid、nodev选项,在/etc/fstab中配置:

tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
8. 服务与进程白名单

高安全级别应关闭所有非必要服务,仅保留业务必需的进程。查看当前启用服务:

systemctl list-unit-files --type=service | grep enabled

常见需要禁用的服务包括:

systemctl disable --now avahi-daemon cups postfix bluetooth rpcbind
systemctl disable --now chronyd

如果业务不需要邮件服务,直接卸载postfix。对于必须运行的服务,使用systemd的沙箱选项进行限制。编辑对应服务单元文件,添加:

[Service]
ProtectSystem=strict
ProtectHome=read-only
PrivateTmp=true
NoNewPrivileges=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX

这些选项可防止服务进程访问系统关键目录、提升权限或创建原始套接字。

9. 定时任务与计划任务安全

检查cron相关目录权限,确保只有root可写:

chmod 700 /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.weekly /etc/cron.monthly
chmod 600 /etc/crontab

同时限制at和cron的使用用户,创建/etc/cron.allow和/etc/at.allow白名单文件,仅包含root和必要服务账户。删除所有匿名可写的计划任务文件:

find /var/spool/cron -type f -perm -002 -exec rm -f {} \;
10. 安全基线自动化检查

完成上述配置后,建议使用OpenSCAP工具进行自动化基线扫描,验证配置是否符合安全标准:

yum install -y openscap-scanner scap-security-guide
oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_standard --results scan-results.xml --report scan-report.html /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml

根据扫描报告中的失败项逐一修复。对于CentOS 8/Stream,使用对应的ssg-centos8-ds.xml数据流文件。定期执行扫描并留存报告,作为安全审计的依据。

高安全级别配置不是一次性工作,而是需要结合业务变化持续调整。重点在于最小化攻击面、严格访问控制、完整审计追踪和内核级防护。上述配置项覆盖了从系统安装到运行时的完整链路,实际部署时应根据业务端口、用户角色和合规要求进行裁剪和补充。所有变更操作前建议在测试环境验证,避免影响业务连续性。