0x01 来看看效果
高危指令出发问题告警:
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录](https://file.cfanz.cn/uploads/png/2022/03/30/8/338O7JdD48.png)
发出邮件告警:
通过历史记录回溯用户指令
![[linux运维] 利用zabbix监控linux高危命令并发送告警_命令行_03](https://file.cfanz.cn/uploads/png/2022/03/30/8/57YC131bHQ.png)
0x02 如何实现命令记录?
1)Linux操作系统可以通过history命令查询执行的历史命令信息
![[linux运维] 利用zabbix监控linux高危命令并发送告警_linux_04](https://file.cfanz.cn/uploads/png/2022/03/30/8/HdePE491A8.png)
2)BASH在每次显示PS1之前都会执行PROMPT_COMMAND定义的内容 -- 可以理解为,每次用户在命令行点击一个回车之后,PROMPT_COMMAND都会被执行一次
3)利用上面两个特性,就可以实现命令行的记录
实现:修改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
fi
fi
# 定义PROMPT_COMMAND的内容为函数__set_prompt
export PROMPT_COMMAND=__set_prompt
# 定义PROMPT_COMMAND变量为只读变量
readonly PROMPT_COMMAND
# 定义最后一个history id
Last_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使之生效。
查看记录是否成功
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录_05](https://file.cfanz.cn/uploads/png/2022/03/30/8/Z4370N1Z89.png)
0x03 在Zabbix上配置监控
1)创建一个模板
![[linux运维] 利用zabbix监控linux高危命令并发送告警_linux_06](https://file.cfanz.cn/uploads/png/2022/03/30/8/4WEP9C1646.png)
2)在模板中创建应用集
![[linux运维] 利用zabbix监控linux高危命令并发送告警_linux_07](https://file.cfanz.cn/uploads/png/2022/03/30/8/VKcK19GD1Q.png)
3)创建监控项
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录_08](https://file.cfanz.cn/uploads/png/2022/03/30/8/8ZQ46De625.png)
键值是:logrt[/var/log/cmd.log,,,,,,,,]
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录_09](https://file.cfanz.cn/uploads/png/2022/03/30/8/933M94Y791.png)
4)新建一个触发器(触发告警)
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录_10](https://file.cfanz.cn/uploads/png/2022/03/30/8/2b16JQfZ4a.png)
表达式如下(可以将你认为高危的指令写上去):
{Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( rm )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( mv )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( wget )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( curl )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( sh )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( /bin/sh )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( touch )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( vi )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( rmmod )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( start )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( stop )}=1
or {Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( restart )}=15)配置一个发送邮件的动作
![[linux运维] 利用zabbix监控linux高危命令并发送告警_命令行_11](https://file.cfanz.cn/uploads/png/2022/03/30/8/8JHA08Ofa6.png)
![[linux运维] 利用zabbix监控linux高危命令并发送告警_linux_12](https://file.cfanz.cn/uploads/png/2022/03/30/8/88Z6DM9afC.png)
0x04 测试一下
执行命令
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录_13](https://file.cfanz.cn/uploads/png/2022/03/30/8/8bB3PUD81d.png)
查看Zabbix告警
![[linux运维] 利用zabbix监控linux高危命令并发送告警_linux_14](https://file.cfanz.cn/uploads/png/2022/03/30/8/67384968N7.png)
可以看到已经发送了邮件,啥时候发恢复邮件呢?等最后一条命令不是高危命令就执行恢复了。
![[linux运维] 利用zabbix监控linux高危命令并发送告警_当前目录_15](https://file.cfanz.cn/uploads/png/2022/03/30/8/4X611136Q1.png)
查看告警邮件
![[linux运维] 利用zabbix监控linux高危命令并发送告警_命令行_16](https://file.cfanz.cn/uploads/png/2022/03/30/8/HXUSL62Z41.png)
选择问题,点击历史记录可以查看历史的命令记录
![[linux运维] 利用zabbix监控linux高危命令并发送告警_linux_17](https://file.cfanz.cn/uploads/png/2022/03/30/8/B1K80847A0.png)
![[linux运维] 利用zabbix监控linux高危命令并发送告警_命令行_18](https://file.cfanz.cn/uploads/png/2022/03/30/8/MD57666W9a.png)
--完
![[linux运维] 利用zabbix监控linux高危命令并发送告警_命令行_19](https://file.cfanz.cn/uploads/jpeg/2022/03/30/8/O21Z92Off4.jpeg)









