覆盖麒麟 / 统信 UOS / openEuler
SSH加固 · 密码策略 · 审计日志 · 内核参数 · 一键检查脚本
2025 年 11 月 3 日,工信部信创漏洞库联合麒麟软件、统信软件等发布了《国产操作系统安全基线手册》,这是信创领域第一份官方安全配置标准,填补了国产系统安全基线的空白。
本文基于该手册及 openEuler 安全配置基线标准 v1.0,整理出覆盖 10 大安全域、100+ 条配置项的基线检查配置大全,附带可直接执行的检查脚本,助你快速完成信创系统安全加固。
一、信创基线检查概览
信创操作系统主要包括:
| 操作系统 | 厂商 | 适用场景 | 基线标准来源 |
|---|---|---|---|
| 银河麒麟 Kylin | 麒麟软件 | 党政军、金融、能源 | 国产操作系统安全基线手册 |
| 统信 UOS | 统信软件 | 政务、企业桌面/服务器 | 国产操作系统安全基线手册 |
| openEuler | 华为/开放原子基金会 | 云原生、服务器 | openEuler 安全配置基线标准 v1.0 |
| 麒麟信安 | 麒麟信安 | 高安全场景 | 等保 2.0 + 行业规范 |
1.1 基线检查 10 大安全域
| 安全域 | 检查重点 | 等保对应 |
|---|---|---|
| 身份鉴别 | 账号策略、密码复杂度、登录失败处理 | 等保 2.0 - 身份鉴别 |
| 访问控制 | 权限最小化、敏感文件权限、sudo 配置 | 等保 2.0 - 访问控制 |
| 安全审计 | auditd 配置、日志留存、日志保护 | 等保 2.0 - 安全审计 |
| 入侵防范 | 端口关闭、服务最小化、恶意代码防护 | 等保 2.0 - 入侵防范 |
| SSH 安全 | 协议版本、Root 登录、认证方式 | 等保 2.0 - 身份鉴别 |
| 内核参数 | 网络参数、内存参数、安全开关 | 等保 2.0 - 入侵防范 |
| 账户管理 | 空密码、共享账号、默认账号、过期账号 | 等保 2.0 - 身份鉴别 |
| 文件权限 | 关键配置文件、日志文件、临时目录 | 等保 2.0 - 访问控制 |
| 资源控制 | 会话超时、资源限制、磁盘配额 | 等保 2.0 - 资源控制 |
| 备份恢复 | 关键数据备份、配置备份、恢复演练 | 等保 2.0 - 数据备份 |
二、身份鉴别:账号与密码策略
身份鉴别是等保测评的重中之重,也是攻击者最先突破的防线。
2.1 密码复杂度策略
/etc/security/pwquality.conf - 密码复杂度配置
# 最小密码长度 12 位
minlen = 12
# 至少包含 1 个大写字母
ucredit = -1
# 至少包含 1 个小写字母
lcredit = -1
# 至少包含 1 个数字
dcredit = -1
# 至少包含 1 个特殊字符
ocredit = -1
# 不能包含用户名
usercheck = 1
# 记住前 5 次密码,防止循环使用
remember = 5
/etc/pam.d/system-auth - PAM 配置
# 在 password 行添加 pwquality 模块
password requisite pam_pwquality.so try_first_pass local_users_only retry=3
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
2.2 密码有效期策略
/etc/login.defs - 密码有效期配置
# 密码最长有效期 90 天
PASS_MAX_DAYS 90
# 密码最短修改间隔 1 天(防止频繁修改)
PASS_MIN_DAYS 1
# 密码最小长度(与 pwquality 配合)
PASS_MIN_LEN 12
# 密码过期前 7 天提醒
PASS_WARN_AGE 7
bash - 批量修改现有用户密码策略
# 修改所有用户的密码有效期
for user in $(awk -F: '$3 >= 1000 {print $1}' /etc/passwd); do
chage -M 90 -m 1 -W 7 $user
done
# 查看 root 密码策略
chage -l root
2.3 登录失败锁定策略
/etc/pam.d/sshd - SSH 登录失败锁定
# 在 auth 段第一行添加(必须放在第一行)
auth required pam_tally2.so onerr=fail deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
# 参数说明:
# deny=5 - 连续失败 5 次锁定
# unlock_time=1800 - 锁定 30 分钟(秒)
# even_deny_root - root 也受限制
# root_unlock_time=1800 - root 锁定 30 分钟
/etc/pam.d/login - 本地登录失败锁定
# 同样在 auth 段第一行添加
auth required pam_tally2.so onerr=fail deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
bash - 查看和解锁用户
# 查看用户失败次数
pam_tally2 --user root
# 手动解锁用户
pam_tally2 -r -u root
# 重置所有用户计数
pam_tally2 --reset
💡 信创建议:生产环境建议 deny=3~5,unlock_time=900~1800(15-30分钟),既防暴力破解又不影响正常运维。
三、SSH 服务安全加固
SSH 是远程管理的主要入口,也是攻击面最大的服务之一。
3.1 SSH 核心安全配置
/etc/ssh/sshd_config - SSH 加固配置
# 仅使用 SSH 协议版本 2(禁用有漏洞的版本 1)
Protocol 2
# 禁用 Root 直接登录
PermitRootLogin no
# 禁用空密码登录
PermitEmptyPasswords no
# 密码认证 + 密钥认证 同时启用
PasswordAuthentication yes
PubkeyAuthentication yes
# 最大认证尝试次数
MaxAuthTries 3
# 空闲超时断开(秒)
ClientAliveInterval 300
ClientAliveCountMax 3
# 允许登录的用户(白名单机制)
AllowUsers admin deploy@192.168.1.*
# 禁止登录的用户
DenyUsers test guest
# 监听端口(建议修改默认 22)
Port 2222
# 仅监听内网地址
ListenAddress 192.168.1.10
# 禁用 X11 转发
X11Forwarding no
# 允许最大认证次数
MaxSessions 2
bash - 重启 SSH 服务
# 麒麟 / openEuler
systemctl restart sshd
# 验证配置语法
sshd -t
# 查看 SSH 状态
systemctl status sshd
⚠️ 修改 SSH 配置前,务必开启另一个终端保持连接,防止配置错误导致无法登录!
3.2 SSH 密钥认证配置
bash - 配置密钥登录
# 1. 生成密钥对(在客户端执行)
ssh-keygen -t ed25519 -C "admin@company.com"
# 2. 将公钥复制到服务器
ssh-copy-id -p 2222 admin@server-ip
# 3. 服务器端确认 authorized_keys 权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 4. 可选:禁用密码登录(仅密钥)
# 在 /etc/ssh/sshd_config 中设置:
# PasswordAuthentication no
四、安全审计:日志与监控
安全审计是事后追溯和合规检查的关键,等保 2.0 明确要求保留审计记录。
4.1 auditd 审计服务配置
bash - 安装并启用 auditd
# 麒麟 / openEuler
yum install -y audit audit-libs
# 启动并开机自启
systemctl enable auditd --now
# 查看状态
systemctl status auditd
/etc/audit/rules.d/audit.rules - 审计规则配置
# 监控 /etc/passwd 修改
-w /etc/passwd -p wa -k identity_changes
# 监控 /etc/shadow 修改
-w /etc/shadow -p wa -k password_changes
# 监控 /etc/group 修改
-w /etc/group -p wa -k group_changes
# 监控 SSH 配置修改
-w /etc/ssh/sshd_config -p wa -k ssh_config_changes
# 监控 sudoers 配置
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_changes
# 监控用户命令执行
-a always,exit -F arch=b64 -S execve -k command_execution
# 监控文件权限修改
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k permission_changes
# 监控用户登录/注销
-w /var/log/lastlog -p wa -k logins
-w /var/run/faillock -p wa -k failed_logins
bash - 加载审计规则并验证
# 重新加载规则
augenrules --load
# 查看当前规则
auditctl -l
# 查看审计日志
ausearch -k identity_changes
# 查看用户命令执行记录
ausearch -k command_execution | tail -20
# 生成审计报告
aureport --login --summary -i
4.2 rsyslog 日志配置
/etc/rsyslog.conf - 日志集中转发
# 将日志转发到日志服务器
*.info;mail.none;authpriv.none;cron.none @192.168.1.100:514
# 认证相关日志单独处理
authpriv.* /var/log/secure
bash - 日志文件防篡改
# 给关键日志添加不可变属性(即使是 root 也不能直接修改)
chattr +a /var/log/messages
chattr +a /var/log/secure
chattr +a /var/log/audit/audit.log
# 查看属性
lsattr /var/log/secure
# 需要修改时先去掉属性
chattr -a /var/log/secure
4.3 日志留存策略
/etc/logrotate.conf - 日志轮转配置
# 每周轮转一次
weekly
# 保留 12 个备份(约 3 个月)
rotate 12
# 创建新文件
create
# 压缩旧日志
compress
# 缺失日志不报错
missingok
# 为空时不轮转
notifempty
等保 2.0 要求审计日志至少留存 6 个月,建议 rotate 配置为 26(半年)或 52(一年)。
五、访问控制:权限与文件安全
5.1 关键文件权限配置
bash - 关键文件权限加固
# /etc/passwd 所有用户可读,仅 root 可写
chmod 644 /etc/passwd
# /etc/shadow 仅 root 可读写
chmod 000 /etc/shadow
# /etc/group 所有用户可读,仅 root 可写
chmod 644 /etc/group
# SSH 配置目录
chmod 700 /etc/ssh
chmod 600 /etc/ssh/sshd_config
# 审计配置
chmod 640 /etc/audit/auditd.conf
# sudo 配置
chmod 440 /etc/sudoers
chmod 755 /etc/sudoers.d
# 临时目录粘滞位
chmod 1777 /tmp
chmod 1777 /var/tmp
5.2 UMASK 默认权限
/etc/profile - 全局 UMASK 配置
# 设置默认 umask
umask 027
# 解释:
# 027 = 所有者读写执行,组读执行,其他无权限
# 文件默认权限:640 (rw-r-----)
# 目录默认权限:750 (rwxr-x---)
/etc/bashrc - 针对交互式 shell
# 同样设置 umask
umask 027
5.3 sudo 权限最小化
/etc/sudoers.d/custom - sudo 精细化配置
# 允许 admin 组执行所有命令
%admin ALL=(ALL) NOPASSWD: ALL
# 允许 deploy 用户仅执行特定命令
deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx
# 允许 dba 组仅管理数据库服务
%dba ALL=(ALL) NOPASSWD: /bin/systemctl * mysqld
# 禁止某些命令(即使 ALL 也不允许)
Cmnd_Alias DENIED = /bin/su -, /bin/bash, /bin/sh
ALL ALL=(ALL) !DENIED
sudo 配置务必使用 visudo 命令编辑,可以语法检查,防止配置错误导致无法提权!
六、入侵防范:服务与端口管理
6.1 关闭不必要的服务
bash - 服务最小化
# 查看所有运行中的服务
systemctl list-units --type=service --state=running
# 常见可关闭的服务(根据实际业务)
systemctl disable --now bluetooth # 蓝牙
systemctl disable --now cups # 打印服务
systemctl disable --now avahi-daemon # mDNS
# 图形界面服务器建议关闭
systemctl disable --now gdm # GNOME 显示管理器
systemctl set-default multi-user.target # 默认命令行模式
6.2 防火墙配置(firewalld/iptables)
bash - firewalld 配置
# 启动 firewalld
systemctl enable firewalld --now
# 默认拒绝所有入站
firewall-cmd --set-default-zone=drop
# 开放必要端口
firewall-cmd --permanent --add-port=2222/tcp # SSH
firewall-cmd --permanent --add-port=80/tcp # HTTP
firewall-cmd --permanent --add-port=443/tcp # HTTPS
# 限制特定 IP 访问 SSH
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2222" protocol="tcp" accept'
# 重载配置
firewall-cmd --reload
# 查看当前规则
firewall-cmd --list-all
/etc/hosts.allow + hosts.deny - TCP Wrappers
# /etc/hosts.deny - 先拒绝所有
ALL: ALL
# /etc/hosts.allow - 再允许特定
sshd: 192.168.1.0/255.255.255.0
sshd: 10.0.0.0/255.0.0.0
6.3 SELinux 配置(麒麟/openEuler)
bash - SELinux 配置
# 查看当前状态
getenforce
sestatus
# 临时开启 enforcing 模式
setenforce 1
# 永久配置(/etc/selinux/config)
SELINUX=enforcing
SELINUXTYPE=targeted
# 查看审计日志中的 SELinux 拒绝
ausearch -m avc -ts recent
# 生成允许规则
audit2allow -a -M mypolicy
semodule -i mypolicy.pp
信创建议:生产环境建议开启 SELinux enforcing 模式,虽然初期可能遇到权限问题,但安全收益巨大。
七、内核参数安全加固
7.1 网络安全参数
/etc/sysctl.conf - 网络安全内核参数
# 禁用 IP 源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 禁用 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 禁用安全 ICMP 重定向
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 开启 SYN Cookies 防止 SYN Flood
net.ipv4.tcp_syncookies = 1
# 禁用 IPv6(如不需要)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 忽略 ICMP 广播请求
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启 TCP SYN 重试次数限制
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_synack_retries = 5
7.2 内存与进程安全参数
/etc/sysctl.conf - 内存安全参数
# 开启 ASLR(地址空间布局随机化)
kernel.randomize_va_space = 2
# 限制核心转储(防止敏感信息泄露)
fs.suid_dumpable = 0
# 限制进程可以拥有的内存映射区域数量
vm.max_map_count = 65530
# 启用内存地址随机化
kernel.kptr_restrict = 2
# 限制 dmesg 访问
kernel.dmesg_restrict = 1
# 限制 perf 事件
kernel.perf_event_paranoid = 2
bash - 加载内核参数
# 立即生效
sysctl -p
# 验证配置
sysctl -a | grep accept_source_route
sysctl -a | grep randomize_va_space
八、账户安全管理
8.1 清理风险账户
bash - 账户安全检查与清理
# 检查空密码账户
awk -F: '$2 == "" {print $1}' /etc/shadow
# 锁定空密码账户
for user in $(awk -F: '$2 == "" {print $1}' /etc/shadow); do
passwd -l $user
done
# 检查 UID 为 0 的非 root 账户(后门账户)
awk -F: '$3 == 0 && $1 != "root" {print $1}' /etc/passwd
# 删除或锁定不必要的系统账户
userdel -r games 2>/dev/null
userdel -r ftp 2>/dev/null
# 检查共享账户(相同 UID)
awk -F: '{print $3}' /etc/passwd | sort | uniq -d
8.2 会话超时配置
/etc/profile - 会话超时
# 设置空闲超时时间(秒)
TMOUT=600
export TMOUT
# 600 秒 = 10 分钟无操作自动退出
/etc/ssh/sshd_config - SSH 超时
# 客户端每 300 秒发送一次保活包
ClientAliveInterval 300
# 最大保活次数
ClientAliveCountMax 3
# 总超时时间 = 300 * 3 = 900 秒 = 15 分钟
九、一键基线检查脚本
以下脚本可用于批量检查信创系统的基线合规情况:
bash - 基线检查脚本(baseline_check.sh)
#!/bin/bash
# 信创系统安全基线检查脚本
# 支持:麒麟、统信 UOS、openEuler
PASS=0
FAIL=0
check_item() {
if [ $1 -eq 0 ]; then
echo "[PASS] $2"
((PASS++))
else
echo "[FAIL] $2"
((FAIL++))
fi
}
echo "========== 信创系统基线检查 =========="
echo "检查时间: $(date)"
echo "主机名: $(hostname)"
echo "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo ""
# 1. SSH 配置检查
echo "--- SSH 安全配置 ---"
grep -q "^PermitRootLogin no" /etc/ssh/sshd_config
check_item $? "SSH 禁用 Root 登录"
grep -q "^Protocol 2" /etc/ssh/sshd_config
check_item $? "SSH 使用协议版本 2"
grep -q "^PermitEmptyPasswords no" /etc/ssh/sshd_config
check_item $? "SSH 禁用空密码"
# 2. 密码策略检查
echo "--- 密码策略 ---"
grep -q "minlen = 12" /etc/security/pwquality.conf
check_item $? "密码最小长度 12 位"
grep -q "ucredit = -1" /etc/security/pwquality.conf
check_item $? "密码包含大写字母"
grep -q "PASS_MAX_DAYS 90" /etc/login.defs
check_item $? "密码有效期 90 天"
# 3. 登录失败锁定
echo "--- 登录失败锁定 ---"
grep -q "pam_tally2" /etc/pam.d/sshd
check_item $? "SSH 登录失败锁定"
# 4. 审计配置检查
echo "--- 审计配置 ---"
systemctl is-active auditd >/dev/null 2>&1
check_item $? "auditd 服务运行"
[ -f /etc/audit/rules.d/audit.rules ]
check_item $? "审计规则文件存在"
# 5. 文件权限检查
echo "--- 文件权限 ---"
stat -c %a /etc/shadow | grep -q "^0"
check_item $? "/etc/shadow 权限正确"
stat -c %a /etc/ssh/sshd_config | grep -q "600"
check_item $? "/etc/ssh/sshd_config 权限正确"
# 6. 内核参数检查
echo "--- 内核参数 ---"
[ "$(sysctl -n net.ipv4.conf.all.accept_source_route)" = "0" ]
check_item $? "禁用 IP 源路由"
[ "$(sysctl -n kernel.randomize_va_space)" = "2" ]
check_item $? "开启 ASLR"
# 7. 账户安全检查
echo "--- 账户安全 ---"
awk -F: '$2 == "" {print $1}' /etc/shadow | wc -l | grep -q "^0$"
check_item $? "无空密码账户"
awk -F: '$3 == 0 && $1 != "root" {print $1}' /etc/passwd | wc -l | grep -q "^0$"
check_item $? "无异常 UID 0 账户"
# 8. 服务检查
echo "--- 服务状态 ---"
systemctl is-active firewalld >/dev/null 2>&1 || systemctl is-active iptables >/dev/null 2>&1
check_item $? "防火墙服务运行"
# 汇总
echo ""
echo "========== 检查汇总 =========="
echo "通过: $PASS 项"
echo "失败: $FAIL 项"
echo "合规率: $(( PASS * 100 / (PASS + FAIL) ))%"
脚本使用方法
bash - 执行检查
# 1. 保存脚本
chmod +x baseline_check.sh
# 2. 执行检查
./baseline_check.sh
# 3. 输出示例
# ========== 信创系统基线检查 ==========
# --- SSH 安全配置 ---
# [PASS] SSH 禁用 Root 登录
# [PASS] SSH 使用协议版本 2
# [FAIL] SSH 禁用空密码
# ...
# ========== 检查汇总 ==========
# 通过: 15 项
# 失败: 3 项
# 合规率: 83%
十、信创基线配置速查表
| 配置项 | 配置文件 | 推荐值 | 检查命令 |
|---|---|---|---|
| SSH 协议版本 | /etc/ssh/sshd_config | Protocol 2 | grep ^Protocol /etc/ssh/sshd_config |
| SSH Root 登录 | /etc/ssh/sshd_config | PermitRootLogin no | grep PermitRootLogin /etc/ssh/sshd_config |
| SSH 最大尝试 | /etc/ssh/sshd_config | MaxAuthTries 3 | grep MaxAuthTries /etc/ssh/sshd_config |
| 密码最小长度 | /etc/security/pwquality.conf | minlen = 12 | grep ^minlen /etc/security/pwquality.conf |
| 密码复杂度 | /etc/security/pwquality.conf | ucredit/lcredit/dcredit/ocredit = -1 | grep credit /etc/security/pwquality.conf |
| 密码有效期 | /etc/login.defs | PASS_MAX_DAYS 90 | grep PASS_MAX_DAYS /etc/login.defs |
| 登录失败锁定 | /etc/pam.d/sshd | deny=5 unlock_time=1800 | grep pam_tally2 /etc/pam.d/sshd |
| /etc/shadow 权限 | 文件权限 | 000 | stat -c %a /etc/shadow |
| /etc/ssh 目录权限 | 目录权限 | 700 | stat -c %a /etc/ssh |
| 审计服务 | systemd | active | systemctl is-active auditd |
| 防火墙 | systemd | active | systemctl is-active firewalld |
| SELinux | /etc/selinux/config | enforcing | getenforce |
| ASLR | sysctl | kernel.randomize_va_space=2 | sysctl kernel.randomize_va_space |
| IP 源路由 | sysctl | accept_source_route=0 | sysctl net.ipv4.conf.all.accept_source_route |
| 空密码账户 | /etc/shadow | 无 | awk -F: '$2==""{print $1}' /etc/shadow |
| 会话超时 | /etc/profile | TMOUT=600 | grep TMOUT /etc/profile |
十一、信创基线实施建议
📋 上线前务必在测试环境验证所有配置,特别是 SSH 和 PAM 相关配置
🔒 建议开启 SELinux enforcing 模式,配合 audit2allow 逐步解决权限问题
📊 使用基线检查脚本定期巡检,建议每月执行一次
📝 所有配置变更需记录审计日志,便于事后追溯
💾 修改关键配置前务必备份,如 cp /etc/ssh/sshd_config{,.bak}
🔄 配置修改后使用 sshd -t、visudo -c 等工具验证语法
🛡️ 等保测评前使用本文脚本预检,提前发现并修复不合规项
1182

被折叠的 条评论
为什么被折叠?



