CentOS 触发器安全实践
一 概念与风险边界
二 systemd 触发器的安全配置
useradd -r -s /usr/sbin/nologin -d /opt/triggers triggers[Service] 中设置 User=triggers、Group=triggers,避免使用 root。chattr +i 保护关键脚本。StandardOutput=journal+console、StandardError=journal,通过 journalctl -u your.service -f 审计。auditctl -w /opt/triggers/ -p wa -k triggers)。AccuracySec=1s 降低抖动。[Service] 中使用 ExecStartPre=/usr/bin/pidof -x your-script.sh || true 或文件锁,确保单实例。systemctl daemon-reload 与回滚预案。[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
[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 为例)
UserParameter 直接拼接用户输入;在脚本内严格校验参数与路径。/etc/sudoers.d/zabbix 中用 NOPASSWD 限定)。smtp、smtp-auth 等),提升可达性与可审计性。#!/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"
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
/usr/local/zabbix/scripts/check_firewalld.sh:#!/usr/bin/env bash
if systemctl is-active --quiet firewalld; then
echo 1
else
echo 0
fi
UserParameter=check.firewalld,/usr/local/zabbix/scripts/check_firewalld.shcheck.firewalld,类型数值),设置触发器:当值等于 0 时告警(表示防火墙未运行)。四 通用加固清单
yum update 与安全补丁更新;启用自动安全更新(如 yum-cron/dnf-automatic)以缩短暴露窗口。