# Hardening Linux Endpoint With Cis Benchmark

> 使用 CIS Benchmark 建议对 Ubuntu、RHEL 和 CentOS 的 Linux 端点进行加固， 以减少攻击面、执行安全基线并满足合规要求。适用于部署新 Linux 服务器、修复审计发现 或为 Linux 基础设施建立安全基线的场景。

- Skill: `killvxk/hardening-linux-endpoint-with-cis-benchmark` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/hardening-linux-endpoint-with-cis-benchmark`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/hardening-linux-endpoint-with-cis-benchmark/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/hardening-linux-endpoint-with-cis-benchmark

---

# 使用 CIS Benchmark 加固 Linux 端点

## 使用场景

在以下情况下使用本技能：
- 按照 CIS Benchmark 加固 Linux 服务器（Ubuntu、RHEL、CentOS、Debian）
- 使用 Ansible、OpenSCAP 或 Shell 脚本自动化 Linux 安全基线
- 满足 Linux 端点的合规要求（PCI DSS、HIPAA、SOC 2）
- 修复漏洞扫描或安全审计中发现的问题

**不适用于** Windows 加固（使用 hardening-windows-endpoint-with-cis-benchmark）。

## 前置条件

- 目标 Linux 端点的 root 或 sudo 访问权限
- 目标发行版的 CIS Benchmark PDF（来自 cisecurity.org）
- 用于自动化评估的 OpenSCAP 或 CIS-CAT
- 用于企业规模修复的 Ansible（可选）

## 操作流程

### 步骤 1：文件系统配置（第 1 节）

```bash
# 1.1.1 禁用未使用的文件系统
cat >> /etc/modprobe.d/CIS.conf << 'EOF'
install cramfs /bin/true
install freevxfs /bin/true
install jffs2 /bin/true
install hfs /bin/true
install hfsplus /bin/true
install squashfs /bin/true
install udf /bin/true
EOF

# 1.1.2 确保 /tmp 是带有 nodev,nosuid,noexec 的独立分区
# /etc/fstab 条目：
# tmpfs /tmp tmpfs defaults,rw,nosuid,nodev,noexec,relatime 0 0
systemctl unmask tmp.mount
systemctl enable tmp.mount

# 1.1.8 确保 /dev/shm 有 nodev 选项
mount -o remount,nodev,nosuid,noexec /dev/shm
echo "tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0" >> /etc/fstab

# 1.4 安全引导设置
chown root:root /boot/grub/grub.cfg
chmod 600 /boot/grub/grub.cfg
# 设置 GRUB 密码
grub-mkpasswd-pbkdf2  # 生成哈希，添加到 /etc/grub.d/40_custom
```

### 步骤 2：服务和网络（第 2-3 节）

```bash
# 2.1 禁用不必要的服务
systemctl disable --now avahi-daemon
systemctl disable --now cups
systemctl disable --now rpcbind
systemctl disable --now xinetd

# 2.2 确保已配置 NTP
apt install chrony -y  # 或 systemd-timesyncd
systemctl enable --now chrony

# 3.1 网络参数（仅主机，非路由器）
cat >> /etc/sysctl.d/99-cis.conf << 'EOF'
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
EOF
sysctl --system

# 3.4 配置防火墙（UFW 或 firewalld）
ufw enable
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
```

### 步骤 3：访问控制（第 4-5 节）

```bash
# 5.2 SSH 服务器配置（/etc/ssh/sshd_config）
sed -i 's/#Protocol 2/Protocol 2/' /etc/ssh/sshd_config
cat >> /etc/ssh/sshd_config << 'EOF'
LogLevel VERBOSE
MaxAuthTries 4
PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no
X11Forwarding no
MaxStartups 10:30:60
LoginGraceTime 60
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 3
EOF
systemctl restart sshd

# 5.3 密码策略（PAM）
# /etc/security/pwquality.conf
minlen = 14
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1

# 5.4 用户账户设置
# /etc/login.defs
PASS_MAX_DAYS 365
PASS_MIN_DAYS 1
PASS_WARN_AGE 7

# 锁定非活跃账号
useradd -D -f 30
```

### 步骤 4：审计和日志记录（第 4 节）

```bash
# 安装并配置 auditd
apt install auditd audispd-plugins -y
systemctl enable --now auditd

# /etc/audit/rules.d/cis.rules
cat > /etc/audit/rules.d/cis.rules << 'EOF'
-w /etc/sudoers -p wa -k scope
-w /etc/sudoers.d/ -p wa -k scope
-w /var/log/sudo.log -p wa -k actions
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k perm_mod
-a always,exit -F arch=b64 -S unlink -S rmdir -S rename -k delete
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-e 2
EOF
augenrules --load

# 配置 rsyslog 进行远程日志记录
echo "*.* @@syslog-server.corp.com:514" >> /etc/rsyslog.d/50-remote.conf
systemctl restart rsyslog
```

### 步骤 5：使用 OpenSCAP 进行评估

```bash
# 安装 OpenSCAP
apt install openscap-scanner scap-security-guide -y

# 运行 CIS benchmark 评估
oscap xccdf eval \
  --profile xccdf_org.ssgproject.content_profile_cis_level1_server \
  --results /tmp/cis_results.xml \
  --report /tmp/cis_report.html \
  /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml

# 在浏览器中查看 HTML 报告以获取详细结果
```

## 关键概念

| 术语 | 定义 |
|------|------|
| **OpenSCAP** | 用于自动合规检查的开源 SCAP（安全内容自动化协议）扫描器 |
| **auditd** | 用于监控系统调用和文件访问的 Linux 审计框架 |
| **PAM** | 可插拔认证模块（Pluggable Authentication Modules），Linux 的可配置认证框架 |
| **sysctl** | 用于网络和系统安全调优的 Linux 内核参数配置 |
| **AIDE** | 高级入侵检测环境（Advanced Intrusion Detection Environment），Linux 文件完整性检查工具 |

## 工具与系统

- **OpenSCAP**：Linux 自动化 CIS Benchmark 评估
- **Ansible Lockdown**：用于自动化 CIS Benchmark 修复的 Ansible 角色
- **Lynis**：适用于 Linux/Unix 系统的开源安全审计工具
- **AIDE**：Linux 端点文件完整性监控
- **auditd**：用于系统调用监控的 Linux 审计框架

## 常见误区

- **将服务器 Benchmark 应用于工作站**：CIS 为服务器和工作站配置文件提供了独立的 Benchmark，服务器 Benchmark 会禁用桌面服务。
- **破坏 SSH 访问**：错误配置 sshd_config（特别是 PermitRootLogin、PasswordAuthentication）可能锁定管理员。务必在第二个会话中测试 SSH 配置变更。
- **未测试防火墙规则**：在允许 SSH 之前启用 UFW 将永久断开远程会话。
- **未经测试就更改内核参数**：某些 sysctl 设置可能破坏应用程序的网络功能。先在预发布环境中测试。

