当前位置:首页>Linux>zabbix监控linux高危命令并发送告警

zabbix监控linux高危命令并发送告警

  • 2026-09-04 20:46:49
zabbix监控linux高危命令并发送告警

 如何实现命令记录?如何监控?

还在用 logrt匹配 rm、mv、wget?升级 7.0 后突然失效了?别慌,这篇给你讲透新姿势。


一、为什么要监控高危命令?

运维最怕什么?手滑 rm -rf /、误操作 mv覆盖重要文件、被入侵者悄悄 wget下载恶意脚本……

一旦发生,轻则服务挂掉,重则数据丢失。所以实时监控并告警高危命令,是每个运维团队的刚需。

传统做法:

  • 开启 bash 的 history记录,并把所有用户的命令日志统一写到 /var/log/cmd.log

  • 再用 Zabbix 监控这个日志文件,发现 rm、mv、wget就触发告警

Linux运维必备!历史命令安全审计记录+IP源+用户等

一、脚本实现审计前提:追加Linux系统的/etc/profile文件

#-----监控命令行高危命令---------------# 创建命令行记录文件log_file=/var/log/cmd.log# 如果是root的话就创建文件if [[ $UID -eq 0 ]];then  # 判断文件是否存在,不存在就创建  if [ ! -f $log_file ]  then      touch $log_file      chmod 777 $log_file      chattr +a $log_file  fifi# 定义PROMPT_COMMAND的内容为函数__set_promptexport PROMPT_COMMAND=__set_prompt# 定义PROMPT_COMMAND变量为只读变量readonly PROMPT_COMMAND# 定义最后一个history idLast_Hit_Num=`history 1 | awk '{print $1}'`__set_prompt (){    local EXIT=$? # 定义命令执行的结果      # 获取本次命令执行的history id    export Cur_HIT_NUM=`history 1 | awk '{print $1}'`      # 如果本次执行的命令和上次执行的命令一样,则id没有变化,不需要进行记录    # 如果这里不处理,空白回车也会导致记录,记录的值就是上次执行的命令    if [[ $Cur_HIT_NUM -ne $Last_Hit_Num ]];then       # 判断命令是否执行成功       if [[ $EXIT -ne 0 ]];then           echo "执行时间:$(date '+%y-%m-%d %T') 用户:$(who am i | awk "{print \$1\" \"\$2\" \"\$5}") 当前目录:$(pwd) 执行命令:$(history 1 | sed 's/^[ \t]*//g' | cut -d " " -f2-) 执行失败" >>$log_file  else           echo "执行时间:$(date '+%y-%m-%d %T') 用户:$(who am i | awk "{print \$1\" \"\$2\" \"\$5}") 当前目录:$(pwd) 执行命令:$(history 1 | sed 's/^[ \t]*//g' | cut -d " " -f2-) 执行成功" >>$log_file      fi    fi    # Cur_Hit_Num赋值给Last_Hit_Num    export Last_Hit_Num=$Last_Hit_Num    return $EXIT}#---------------------------------

退出用户重新登录,或者source一下/etc/profile使之生效。

查看记录是否成功

二、zabbix监控高危命令
适用于6.0.x,7.0有所改变表达式
1)创建一个模板
2)创建监控项
键值是:logrt[/var/log/cmd.log,,,,,,,,]
3)新建一个触发器(触发告警)
表达式如下(可以将你认为高危的指令写上去):

{LinuxGeneralTemplate:logrt[/var/log/cmd.log,,,,,,,,].str( rm )}=1or {LinuxGeneralTemplate:logrt[/var/log/cmd.log,,,,,,,,].str( mv )}=1

4)配置一个发送邮件的动作

最后测试一下

执行命令:rm /tmp/test.log

查看Zabbix告警
7.0.x版本

键值:

log.count[/var/log/cmd.log,rm|mv|wget]

触发表达式:

{你的主机名:log.count[/var/log/cmd.log,rm|mv|wget].last()}>0

恢复表达式:

{你的主机名:log.count[/var/log/cmd.log,rm|mv|wget].min(10m)}=0

最新文章

随机文章