07、CentOS操作系统安全加固
Categories:
4 分钟阅读
定位:图解速查——每个配置项一图对照,方便现场快速比对。截图均已配齐文字命令,正文可独立执行。 控制点完整版(含恶意代码防范、备份恢复等)见 11、Linux操作系统加固手册。 适用版本:CentOS 7 / RHEL 7。 版本适用性:pam_tally2 写法适用于 CentOS 5~7;RHEL 8+/CentOS Stream/麒麟 V10 改用 pam_faillock,对照见 11、Linux操作系统加固手册 与 13、麒麟操作系统加固。
使用说明:
- 本文为加固操作手册:所有命令都会修改配置,可能中断服务、断开当前会话或需要重启。实施前必须完成变更审批、确认业务窗口、备份原配置(设备
save与copy running-config/backup startup-configuration,主机备份/etc、注册表与关键业务数据),并准备可执行的回滚预案。- 先在测试环境或单台设备灰度验证,确认无业务影响后再批量推广;每完成一项立即用文中「验证」命令核验生效——配置已下发不等于策略已生效(如 H3C 未
password-control enable、Linux 未对存量账户chage、Windows 未gpupdate /force)。- 示例中的地址、账户名、口令、路径均为演示值(如
PleaseChange@123、192.168.10.20、admin123),现场须替换为符合本单位口令策略与网络规划的真实值,严禁直接沿用文中示例口令;对外发布或归档时须对个人信息与内网管理地址脱敏。- 命令不存在、视图名或参数与本文不一致时,先用
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_root、password policy administrator)。验证方法:策略配置回显(设备
display password-control/display current-configuration | include password;Linuxgrep -E "^PASS_" /etc/login.defs、grep pwquality /etc/pam.d/system-auth*;Windowssecedit /export或net accounts)+ 存量账户抽查(chage -l 用户名、设备display local-user)+ 一次弱口令修改实测记录,证明策略真的拦截而非仅配置存在。
设备或主机存在空口令、出厂默认口令(admin/admin、cisco/cisco、huawei、h3c)或弱口令管理账户,或口令策略仅在模板中配置而未对存量账户生效,按《高风险判定指引》可直接判高风险。H3C 设备未执行 password-control enable 时全部老化、长度、组合与失败锁定配置实际不生效,属高频「已整改但无效」情形,复测必须重新实测而非只看配置。
判定口径详见 22、高风险判定指引与加固对照表。
编辑 /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)、默认账户处置记录、强制访问控制状态与策略输出、访问控制策略文档与授权审批记录、安全标记配置截图。
统一使用超级账户(root/Administrator)进行日常运维、系统与安全与审计三类管理职责未分离、关键鉴别信息文件(/etc/shadow、SAM)任意用户可读,或存在未处置的默认与共享账户时,属高风险线索;虚拟化平台管理账户权限未按角色最小化同样记录为高风险线索。
判定口径详见 22、高风险判定指引与加固对照表。
usermod -s /sbin/nologin 用户名 # 禁止登录
grep nologin /etc/passwd # 核查:无用账户 shell 应为 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)。

四、登录失败处理
对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 b)(提供登录失败处理功能,限制非法登录次数)
加固要点:配置并启用「连续失败 N 次锁定 M 分钟」,N 建议 3
5 次、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-password、secpol.msc账户锁定策略截图)+ 一次真实失败登录实测:连续输错至阈值后确认账户被锁定、锁定计时生效、pam_tally2 -u/faillock --user/display password-control blacklist能查到计数,并验证解锁命令可用;实测记录须含时间、操作人与被锁账户。
管理入口未配置任何登录失败处理措施且管理面对全网或互联网开放,可被无限次口令猜测时,按高风险线索记录;锁定策略未覆盖最高权限账户(root/Administrator/super/level-15),或未保留 Console/带外恢复通道导致锁定即失联,同样记录为高风险线索。
判定口径详见 22、高风险判定指引与加固对照表。
在 /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手工解锁。



五、登录连接超时
对应控制点: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 vty、display current-configuration configuration user-interface、组策略或注册表ScreenSaveTimeOut截图)+ 实测:登录后静置至阈值确认会话被自动断开且需重新鉴别;核查普通用户能否unset TMOUT绕过。
管理会话无任何空闲超时(TMOUT 未设置或为 0、设备 exec-timeout 0 0、RDP 会话永不注销、屏幕保护未启用),运维人员离岗后他人可直接接管已鉴别的高权限会话,按高风险线索记录。
判定口径详见 22、高风险判定指引与加固对照表。
编辑 /etc/profile 末尾追加:
export TMOUT=600 # 空闲 600 秒自动退出
source /etc/profile 后新会话生效。

六、口令修改操作
passwd root # 修改 root 口令
passwd 普通用户名 # 修改普通用户口令


七、禁止 root 远程登录
对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~g)
/etc/ssh/sshd_config 中找到 #PermitRootLogin yes,去掉注释并改为:
PermitRootLogin no
sshd -t && systemctl restart sshd


八、日志容量与留存
对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)
加固要点:审计功能已启用且覆盖每个用户与重要安全事件(登录注销、权限变更、审计策略变更、系统异常)、记录含日期时间/用户/事件类型/成败四要素、审计记录受保护并定期备份、留存不少于 6 个月、审计进程受保护且非审计管理员不可中断 → 符合;开关已开但子类别不全、留存不足、仅本地存储无外发 → 部分符合;审计完全未启用且无日志审计系统或堡垒机替代 → 不符合(高风险)。
验证方法:审计策略配置与生效截图(auditd 规则 / auditpol / 高级审核策略)、审计记录抽样(脱敏)、日志存放路径与权限、日志外发到 syslog/日志审计系统/SOC 的配置与收端截图、最早记录时间清单、清理与转存任务配置。
审计功能未启用且无日志审计系统、堡垒机或 SOC 等替代措施,或审计记录留存明显不足 6 个月,属高风险;非审计管理员可随意清空、篡改审计数据(日志目录全局可写、auditd 可被普通用户停止)时,审计不可抵赖性失效,同样按高风险处理。
判定口径详见 22、高风险判定指引与加固对照表。
- 设置 audit 日志最大容量(MB),编辑
/etc/audit/auditd.conf:
max_log_file = 300
- 设置日志轮转留存周期,编辑
/etc/logrotate.conf:
weekly
rotate 25 # 每周轮转一次保留 25 份 ≈ 6 个月,满足《网络安全法》第 21 条



九、日志发送至日志审计设备
对应控制点: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

十、终端地址限制
对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)~f)
加固要点:遵循最小安装、非必要服务与默认共享已关闭、高危端口未对外开放、管理终端来源受限(防火墙规则/跳板机/堡垒机)、具备数据有效性检验、能发现已知漏洞并及时修补、重要节点部署入侵检测并可出示针对本主机的告警 → 符合;部分措施到位(如有主机防火墙但未限制管理来源、有漏扫无修补闭环)→ 部分符合;管理端口对全网开放、存在已知高危漏洞未修补、无任何入侵检测措施 → 不符合(高风险)。
验证方法:已安装组件/角色清单、服务与监听端口输出、主机防火墙规则与拒绝实测、管理来源限制配置截图、补丁与漏洞修补记录、漏扫报告与整改工单、HIDS/EDR/NDR 部署与本主机告警截图。
存在已知高危漏洞未修补(含已停止官方支持的版本,如 CentOS 6/7、Windows Server 2008/2012、ESXi 6.x 及更早),或 SSH/RDP/管理端口未经边界限制直接对互联网开放,属高风险;从未开展漏洞扫描与基线核查亦按高风险线索记录。
判定口径详见 22、高风险判定指引与加固对照表。
编辑 /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. 打头的形式。

参考依据
- 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_pwquality的ucredit/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 或 sshdMatch Address,本篇写法仅适用于 CentOS/RHEL 7 及更早;⑤logrotate的rotate 25+weekly约等于 6 个月留存,须同时核查磁盘容量与max_log_file_action,避免日志被轮转清除导致留存不足。CentOS 7 已于 2024-06-30 停止维护,整改时应同步提出迁移至受支持发行版(RHEL/openEuler/Rocky Linux/麒麟)的计划并以补偿控制过渡。