温馨提示×

centos触发器如何安全

小樊
36
2025-12-21 15:02:04
栏目: 智能运维

CentOS 触发器安全实践

一 概念与风险边界

  • CentOS 环境中,“触发器”通常指两类自动化机制:
    • systemd 定时器/路径/服务触发器:用于按时间或事件自动执行脚本或服务。
    • 监控平台的触发器(如 Zabbix):当监控指标达到阈值时执行动作(脚本、告警)。
  • 主要风险点:
    • 权限过度:以 root 运行或脚本可被提权,导致横向渗透。
    • 供应链与脚本注入:触发器调用的脚本来源不明、参数未校验,易被命令注入。
    • 隐蔽性与审计缺失:触发器在后台运行,无日志或告警,异常难以发现。
    • 凭证泄露:在脚本或配置中硬编码 SMTP/API 密钥,或被进程列表/日志外泄。
    • 邮件可投递性不足:使用本机 MTA 发信易被标记为垃圾,导致告警丢失。

二 systemd 触发器的安全配置

  • 最小权限运行
    • 创建专用低权用户(如 triggers),禁止登录:
      • 创建用户:useradd -r -s /usr/sbin/nologin -d /opt/triggers triggers
    • 服务单元以该用户运行:
      • [Service] 中设置 User=triggersGroup=triggers,避免使用 root
  • 脚本与目录加固
    • 触发器脚本集中到受控目录(如 /opt/triggers/),权限 0750,属主 triggers:triggers
    • 禁止在工作目录写入可执行文件;必要时使用只读挂载或 chattr +i 保护关键脚本。
  • 日志与审计
    • 使用 systemd Journal 记录:StandardOutput=journal+consoleStandardError=journal,通过 journalctl -u your.service -f 审计。
    • 启用 auditd 对触发器脚本与目录做关键文件访问审计(如 auditctl -w /opt/triggers/ -p wa -k triggers)。
  • 定时器与并发控制
    • 使用 OnCalendar/OnBootSec 精确调度,避免过于频繁;必要时设置 AccuracySec=1s 降低抖动。
    • 防止重叠执行:在 [Service] 中使用 ExecStartPre=/usr/bin/pidof -x your-script.sh || true 或文件锁,确保单实例。
  • 最小网络暴露
    • 触发器脚本如需联网(如发信、调用 API),仅允许出站到必要目标;通过 firewalld 默认拒绝、仅放行白名单。
  • 变更与回滚
    • 使用 git 管理触发器脚本与单元文件;变更前后做 systemctl daemon-reload 与回滚预案。
  • 示例(最小权限与单实例)
    • /etc/systemd/system/check-disk.service
      [Unit]
      Description=Check disk and send alert
      After=network.target
      
      [Service]
      Type=oneshot
      User=triggers
      Group=triggers
      ExecStart=/opt/triggers/check-disk.sh
      StandardOutput=journal
      StandardError=journal
      
    • /etc/systemd/system/check-disk.timer
      [Unit]
      Description=Run disk check every hour
      [Timer]
      OnCalendar=hourly
      AccuracySec=1s
      Persistent=true
      [Install]
      WantedBy=timers.target
      
    • 启用:systemctl daemon-reload && systemctl enable --now check-disk.timer

三 监控平台触发器的安全配置(以 Zabbix 为例)

  • 代理与脚本隔离
    • Zabbix Agent 上以低权用户运行,脚本放入受控目录(如 /usr/local/zabbix/scripts/),权限 0750,属主 zabbix:zabbix
    • 自定义监控项仅暴露必要命令,避免 UserParameter 直接拼接用户输入;在脚本内严格校验参数与路径。
  • 触发器动作最小权限
    • 动作中执行的脚本同样以低权用户运行;如需提权,使用 sudo 精细化授权,仅允许特定脚本与参数(在 /etc/sudoers.d/zabbix 中用 NOPASSWD 限定)。
  • 告警通道安全
    • 优先使用外部 SMTPAPI 网关发信,避免在脚本中硬编码口令;可将凭据存入受控的凭据库或 Vault,脚本运行时读取。
    • 配置 mailx 使用外部 SMTP 中继(编辑 /etc/mail.rc 设置 smtpsmtp-auth 等),提升可达性与可审计性。
  • 示例:安全发信脚本片段(使用外部 SMTP)
    #!/usr/bin/env bash
    export EMAIL="alert@example.com"
    export SUBJECT="[Zabbix] $1"
    shift
    BODY=$(printf '%s\n' "$@")
    echo "$BODY" | mailx -r "$EMAIL" -s "$SUBJECT" -- "$EMAIL"
    
    • /etc/mail.rc 中配置外部 SMTP(示例):
      set smtp=smtp://smtp.example.com:587
      set smtp-auth=login
      set smtp-auth-user=user@example.com
      set smtp-auth-password=YourAppPassword
      set ssl-verify=ignore
      
  • 监控项示例:确保 firewalld 处于运行状态
    • 脚本 /usr/local/zabbix/scripts/check_firewalld.sh
      #!/usr/bin/env bash
      if systemctl is-active --quiet firewalld; then
        echo 1
      else
        echo 0
      fi
      
    • Zabbix Agent 配置包含自定义键目录,新增键:
      UserParameter=check.firewalld,/usr/local/zabbix/scripts/check_firewalld.sh
    • Zabbix Web 创建监控项(键值 check.firewalld,类型数值),设置触发器:当值等于 0 时告警(表示防火墙未运行)。

四 通用加固清单

  • 账户与权限
    • 禁用不必要的 root 直接登录;使用 sudo 精细化授权;删除或锁定无用账号;为触发器创建专用低权账户
  • 系统与网络
    • 启用并正确配置 firewalld/iptables,仅开放必要端口;对管理口与敏感网段实施更严格规则。
  • 软件与补丁
    • 定期执行 yum update 与安全补丁更新;启用自动安全更新(如 yum-cron/dnf-automatic)以缩短暴露窗口。
  • 日志与监控
    • 集中收集 rsyslog/journald 日志,配置 logrotate;部署 IDS/IPS(如 Snort/Suricata)与主机加固基线,持续监测异常行为。
  • 备份与恢复
    • 对触发器脚本、单元文件与监控配置做版本化备份定期恢复演练,确保失效可快速回滚。

0