# 04、Linux主机加固操作手册

> Linux 主机加固操作手册（CentOS 7/RHEL 7，含 RHEL 8+ 与麒麟差异）：23 项逐条措施——三权分立账户与 nologin 停用、pam_pwquality 复杂度、pam_tally2/pam_faillock 失败锁定、login.defs 口令有效期、桌面剩余信息清理、rpm 消除无关软件、禁用默认路由与多余网络接口、umask 权限、SELinux 安全内核、firewalld 主机防火墙、禁用 bluetooth/cdrom/USB 存储、关闭无用服务与端口、限制远程管理地址、SSH 会话超时与禁止 root 远程登录、远程用户资源限制、日志留存 ≥6 个月、auditd 安全审计、SSH 服务加固，附版本差异速查与测评项对照表。

---

LLMS index: [llms.txt](/wikis/llms.txt)

---

> 定位：Linux 主机加固的**逐项操作手册**（23 项措施）：每项按「核查方法 → 加固操作 → 预期现象」组织，覆盖三权分立账户、口令复杂度与有效期、登录失败锁定、剩余信息清理、无关软件消除、路由与网络接口收敛、umask 与 SELinux、主机防火墙、外设与服务端口禁用、远程管理限制、SSH 加固、日志留存与 auditd 审计，文末附版本差异速查。
>
> 适用版本：CentOS 7 / RHEL 7（PAM 路径为 `system-auth-ac` 或 `system-auth`；RHEL 8+/麒麟/openEuler 的登录失败模块差异见 03 节与 11 号文章）。
> 配套文章：[11、Linux操作系统加固手册](../11linux操作系统加固手册/)（控制点完整版）、[05、Windows操作系统安全加固](../05windows操作系统安全加固/)。

每节按「核查方法 → 加固操作 → 预期现象」组织。编辑配置文件统一使用 vi：`i` 进入编辑模式，`Esc` 退出编辑，`:wq` 保存退出，`:q!` 不保存强制退出。

> 使用说明：
>
> - 本文为**加固操作手册**：所有命令都会修改配置，可能中断服务、断开当前会话或需要重启。实施前必须完成变更审批、确认业务窗口、备份原配置（设备 `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、无可信根、社区版无审计模块、已停止官方支持的操作系统）时，须核查替代措施并按替代措施的实际效果定档，不得直接判不适用；已停止支持的版本应同时提出升级或补偿控制建议。

## 01、用户账户配置（三权分立）

> **对应控制点**：GB/T 22239-2019 8.1.4.2 访问控制 a)~g)
>
> **加固要点**：账户与权限一一对应、默认与多余账户已删除或停用、无共享账户、系统/安全/审计三类管理职责分离、关键文件与目录权限最小化、启用了强制访问控制（SELinux/AppArmor/Windows 完整性级别与 SACL）并达到用户级与文件级粒度 → 符合；有权限划分但存在越权账户、粒度不足或强制访问控制未启用 → 部分符合；统一使用超级账户运维、关键配置文件任意用户可写 → 不符合。
>
> **验证方法**：账户与组清单、权限查询输出（`ls -l`/`icacls`/`getfacl`）、默认账户处置记录、强制访问控制状态与策略输出、访问控制策略文档与授权审批记录、安全标记配置截图。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


统一使用超级账户（`root`/`Administrator`）进行日常运维、系统与安全与审计三类管理职责未分离、关键鉴别信息文件（`/etc/shadow`、SAM）任意用户可读，或存在未处置的默认与共享账户时，属高风险线索；虚拟化平台管理账户权限未按角色最小化同样记录为高风险线索。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**

```bash
cat /etc/passwd        # 查看账户列表
cat /etc/group         # 查看组列表
```

**加固操作**

```bash
# 建立三权账户：系统管理员 / 安全管理员 / 审计管理员
useradd sysadmin && passwd sysadmin
useradd secadmin && passwd secadmin
useradd audadmin && passwd audadmin

# 无用账户改为 nologin（不可登录）
usermod -s /sbin/nologin mail
usermod -s /sbin/nologin games
usermod -s /sbin/nologin news
usermod -s /sbin/nologin sync
usermod -s /sbin/nologin halt
```

- 预期现象：三个管理账户存在且口令有效；无用账户 shell 字段为 `/sbin/nologin`。

## 02、密码复杂度策略

> **对应控制点**：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`；Linux `grep -E "^PASS_" /etc/login.defs`、`grep pwquality /etc/pam.d/system-auth*`；Windows `secedit /export` 或 `net accounts`）+ 存量账户抽查（`chage -l 用户名`、设备 `display local-user`）+ 一次弱口令修改实测记录，证明策略真的拦截而非仅配置存在。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


设备或主机存在空口令、出厂默认口令（`admin/admin`、`cisco/cisco`、`huawei`、`h3c`）或弱口令管理账户，或口令策略仅在模板中配置而未对存量账户生效，按《高风险判定指引》可直接判高风险。H3C 设备未执行 `password-control enable` 时全部老化、长度、组合与失败锁定配置**实际不生效**，属高频「已整改但无效」情形，复测必须重新实测而非只看配置。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**

```bash
grep pam_pwquality /etc/pam.d/system-auth*   # 或 pam_cracklib（老版本）
```

**加固操作**

编辑 `/etc/pam.d/system-auth-ac`（或 `system-auth`），在 `password requisite` 行追加参数：

```text
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=5 enforce_for_root minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
```

参数：`ucredit=-1` 至少 1 个大写、`lcredit=-1` 至少 1 个小写、`dcredit=-1` 至少 1 个数字、`ocredit=-1` 至少 1 个特殊字符、`minlen=8` 最小 8 位、`retry=5` 最多尝试 5 次。

- 预期现象：新建或修改口令时复杂度校验生效，弱口令被拒绝。

## 03、账户登录失败锁定

> **对应控制点**：GB/T 22239-2019 8.1.4.1 身份鉴别 b)（提供登录失败处理功能，限制非法登录次数）
>
> **加固要点**：配置并启用「连续失败 N 次锁定 M 分钟」，N 建议 3~5 次、M 建议 10~30 分钟，且**必须覆盖最高权限账户**（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` 能查到计数，并验证解锁命令可用；实测记录须含时间、操作人与被锁账户。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


管理入口未配置任何登录失败处理措施且管理面对全网或互联网开放，可被无限次口令猜测时，按高风险线索记录；锁定策略未覆盖最高权限账户（root/Administrator/super/level-15），或未保留 Console/带外恢复通道导致锁定即失联，同样记录为高风险线索。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**

```bash
grep -E "tally2|faillock" /etc/pam.d/system-auth* /etc/pam.d/sshd
```

**加固操作**

CentOS 7（pam_tally2）：

```text
auth        required      pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600
```

RHEL 8+ / 麒麟 V10（pam_faillock，改 `/etc/security/faillock.conf`）：

```text
deny = 5
unlock_time = 600
root_unlock_time = 600
```

- 预期现象：连续失败 5 次锁定账户 10 分钟（含 root）；`pam_tally2 -u 用户` 或 `faillock --user 用户` 可查询计数。

## 04、口令有效期

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

**核查方法**

```bash
grep -E "^PASS_" /etc/login.defs
```

**加固操作**

编辑 `/etc/login.defs`：

```text
PASS_MAX_DAYS   90    # 最长有效期 90 天
PASS_MIN_DAYS   1     # 两次修改最小间隔
PASS_MIN_LEN    8     # 最小长度 8
PASS_WARN_AGE   10    # 过期前 10 天提示
```

<div class="alert alert-warning" role="alert">

`PASS_MAX_DAYS` 只影响**修改之后**新建/再改口令的账户；存量账户需 `chage -M 90 用户名` 逐个生效，可用 `chage -l 用户名` 核查。</div>


## 05、业务用户桌面（剩余信息清理）

> **对应控制点**：GB/T 22239-2019 8.1.4.10 剩余信息保护 a)b)
>
> **加固要点**：鉴别信息与敏感数据所在存储空间在释放或重新分配前有可验证的清除机制（账户删除即清理其口令散列、磁盘/分区安全擦除、加密卷销毁密钥、虚拟机删除时清理磁盘文件），且备份介质与报废设备纳入清除范围 → 符合；仅有逻辑删除未做清除验证，或备份介质、退役磁盘未纳入 → 部分符合；无任何清除机制 → 不符合。
>
> **验证方法**：账户删除与口令散列清理验证记录、磁盘擦除工具与操作记录、加密卷密钥销毁流程、虚拟机/存储删除策略截图、报废介质销毁台账。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


删除账户或虚拟机后未做任何清除验证，且磁盘、存储介质报废或外送维修前无擦除与销毁记录时，鉴别信息与敏感数据存在可恢复风险，按高风险线索记录。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**：登录业务用户后 `ls -a ~/Desktop ~/` 查看是否存在与业务无关的文件。

**加固操作**

```bash
cd ~/Desktop && ls -a
rm -rf 文件名        # 删除无关文件，与业务部门确认后执行
```

## 06、消除无关软件

> **对应控制点**：GB/T 22239-2019 8.1.4.4 入侵防范 a)（遵循最小安装原则，关闭不需要的系统服务与默认共享）、e)（应能发现可能存在的已知漏洞并及时修补，补丁与软件来源须可控）
>
> **加固要点**：按业务需要最小化安装组件，卸载或禁用与业务无关的软件包与服务；软件与补丁来源必须可控——优先使用发行版官方仓库或厂商签名包，离线环境搭建本地镜像仓库并校验签名/GPG，禁止从不可信站点下载二进制直接部署；源码编译安装须留存来源、版本与编译参数记录并纳入资产与漏洞台账。卸载前先用 `rpm -e --test` / `apt-get -s remove` 预演依赖影响，避免连带移除业务组件。
>
> **验证方法**：`rpm -qa` / `dpkg -l` 导出已安装清单并与业务需要清单比对；`yum repolist` / `apt-cache policy` 确认仓库来源；`rpm -K 包名` 校验签名；`yum history` / `dnf history`、`/var/log/apt/history.log` 查看安装与回滚记录；卸载预演输出与变更记录归档。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


主机安装了与业务无关的高风险组件（编译工具链、FTP/Telnet 服务、示例与测试程序），或软件与补丁来源于不可信站点且无签名校验，导致 8.1.4.4 入侵防范 a) 最小安装与 e) 漏洞修补同时失效，按高风险线索记录。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**

```bash
rpm -qa                       # 清点已安装包
rpm -ql 包名                  # 查看包内文件
```

**加固操作**

```bash
rpm -e 包名                   # 卸载（建议先 --test 预演）
```

判定与完整操作见 [03、Linux安装软件的几种方法](../03linux安装软件的几种方法/)「最小安装」节。

## 07、禁用默认路由

> **对应控制点**：GB/T 22239-2019 8.1.4.4 入侵防范 a)~f)
>
> **加固要点**：遵循最小安装、非必要服务与默认共享已关闭、高危端口未对外开放、管理终端来源受限（防火墙规则/跳板机/堡垒机）、具备数据有效性检验、能发现已知漏洞并及时修补、重要节点部署入侵检测并可出示针对本主机的告警 → 符合；部分措施到位（如有主机防火墙但未限制管理来源、有漏扫无修补闭环）→ 部分符合；管理端口对全网开放、存在已知高危漏洞未修补、无任何入侵检测措施 → 不符合（高风险）。
>
> **验证方法**：已安装组件/角色清单、服务与监听端口输出、主机防火墙规则与拒绝实测、管理来源限制配置截图、补丁与漏洞修补记录、漏扫报告与整改工单、HIDS/EDR/NDR 部署与本主机告警截图。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


存在已知高危漏洞未修补（含已停止官方支持的版本，如 CentOS 6/7、Windows Server 2008/2012、ESXi 6.x 及更早），或 SSH/RDP/管理端口未经边界限制直接对互联网开放，属高风险；从未开展漏洞扫描与基线核查亦按高风险线索记录。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**

```bash
route -n                      # 查看 0.0.0.0 默认路由
```

**加固操作**

```bash
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.10.1
                              # 先补齐到达全部业务地址的明细路由
route del default             # 再删除默认路由
```

永久生效：将明细路由写入 `/etc/rc.local`（并 `chmod +x /etc/rc.d/rc.local`）或 NetworkManager 配置。

<div class="alert alert-warning" role="alert">

未补齐全部明细路由前**禁止**删除默认路由，否则业务中断。</div>


## 08、umask 权限

> **对应控制点**：GB/T 22239-2019 8.1.4.2 访问控制 a)d)f)（关键系统文件与目录权限、setuid/特权命令）
>
> **加固要点**：关键系统文件与目录（口令影子文件、启动脚本、审计配置、日志目录、Web 根目录）权限符合最小化要求，无全局可写文件，setuid/setgid 与特权命令清单已梳理并受控，普通用户无法读取鉴别信息 → 符合；权限基本合理但存在少量全局可写或未梳理的 setuid 程序 → 部分符合；鉴别信息文件任意用户可读、关键配置文件全局可写 → 不符合。
>
> **验证方法**：关键文件与目录权限输出、全局可写文件扫描结果、setuid/setgid 清单、特权命令使用审批记录、Windows 侧关键注册表项与 NTFS 权限截图。

**核查方法**：`umask`（期望 027 或更严）。

**加固操作**：编辑 `/etc/profile` 末尾追加：

```bash
umask 027
```

- 预期现象：新登录用户创建文件的默认权限为 640、目录为 750。

## 09、安全内核（SELinux）

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

**核查方法**

```bash
getenforce
```

**加固操作**

编辑 `/etc/selinux/config`：

```text
SELINUX=enforcing
```

重启或 `setenforce 1` 立即生效。

- 判定标准：`getenforce` 返回 `Enforcing` 为符合。因业务兼容问题临时 `Permissive` 的，应记录过渡期限并限期恢复——测评中长期 Permissive/Disabled 会作为问题提出。

## 10、操作系统防火墙

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

**核查方法**

```bash
systemctl status firewalld
firewall-cmd --list-all       # 或 iptables -nL
```

**加固操作（白名单示例）**

```bash
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" accept'
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --reload
```

使用 iptables 的旧系统：

```bash
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
service iptables save
```

## 11、禁用 bluetooth

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

**核查方法**

```bash
lsmod | grep bluetooth
```

**加固操作**

```bash
systemctl stop bluetooth && systemctl disable bluetooth
mv /lib/modules/$(uname -r)/kernel/drivers/bluetooth /BAK_bluetooth   # 可选：移除驱动
```

## 12、禁用无用服务

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

**核查方法**

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

**加固操作**

```bash
systemctl stop 服务名
systemctl disable 服务名          # 禁止开机自启
```

## 13、禁用无用端口

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

**核查方法**

```bash
netstat -ltunap                   # 查看监听端口与对应进程
```

**加固操作**：先确认业务不需要，再关闭对应服务或进程：

```bash
systemctl disable --now 服务名
kill 进程PID                      # 用 netstat 查到的 PID
```

高危/无用端口清单参考：135、137、138、139、445、593、631、5353 及业务未用的 21/23 等。

## 14、禁用 USB 大容量存储

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

**核查方法**

```bash
lsmod | grep usb_storage
```

**加固操作**

```bash
mv /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko /BAK_usbstorage
rmmod usb_storage
```

## 15、消除多余网络接口

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

**核查方法**

```bash
ip addr                           # 查看接口
ls /etc/sysconfig/network-scripts/
```

**加固操作**

```bash
ifconfig 接口名 down              # 临时禁用
rm /etc/sysconfig/network-scripts/ifcfg-多余接口   # 删除配置文件后重启网络
```

## 16、禁用 cdrom

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

**核查方法**

```bash
lsmod | grep -E "sr_mod|cdrom"
```

**加固操作**

```bash
mv /lib/modules/$(uname -r)/kernel/drivers/scsi/sr_mod.ko /BAK_srmod
mv /lib/modules/$(uname -r)/kernel/drivers/cdrom/cdrom.ko /BAK_cdrom
rmmod sr_mod && rmmod cdrom
```

## 17、限制远程管理地址

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

**核查方法**：`cat /etc/hosts.allow /etc/hosts.deny`。

**加固操作**

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

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

- 说明：先检查 hosts.deny 再检查 hosts.allow，后者的规则可越过前者限制；也可用 `sshd_config` 的 `AllowUsers 用户@地址` 实现（见 23 节）。

## 18、SSH 会话超时自动退出

> **对应控制点**：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` 绕过。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


管理会话无任何空闲超时（`TMOUT` 未设置或为 0、设备 `exec-timeout 0 0`、RDP 会话永不注销、屏幕保护未启用），运维人员离岗后他人可直接接管已鉴别的高权限会话，按高风险线索记录。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**加固操作**：编辑 `/etc/profile` 末尾追加：

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

退出会话重新登录生效，`echo $TMOUT` 验证。

## 19、禁止 root 远程登录

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

**核查方法**

```bash
grep -E "^#?PermitRootLogin" /etc/ssh/sshd_config
```

**加固操作**

```text
# /etc/ssh/sshd_config
PermitRootLogin no
```

```bash
systemctl restart sshd
```

<div class="alert alert-warning" role="alert">

修改前先确认有可用的普通管理员账户并能 `su`/`sudo` 提权，否则会被锁在系统外。</div>


## 20、远程用户资源限制

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

**核查方法**：`ulimit -a`、`cat /etc/security/limits.conf | grep -v "^#"`。

**加固操作**

```text
# /etc/security/limits.conf
sysadmin  soft  nproc   16384
sysadmin  hard  nproc   16384
sysadmin  soft  nofile  10240
sysadmin  hard  nofile  65536
```

```text
# /etc/pam.d/login 追加
session    required     pam_limits.so
```

## 21、日志管理与留存（留存 ≥6 个月）

> **对应控制点**：GB/T 22239-2019 8.1.4.3 安全审计 a)~d)
>
> **加固要点**：审计功能已启用且覆盖每个用户与重要安全事件（登录注销、权限变更、审计策略变更、系统异常）、记录含日期时间/用户/事件类型/成败四要素、审计记录受保护并定期备份、留存不少于 6 个月、审计进程受保护且非审计管理员不可中断 → 符合；开关已开但子类别不全、留存不足、仅本地存储无外发 → 部分符合；审计完全未启用且无日志审计系统或堡垒机替代 → 不符合（高风险）。
>
> **验证方法**：审计策略配置与生效截图（auditd 规则 / auditpol / 高级审核策略）、审计记录抽样（脱敏）、日志存放路径与权限、日志外发到 syslog/日志审计系统/SOC 的配置与收端截图、最早记录时间清单、清理与转存任务配置。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


审计功能未启用且无日志审计系统、堡垒机或 SOC 等替代措施，或审计记录留存明显不足 6 个月，属高风险；非审计管理员可随意清空、篡改审计数据（日志目录全局可写、`auditd` 可被普通用户停止）时，审计不可抵赖性失效，同样按高风险处理。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


<div class="alert alert-danger" role="alert">

本节替代旧版"消除无用日志"——测评要求的方向是**保护并留存**日志（GB/T 28448 安全审计 c)：应对审计记录进行保护，避免受到未预期的删除、修改或覆盖），擅自删除安全日志本身会成为不符合项甚至高风险。</div>


**核查方法**

```bash
grep -E "^rotate|^weekly|^monthly" /etc/logrotate.conf
cat /etc/logrotate.d/rsyslog | grep -A2 "/var/log/messages"
ls -l /var/log/secure /var/log/messages        # 权限应仅 root 可读写
```

**加固操作**

1. 轮转留存 ≥6 个月（weekly + rotate 26 ≈ 26 周）：

```text
# /etc/logrotate.conf
weekly
rotate 26
```

2. 日志文件权限收紧（`/etc/logrotate.d/syslog` 各日志段加）：

```text
create 0600 root root
```

3. 转发集中日志服务器（防本地篡改，`/etc/rsyslog.conf`）：

```text
*.* @@192.168.10.20:514      # @@=TCP，@=UDP
```

```bash
systemctl restart rsyslog
```

4. 日志类型说明：`/var/log/secure` 认证与安全相关、`/var/log/cron` 计划任务、`/var/log/messages` 系统日志、`/var/log/boot.log` 启动日志。确无价值的非安全类旧日志可在确认无需追溯后按变更流程清理。

## 22、安全审计（auditd）

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

**核查方法**

```bash
systemctl status auditd
auditctl -s                     # 查看审计状态与规则数
ausearch -k identity --recent   # 按关键字查询审计记录
```

**加固操作**

```bash
systemctl enable --now auditd
```

常用规则（`/etc/audit/rules.d/audit.rules` 追加后 `augenrules --load`）：

```text
-w /etc/passwd   -p wa  -k identity
-w /etc/shadow   -p wa  -k identity
-w /etc/sudoers  -p wa  -k identity
-w /etc/my.cnf   -p wa  -k mysqlcfg
-a always,exit -F arch=b64 -S execve -k exec
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S chmod -S fchmod -S fchmodat -k perm_mod
```

- 审计记录包含时间、用户、事件类型与结果，`cat /var/log/audit/audit.log` 可见（时间戳为 epoch，`aureport --start today` 可读化）；
- **记录保护**：auditd 自身日志仅 root 可访问（600）；配合 21 节转发至日志服务器防篡改；
- **进程保护**：auditd 受 systemd 保护不可随意 kill；限制除审计员外的用户权限（三权账户，见 01 节）。

## 23、SSH 服务加固

> **对应控制点**：GB/T 22239-2019 8.1.4.1 身份鉴别 c)（远程管理时防止鉴别信息在传输中被窃听）、8.1.2.2 通信传输 a)b)
>
> **加固要点**：远程管理一律走加密通道：设备侧仅放行 SSHv2/HTTPS 并关闭 Telnet/HTTP，RSA 密钥长度不低于 2048 位、禁用 CBC 模式与 3DES 等弱算法；主机侧禁用 Telnet/FTP，SSH 关闭 root 直接登录、优先密钥认证并按需启用「口令 + 密钥」双因素，RDP 启用 NLA 与 TLS 并把来源限制到管理网段或堡垒机。管理通道加密后仍须用 ACL/防火墙收敛来源——加密只解决窃听，不解决越权访问。
>
> **验证方法**：设备侧 `show ip ssh` / `display ssh server status` 确认版本与算法，`show running-config | section line vty` 确认 `transport input ssh`；主机侧 `sshd -T | grep -Ei "permitrootlogin|ciphers|macs|kexs"`、`ss -tlnp` 确认无 23/21 监听，Windows `Get-ItemProperty` 核查 RDP 的 NLA（`UserAuthentication`）与端口；从非管理网段发起连接实测被拒；必要时抓包确认无明文口令。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


仍启用 Telnet/HTTP 明文管理，或 SSH 允许 root/Administrator 直接远程登录且使用弱口令，导致鉴别信息可被嗅探还原或管理入口可被爆破，按《高风险判定指引》可直接判高风险；管理端口未经边界限制直接对互联网开放时同样按高风险处理。

判定口径详见 [22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)。

</div>


**核查方法**

```bash
sshd -T | grep -Ei "maxauthtries|clientalive|allowusers|permitrootlogin"
```

**加固操作**（`/etc/ssh/sshd_config`）：

```text
PermitRootLogin no            # 配合 19 节
MaxAuthTries 4                # 单连接最大认证尝试
LoginGraceTime 60             # 认证窗口 60 秒
ClientAliveInterval 300       # 客户端空闲探测间隔
ClientAliveCountMax 2         # 2 次无响应断开（≈10 分钟）
AllowUsers sysadmin@192.168.10.*    # 账户+来源双重限制
```

```bash
sshd -t && systemctl restart sshd     # 先语法检查再重启，避免远程断连
```

## 版本差异速查

| 事项 | CentOS 5/6 | CentOS 7 | RHEL 8+/麒麟 V10/openEuler | Debian/Ubuntu |
| --- | --- | --- | --- | --- |
| 登录失败锁定 | pam_tally2 | pam_tally2（本文 03 节） | pam_faillock（`/etc/security/faillock.conf`） | pam_tally2；pam 1.4+ 可用 faillock |
| PAM 文件 | `/etc/pam.d/system-auth` | `system-auth`（-ac 软链） | `system-auth`（Debian 系为 `common-auth`） | `common-auth` |
| 服务管理 | service / chkconfig | systemctl | systemctl | systemctl |
| 包管理 | yum | yum | dnf | apt |
| 防火墙 | iptables | firewalld / iptables | firewalld（nftables 后端） | ufw / nftables |
| 时间同步 | ntp | ntp / chrony | chrony | systemd-timesyncd / chrony |

麒麟 V10 与 CentOS 7 的逐项对照另见 [13、麒麟操作系统加固](../../终端/13麒麟操作系统加固/) 文末差异表。

## 测评项对照表

| 控制点（GB/T 22239-2019） | 对应章节 |
| --- | --- |
| 身份鉴别：复杂度、有效期、唯一性 | 01、02、04 |
| 身份鉴别：登录失败处理与超时退出 | 03、18、23 |
| 身份鉴别：远程管理防窃听 | 23 |
| 访问控制：账户与权限分配、三权分立 | 01、20 |
| 访问控制：删除/停用多余账户 | 01 |
| 入侵防范：最小安装、关闭服务与端口 | 06、12、13 |
| 入侵防范：管理终端地址限制 | 07、17、23 |
| 安全审计：启用、覆盖、记录、保护与留存 | 21、22 |
| 剩余信息保护 | 05、08 |
| 入侵防范（网络层收敛） | 07、09、10、11、14、15、16 |

## 参考依据

- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》（8.1.4 安全计算环境各控制点（主机加固措施逐项落地））：[http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF](http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF)
- GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》（测评对象边界认定、单元测评实施与结果判定：符合/部分符合/不符合/不适用）：[http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C](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/](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/](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/](https://man7.org/linux/man-pages/)
- 《网络安全等级保护测评高风险判定指引》（中关村信息安全测评联盟团体标准）——高风险情形判定口径，站内对照表：[22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)
- 命令核验说明：Linux 命令以 man7.org 手册页与 Red Hat Enterprise Linux 官方文档核验（核验日期 2026-09-02）。六处须留意：① RHEL 系 PAM 主文件为 `/etc/pam.d/system-auth-ac`（`system-auth` 是其软链），`authconfig`/`authselect` 重新生成时会覆盖手工改动，RHEL 8+ 须用 `authselect` 管理；② `pam_tally2` 自 RHEL 8 起被移除，改用 `pam_faillock`，两套机制不可混配；③ `umask` 在 `/etc/profile`、`/etc/bashrc`、`/etc/login.defs`（`UMASK`）与 `pam_umask` 多处生效，须以登录后实测 `umask` 的最终值为准，不能只看单个文件；④ SELinux 切 enforcing 前必须先处理业务端口与路径标签（`semanage port`/`semanage fcontext`，必要时 `audit2allow`），建议先 permissive 观察 `ausearch -m avc` 再切换，否则会中断业务；⑤ 禁用 `usb-storage` 不影响 USB 键鼠（走 `usbhid`），但会影响加密狗、外置备份介质与部分采集卡，实施前须与业务确认；⑥ `/etc/hosts.allow`、`/etc/hosts.deny`（TCP Wrappers）在 RHEL 8+ 已失效——openssh 移除了 libwrap 支持，须改用 firewalld rich rule 或 sshd_config 的 `Match Address`，否则措施看似配置了实则无效。

## 关联文章

- 本板块相关篇：[11、Linux操作系统加固手册](../11linux操作系统加固手册/)、[05、Windows操作系统安全加固](../05windows操作系统安全加固/)、[07、CentOS操作系统安全加固](../07centos操作系统安全加固/)、[03、Linux安装软件的几种方法](../03linux安装软件的几种方法/)
- [Linux 操作系统测评命令（现场取证速查）](../../../gradeprotection/服务器/16linux操作系统测评命令/)
- [Linux(RHEL/CentOS) 三级现场测评命令单](../../../gradeprotection/服务器/三级现场测评命令单/linuxrhel_centos-三级等保现场测评命令单/)
- [通用-服务发现与软件排查命令单](../../../gradeprotection/服务器/三级现场测评命令单/通用-服务发现与软件排查命令单/)
- [麒麟操作系统加固（国产 Linux 对照）](../../终端/13麒麟操作系统加固/)
- 板块目录：[服务器](/wikis/docs/reinforce/%E6%9C%8D%E5%8A%A1%E5%99%A8/)
- 通用加固方案：[17、加固方案总纲](../../其他系统或设备/17网络设备安全设备服务器数据库和应用系统的加固方案/)
- 取证记录模板：[16、安全评估加固记录表3.0](../../其他系统或设备/16安全评估加固记录表3.0/)
- 高风险判定口径：[22、高风险判定指引与加固对照表](../../其他系统或设备/22高风险判定指引与加固对照表/)
