07、CentOS操作系统安全加固

CentOS 7/RHEL 7 操作系统安全加固图解速查:login.defs 口令有效期(PASS_MAX_DAYS 90)与 chage 存量账户生效、usermod -s /sbin/nologin 停用无用账户、pam_pwquality 口令复杂度(enforce_for_root minlen ucredit/lcredit/dcredit/ocredit)、pam_tally2 登录失败锁定(deny=5 unlock_time=600 even_deny_root)、/etc/profile TMOUT 会话超时、passwd 口令修改、sshd_config PermitRootLogin no、auditd.conf max_log_file 与 logrotate rotate 25 日志留存 6 个月、rsyslog 转发至日志审计设备、hosts.allow/hosts.deny 终端地址限制,每项配截图对照。

定位:图解速查——每个配置项一图对照,方便现场快速比对。截图均已配齐文字命令,正文可独立执行。 控制点完整版(含恶意代码防范、备份恢复等)见 11、Linux操作系统加固手册。 适用版本:CentOS 7 / RHEL 7。 版本适用性:pam_tally2 写法适用于 CentOS 5~7;RHEL 8+/CentOS Stream/麒麟 V10 改用 pam_faillock,对照见 11、Linux操作系统加固手册13、麒麟操作系统加固

使用说明:

  • 本文为加固操作手册:所有命令都会修改配置,可能中断服务、断开当前会话或需要重启。实施前必须完成变更审批、确认业务窗口、备份原配置(设备 savecopy running-configbackup startup-configuration,主机备份 /etc、注册表与关键业务数据),并准备可执行的回滚预案
  • 先在测试环境或单台设备灰度验证,确认无业务影响后再批量推广;每完成一项立即用文中「验证」命令核验生效——配置已下发不等于策略已生效(如 H3C 未 password-control enable、Linux 未对存量账户 chage、Windows 未 gpupdate /force)。
  • 示例中的地址、账户名、口令、路径均为演示值(如 PleaseChange@123192.168.10.20admin123),现场须替换为符合本单位口令策略与网络规划的真实值,严禁直接沿用文中示例口令;对外发布或归档时须对个人信息与内网管理地址脱敏。
  • 命令不存在、视图名或参数与本文不一致时,先用 display version / show version / winver 确认版本与部署形态,再查阅对应版本官方文档换用等效命令;版本差异不得直接作为「无法整改」的结论,须给出替代措施并评估其实际效果。
  • 涉及账户、锁定、超时、防火墙与端口收敛的变更存在锁死自身风险:务必保留一条已验证的恢复通道(Console 口、带外管理口、堡垒机会话或另一管理员账户)后再实施。
  • 加固完成后按「16、安全评估加固记录表3.0」逐项留痕(整改前后回显、操作人、时间、验证结论、回退情况),并纳入复测;测评判定口径以 GB/T 28448-2019 与《高风险判定指引》为准,本文的「加固要点」不构成最终测评结论。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点,并写明判定依据与承载该能力的上位组件。
  • 依据 GB/T 28448-2019「按测评对象实际承载功能与数据处理范围判定」原则:控制能力由统一认证平台、堡垒机、日志审计系统、终端管理系统、虚拟化平台或云托管平台承载时,应注明测评单元边界后判定不适用或转由上位组件核查,不得机械按缺失判不符合。
  • 产品版本确实不提供该能力(如老旧设备无 SNMPv3、无可信根、社区版无审计模块、已停止官方支持的操作系统)时,须核查替代措施并按替代措施的实际效果定档,不得直接判不适用;已停止支持的版本应同时提出升级或补偿控制建议。

一、口令有效期

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)(身份鉴别信息具有复杂度要求并定期更换)

加固要点:按「复杂度 + 长度 + 老化 + 历史」四要素同时配置:最小长度不低于 8 位(管理账户与三级系统建议 12~16 位)、至少包含大写字母/小写字母/数字/特殊字符中三类、老化时间不超过 90 天、历史口令防重复不少于 5 次;配置后须对存量账户逐个下发生效(Linux chage -M 90 用户名、设备侧用户组或本地用户粒度策略),仅改全局模板不追溯存量账户是现场最高频的整改回退点。三级系统另需核查最高权限账户是否同受复杂度与老化约束(enforce_for_rootpassword policy administrator)。

验证方法:策略配置回显(设备 display password-control / display current-configuration | include password;Linux grep -E "^PASS_" /etc/login.defsgrep pwquality /etc/pam.d/system-auth*;Windows secedit /exportnet accounts)+ 存量账户抽查(chage -l 用户名、设备 display local-user)+ 一次弱口令修改实测记录,证明策略真的拦截而非仅配置存在。

编辑 /etc/login.defs

PASS_MAX_DAYS   90    # 口令最长有效期 90 天
PASS_MIN_DAYS   5     # 两次修改最小间隔
PASS_MIN_LEN    8     # 最小长度 8 位
PASS_WARN_AGE   7     # 过期前 7 天提示

存量账户需逐个生效并核查:chage -l 用户名chage -M 90 用户名

二、账户禁用(无用账户 nologin)

对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~g)

加固要点:账户与权限一一对应、默认与多余账户已删除或停用、无共享账户、系统/安全/审计三类管理职责分离、关键文件与目录权限最小化、启用了强制访问控制(SELinux/AppArmor/Windows 完整性级别与 SACL)并达到用户级与文件级粒度 → 符合;有权限划分但存在越权账户、粒度不足或强制访问控制未启用 → 部分符合;统一使用超级账户运维、关键配置文件任意用户可写 → 不符合。

验证方法:账户与组清单、权限查询输出(ls -l/icacls/getfacl)、默认账户处置记录、强制访问控制状态与策略输出、访问控制策略文档与授权审批记录、安全标记配置截图。

usermod -s /sbin/nologin 用户名        # 禁止登录
grep nologin /etc/passwd              # 核查:无用账户 shell 应为 nologin

passwd 中无用账户改为 nologin 截图

三、口令复杂度

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)(身份鉴别信息具有复杂度要求并定期更换)

编辑 /etc/pam.d/system-auth,在 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= 行尾追加:

enforce_for_root minlen=8 ucredit=-1 lcredit=-1 ocredit=-1 dcredit=-1
  • 预期现象:设置弱口令时被拒绝;root 修改口令同样受复杂度约束(enforce_for_root)。

pam_pwquality 口令复杂度配置截图

四、登录失败处理

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 b)(提供登录失败处理功能,限制非法登录次数)

加固要点:配置并启用「连续失败 N 次锁定 M 分钟」,N 建议 35 次、M 建议 1030 分钟,且必须覆盖最高权限账户(root / Administrator / super / privilege 15);同时保留紧急恢复通道(Console 口本地登录或带外管理口),避免锁定策略把运维人员一并锁在门外。Linux 按版本选择 pam_tally2(CentOS/RHEL 7 及更早)或 pam_faillock(RHEL 8+/麒麟 V10/openEuler),两套机制不可混配;Windows 须同时设置「账户锁定阈值」「锁定时间」「重置计数器」三项,仅设阈值不设计时器不生效。

验证方法:配置回显(grep -E "tally2|faillock" /etc/pam.d/*display current-configuration | include wrong-passwordsecpol.msc 账户锁定策略截图)+ 一次真实失败登录实测:连续输错至阈值后确认账户被锁定、锁定计时生效、pam_tally2 -u / faillock --user / display password-control blacklist 能查到计数,并验证解锁命令可用;实测记录须含时间、操作人与被锁账户。

/etc/pam.d/system-auth/etc/pam.d/login/etc/pam.d/sshd 三个文件中分别添加:

auth        required      pam_tally2.so deny=5 unlock_time=600 even_deny_root root_unlock_time=600
  • 预期现象:连续失败 5 次锁定 10 分钟(含 root);pam_tally2 -u 用户名 查看计数,pam_tally2 -u 用户名 --reset 手工解锁。

system-auth 登录失败锁定截图

login 与 sshd 同步配置截图

sshd 登录失败锁定截图

五、登录连接超时

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 b)(配置并启用结束会话、登录连接超时自动退出)

加固要点:所有管理入口(Console、VTY、SSH、RDP、Web 管理台、数据库会话)统一配置空闲超时,建议 5~10 分钟自动断开,超时值不得设为 0 或 never。Linux 用 TMOUT 写入 /etc/profile(并防止被普通用户覆盖,必要时 readonly TMOUT 或在 sshd_config 配 ClientAliveInterval/ClientAliveCountMax);Windows 用「屏幕保护程序 + 恢复时显示登录屏幕」或组策略「交互式登录空闲时间限制」,服务器另需设置 RDP 会话的空闲与断开时限;设备侧用 exec-timeout/idle-timeout,Console 与 VTY 线路须分别配置。

验证方法:配置回显(grep -rn TMOUT /etc/profile /etc/profile.d/sshd -T | grep -Ei "clientalive"show running-config | section line vtydisplay current-configuration configuration user-interface、组策略或注册表 ScreenSaveTimeOut 截图)+ 实测:登录后静置至阈值确认会话被自动断开且需重新鉴别;核查普通用户能否 unset TMOUT 绕过。

编辑 /etc/profile 末尾追加:

export TMOUT=600      # 空闲 600 秒自动退出

source /etc/profile 后新会话生效。

TMOUT 会话超时配置截图

六、口令修改操作

passwd root           # 修改 root 口令
passwd 普通用户名      # 修改普通用户口令

修改 root 口令截图

新建用户与修改普通用户口令截图

七、禁止 root 远程登录

对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~g)

/etc/ssh/sshd_config 中找到 #PermitRootLogin yes,去掉注释并改为:

PermitRootLogin no
sshd -t && systemctl restart sshd

sshd_config 配置文件截图

禁止 root 远程登录配置截图

八、日志容量与留存

对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)

加固要点:审计功能已启用且覆盖每个用户与重要安全事件(登录注销、权限变更、审计策略变更、系统异常)、记录含日期时间/用户/事件类型/成败四要素、审计记录受保护并定期备份、留存不少于 6 个月、审计进程受保护且非审计管理员不可中断 → 符合;开关已开但子类别不全、留存不足、仅本地存储无外发 → 部分符合;审计完全未启用且无日志审计系统或堡垒机替代 → 不符合(高风险)。

验证方法:审计策略配置与生效截图(auditd 规则 / auditpol / 高级审核策略)、审计记录抽样(脱敏)、日志存放路径与权限、日志外发到 syslog/日志审计系统/SOC 的配置与收端截图、最早记录时间清单、清理与转存任务配置。

  1. 设置 audit 日志最大容量(MB),编辑 /etc/audit/auditd.conf
max_log_file = 300
  1. 设置日志轮转留存周期,编辑 /etc/logrotate.conf
weekly
rotate 25        # 每周轮转一次保留 25 份 ≈ 6 个月,满足《网络安全法》第 21 条

auditd 日志容量设置截图

logrotate 轮转配置截图

logrotate 保留份数截图

九、日志发送至日志审计设备

对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)

编辑 /etc/rsyslog.conf,将 #*.* @@remote-host:514 改为:

*.* @@192.168.10.20:514      # @@ 为 TCP 传输;@ 为 UDP 传输
systemctl restart rsyslog

rsyslog 日志转发配置截图

十、终端地址限制

对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)~f)

加固要点:遵循最小安装、非必要服务与默认共享已关闭、高危端口未对外开放、管理终端来源受限(防火墙规则/跳板机/堡垒机)、具备数据有效性检验、能发现已知漏洞并及时修补、重要节点部署入侵检测并可出示针对本主机的告警 → 符合;部分措施到位(如有主机防火墙但未限制管理来源、有漏扫无修补闭环)→ 部分符合;管理端口对全网开放、存在已知高危漏洞未修补、无任何入侵检测措施 → 不符合(高风险)。

验证方法:已安装组件/角色清单、服务与监听端口输出、主机防火墙规则与拒绝实测、管理来源限制配置截图、补丁与漏洞修补记录、漏扫报告与整改工单、HIDS/EDR/NDR 部署与本主机告警截图。

编辑 /etc/hosts.allow/etc/hosts.deny(TCP Wrappers,先查 deny 再查 allow,allow 可越过 deny):

# /etc/hosts.allow
sshd:192.168.10.0/255.255.255.0:allow

# /etc/hosts.deny
sshd:all:deny

常见写法:

# 限制所有 ssh,仅允许 218.64.87.0/25
hosts.deny:  sshd:ALL
hosts.allow: sshd:218.64.87.0/255.255.255.128

# 限制所有 TCP 服务
hosts.deny:  ALL:ALL
hosts.allow: ALL:218.64.87.0/255.255.255.128

地址写法支持三种:网络地址/子网掩码(218.64.87.0/255.255.255.0)、前缀(218.64.87.0/24)、或 218.64. 打头的形式。

hosts.allow 终端地址限制截图

参考依据

  • GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(8.1.4.1 身份鉴别、8.1.4.2 访问控制、8.1.4.3 安全审计、8.1.4.4 入侵防范(高频整改项速查)):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
  • GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(测评对象边界认定、单元测评实施与结果判定:符合/部分符合/不符合/不适用):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
  • GB/T 22240-2020《信息安全技术 网络安全等级保护定级指南》、GB/T 25070-2019《安全设计技术要求》、GB/T 28449-2018《测评过程指南》,可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
  • Red Hat Enterprise Linux 官方文档入口(Security Hardening / PAM / SELinux):https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/
  • Linux man-pages(man7.org,rpm/yum/pam/sshd/auditctl 手册页):https://man7.org/linux/man-pages/
  • 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准)——高风险情形判定口径,站内对照表:22、高风险判定指引与加固对照表
  • 命令核验说明:CentOS 7 / RHEL 7 命令以 man7.org 手册页与 Red Hat 官方文档核验(核验日期 2026-09-02)。五处须留意:① pam_tally2 在 RHEL 8+/CentOS Stream/麒麟 V10 已被移除,须改用 pam_faillock/etc/security/faillock.conf),本篇写法仅适用于 CentOS 5~7;② pam_pwqualityucredit/lcredit/dcredit/ocredit负数表示该类字符的最少个数、取正数表示计分权重,符号写反会导致策略与预期不符,配置后须以一次弱口令修改实测验证;③ /etc/profile 中的 TMOUT 可被用户 unset TMOUT 或在 ~/.bashrc 覆盖,须配合 readonly TMOUT 或 sshd_config 的 ClientAliveInterval/ClientAliveCountMax;④ /etc/hosts.allow/etc/hosts.deny(TCP Wrappers)在 RHEL 8+ 已失效(openssh 移除 libwrap 支持),须改用 firewalld 或 sshd Match Address,本篇写法仅适用于 CentOS/RHEL 7 及更早;⑤ logrotaterotate 25 + weekly 约等于 6 个月留存,须同时核查磁盘容量与 max_log_file_action,避免日志被轮转清除导致留存不足。CentOS 7 已于 2024-06-30 停止维护,整改时应同步提出迁移至受支持发行版(RHEL/openEuler/Rocky Linux/麒麟)的计划并以补偿控制过渡。

关联文章