银河麒麟V10系统安全加固:自动化脚本集成5项关键配置
1. 国产操作系统安全加固的必要性
在当前的IT基础设施环境中,国产操作系统正逐步成为关键业务系统的重要支撑平台。作为国产操作系统的代表之一,银河麒麟V10在政务、金融、能源等领域得到广泛应用。然而,随着部署规模的扩大,系统安全问题也日益凸显。
传统的手工安全加固方式存在几个明显痛点:
- 效率低下:每台服务器需要重复执行相同的配置步骤
- 一致性差:人工操作容易遗漏关键配置项
- 维护困难:配置变更难以批量同步到所有服务器
针对这些问题,我们开发了一个集成化的安全加固脚本,能够一次性完成以下核心安全配置:
- 账户登录限制(包括root账户管控)
- 密码复杂度策略强制实施
- SSH服务安全加固
- PAM认证模块优化(使用pam_faillock替代pam_tally2)
- 系统审计日志配置
2. 脚本设计与架构
2.1 整体架构
我们的安全加固脚本采用模块化设计,每个安全功能点对应独立的函数模块,便于后期维护和功能扩展。脚本整体架构如下:
#!/bin/bash # 银河麒麟V10安全加固脚本v1.2 # 功能:集成账户安全、密码策略、SSH加固等核心安全配置 # ------------------------------ # 全局变量定义 # ------------------------------ readonly BACKUP_DIR="/var/security_backup" readonly LOG_FILE="/var/log/security_harden.log" # ------------------------------ # 模块1:账户安全配置 # ------------------------------ config_account_security() { # 具体实现... } # ------------------------------ # 模块2:密码策略配置 # ------------------------------ config_password_policy() { # 具体实现... } # 其他模块...2.2 关键特性
- 非破坏性执行:所有修改前自动备份原配置文件
- 幂等设计:重复执行不会导致配置重复添加
- 详细日志:记录所有操作步骤和变更内容
- 环境检测:自动识别系统版本和架构
3. 核心安全功能实现
3.1 账户登录限制
脚本通过以下方式强化账户安全:
# 锁定root直接登录 lock_root_login() { # 备份原始配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 禁用root登录 sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config # 重启SSH服务 systemctl restart sshd }同时配置账户锁定策略:
| 参数 | 默认值 | 说明 |
|---|---|---|
| deny | 5 | 最大失败尝试次数 |
| unlock_time | 600 | 账户锁定时间(秒) |
| fail_interval | 900 | 失败计数时间窗口 |
3.2 密码复杂度策略
密码策略配置通过PAM模块实现,关键参数如下:
# 配置密码复杂度要求 config_password_complexity() { # 安装必要组件 yum install -y libpwquality # 配置密码策略 cat > /etc/security/pwquality.conf <<EOF minlen = 8 minclass = 4 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 EOF }密码策略参数说明:
minlen=8:密码最小长度8位minclass=4:必须包含4种字符类型(大小写字母、数字、特殊字符)dcredit=-1:至少包含1个数字ucredit=-1:至少包含1个大写字母lcredit=-1:至少包含1个小写字母ocredit=-1:至少包含1个特殊字符
4. SSH服务加固
SSH作为主要的远程管理通道,需要特别加强安全防护。我们的脚本实现了以下加固措施:
harden_ssh_service() { # 修改默认端口 sed -i 's/^#Port 22/Port 8822/' /etc/ssh/sshd_config # 禁用不安全的协议版本 sed -i 's/^#Protocol 2/Protocol 2/' /etc/ssh/sshd_config # 配置会话超时 echo "ClientAliveInterval 300" >> /etc/ssh/sshd_config echo "ClientAliveCountMax 3" >> /etc/ssh/sshd_config # 限制最大认证尝试次数 echo "MaxAuthTries 3" >> /etc/ssh/sshd_config # 重启SSH服务 systemctl restart sshd }注意:修改SSH端口后,请确保防火墙规则相应调整,否则可能导致无法连接
5. PAM模块配置优化
银河麒麟V10已不再支持传统的pam_tally2模块,需要使用pam_faillock替代:
config_pam_faillock() { # 配置system-auth文件 cat >> /etc/pam.d/system-auth <<EOF auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600 auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=600 EOF # 配置password-auth文件 cat >> /etc/pam.d/password-auth <<EOF auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600 auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=600 EOF }关键参数说明:
deny=5:允许5次失败尝试unlock_time=600:账户锁定10分钟audit:记录审计日志silent:不显示提示信息
6. 日志审计配置
完善的日志记录是安全运维的基础,脚本配置了以下日志策略:
config_logging() { # 配置rsyslog远程日志 sed -i 's/#$ModLoad imudp/$ModLoad imudp/' /etc/rsyslog.conf sed -i 's/#$UDPServerRun 514/$UDPServerRun 514/' /etc/rsyslog.conf # 添加日志服务器配置 cat >> /etc/rsyslog.conf <<EOF *.* @10.0.0.100:514 EOF # 重启日志服务 systemctl restart rsyslog }日志保留策略配置:
| 日志类型 | 保留周期 | 压缩 | 最大大小 |
|---|---|---|---|
| auth.log | 30天 | 是 | 100M |
| secure | 30天 | 是 | 100M |
| messages | 7天 | 否 | 500M |
7. 脚本使用与维护
7.1 执行方式
脚本支持多种执行方式:
# 全量执行所有安全加固 ./security_harden.sh --all # 仅执行指定模块 ./security_harden.sh --module ssh,pam # 测试模式(不实际修改配置) ./security_harden.sh --test7.2 维护与更新
为方便后续维护,脚本设计了以下功能:
- 配置回滚:自动备份原始配置,可通过
--rollback参数恢复 - 版本检查:支持
--version参数查看当前版本 - 更新检测:支持
--check-update检查新版本
7.3 注意事项
- 执行脚本前建议先进行系统备份
- 生产环境建议先在测试环境验证
- 修改SSH端口后需确保防火墙规则同步更新
- 密码策略变更仅对新密码生效
在实际项目中,这个脚本已经帮助多个客户实现了银河麒麟V10系统的快速安全加固,将原本需要数小时的手工配置缩短到几分钟内完成,同时保证了配置的一致性和可审计性。