如何监控文件变化,比如密码修改导致 shadow 文件变化
原始需求是如果系统的密码被修改,或者创建了新用户,就告警出来。本质上,只需要监控 /etc/shadow 文件变化即可。但是在指标监控体系里,这个事情就比较棘手,只能把文件的 mtime 作为指标的值上报,服务端再利用 delta 或者 increase 函数来判断 mtime 是否发生了变化。告警出来的文本也会比较简陋。
使用 catpaw 搭配 FlashDuty 则可以很好的解决这个问题。告警的样例效果如下:

下面我们来看看如何实现。
1. 下载 catpaw
最新版本是 0.6.0,下载地址是:https://download.flashcat.cloud/catpaw-v0.6.0-linux-amd64.tar.gz 目前只提供了 linux-amd64 版本,如有其他版本的需求可以联系我。
解压后可以看到如下内容:
.
├── catpaw
├── conf.d
│ ├── config.toml
│ ├── p.exec
│ │ └── exec.toml
│ ├── p.filechange
│ │ └── filechange.toml
│ ├── p.http
│ │ └── http.toml
│ ├── p.journaltail
│ │ └── journaltail.toml
│ ├── p.mtime
│ │ └── mtime.toml
│ ├── p.net
│ │ └── net.toml
│ ├── p.ping
│ │ └── ping.toml
│ └── p.sfilter
│ └── sfilter.toml
└── scripts
├── demo.sh
├── df.sh
├── greplog.sh
└── ulimit.sh
11 directories, 14 files
其中 catpaw 是二进制文件,conf.d 目录下是各个插件的配置文件,scripts 目录下是一些示例脚本。
2. 主配置
这里最核心的配置是conf.d/config.toml,需要配置一下 flashduty.url,您需要先注册 FlashDuty,注册地址是:https://console.flashcat.cloud/signup。
FlashDuty 是一个事件 OnCall 中心,可以聚合各类监控系统的事件,比如 Zabbix、Prometheus、PagerDuty、云监控、蓝鲸、Nightingale、Elastalert 等等,然后统一进行事件聚合降噪、排班、认领、升级等等。
注册 FlashDuty 之后,系统会引导你创建协作空间,您可以在协作空间下面添加一个自定义集成:

完事点击这个自定义集成,就可以拿到 url 了,拷贝一下 url,贴到 catpaw 的 conf.d/config.toml 中即可。
3. 配置插件
监控文件变化,可以使用 filechange 插件,配置文件在 conf.d/p.filechange/filechange.toml,样例如下:
[[instances]]
time_span = "3m"
filepaths = ["/etc/shadow"]
check = "file changed"
interval = "30s"
[instances.alerting]
## Enable alerting or not
enabled = true
## Same functionality as Prometheus keyword 'for'
for_duration = 0
## Minimum interval duration between notifications
repeat_interval = "5m"
## Maximum number of notifications
repeat_number = 3
## Whether notify recovery event
recovery_notification = true
## Choice: Critical, Warning, Info
default_severity = "Warning"
4. 启动 catpaw
我这里简单测试,使用 nohup 启动,如果生产环境,自然是建议 systemd 或者 supervisor 托管:
nohup ./catpaw &> stdout.log &
5. 测试
手工创建个用户,比如 sudo useradd qinxiaohui,就会导致 /etc/shadow 文件发生变化,进而产生告警,大家可以自行尝试一下。效果如下:

扩展阅读
如何监控文件变化,比如密码修改导致 shadow 文件变化的更多相关文章
- Linux 改动inittab文件及忘记密码等导致无法进入系统的解决办法
改动inittab文件及忘记密码等导致无法进入系统的解决办法[摘] by:授客 QQ:1033553122 inittab是linux的系统启动模式配置文件,在”/etc“文件目录下没,其内容是: # ...
- Centos7系统kvm虚机忘记密码进不去, 通过宿主机修改/etc/shadow文件改密码,重启后系统起不来故障排错
问题描述 某天, 因为其他项目组交接问题, kvm里面的堡垒机系统用户root密码登录不上,然后他通过宿主机修改/etc/shadow文件修改密码,但是修改完后重启系统后发现kvm宿主机连接不上虚机了 ...
- 以流方式读写文件:文件菜单打开一个文件,文件内容显示在RichTexBox中,执行复制、剪切、粘贴后,通过文件菜单可以保存修改后的文件。
MainWindow.xaml文件 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...
- php获取json文件数据并动态修改网站头部文件meta信息 --基于CI框架
话不多说了.直接开始吧 (如果有中文.请注意json只认utf-8编码) 首先你需要有一个json文件数据 { "index": { ...
- (转) RHEL7 忘记密码修改root密码
博客链接:http://blog.csdn.net/derkampf/article/details/54346516 RHEL7进入单用户方式和重置密码方式发生了较大变化,GRUB由b引导变成了ct ...
- livezilla账号或密码修改方法
livezilla的账号和密码不在数据库,保存在php文件里面. 今天想修改一下网站livezilla系统管理员账号和密码,去数据库找了半天没找到,推测可能是存在文件中.搜索了一下,果然是在livez ...
- Win10无法修改编辑hosts文件
Win10无法修改编辑hosts文件 一.总结 一句话总结: 这里我的问题是windows的某次更新中把hosts文件或者上级目录设置成了只读,在文件属性中去掉这个只读就好 后文的操作相当于是给文件添 ...
- 【相当实用】如何让TortoiseSVN导出新增或修改过的文件
当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文件就没有必要上载到服务器.但一个稍微上规模的网站 ...
- 使用.net Reflector手动修改单个dll文件
在项目中修改bug会存才版本混乱的问题,加上dll中的依赖项目比较多,想要修改单个dll文件中的少量代码是很麻烦的. 可以使用Reflector和Reflexil可以手动修改单个dll文件,我使用的是 ...
- C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
原文:C# 文件操作(全部) 追加.拷贝.删除.移动文件.创建目录 修改文件名.文件夹名 本文也收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归 ...
随机推荐
- 连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?
最近,Gartner发布了2020年公共云容器报告,阿里云连续两年成为唯一入选的中国企业.报告显示,阿里云容器服务在中国市场表现强劲,产品形态丰富,在 Serverless 容器.服务网格.安全沙箱容 ...
- SaaS服务的私有化部署,这样做最高效|云效工程师指北
简介:为了能够有效且高效地同时管理SaaS版本和私有化版本的发布过程,云效团队也结合云原生的基础设施和标准化工具(比如helm)进行了一系列的探索和实践,并将其中一些通能的能力进行了产品化.本文从问 ...
- Docker Volume 的经常用法区别
对于使用 NFS 的 Docker 数据卷,配置示例应当类似于这样: version: '3' services: my_service: image: your_image volumes: # 挂 ...
- UWP 写入图片 Exif 信息
本文告诉大家如何在 UWP 中,保存图片的时候,写入 Exif 信息,也就是如照片的 相机型号 制造商 光圈值等信息的写入 在 UWP 中,保存图片或照片需要用到图片编码器,在使用编码器写入前可以设置 ...
- 理解FPGA内部的同步信号、异步信号和亚稳态
FPGA(Field-Programmable Gate Array),即现场可编程门阵列.主要是利用内部的可编程逻辑实现设计者想要的功能.FPGA属于数字逻辑芯片,其中也有可能会集成一部分模拟电路的 ...
- 习题8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim
2. 设计一个"1001"串行数据检测器,其输入.输出如下: 输入x:000 101 010 010 011 101 001 110 101 输出z:000 000 000 010 ...
- 开源相机管理库Aravis例程学习(五)——camera-api
目录 简介 例程代码 函数说明 arv_camera_get_region arv_camera_get_pixel_format_as_string arv_camera_get_pixel_for ...
- nim 6. 使用包
本来想按照制作包 - 发布包 - 使用包的顺序写.发现制作包一时还没搞懂,先看看怎么使用包吧. nim的包管理工具,是自带的 nimble. nimble的官方包列表是:Nim package di ...
- 一键自动化博客发布工具,用过的人都说好(infoq篇)
infoq的博客发布界面也是非常简洁的.首页就只有基本的标题,内容和封面图片,所以infoq的实现也相对比较简单. 一起来看看吧. 前提条件 前提条件当然是先下载 blog-auto-publishi ...
- MSP 通过 Splashtop SOS 远程支持非托管设备
RMM 是 MSP 的绝佳工具.它们使 MSP 可以通过集中控制台来管理其所有客户计算机,通常使他们能够远程访问任何计算机以提供远程支持. 但是,这样做的一个很大限制是--并非所有客户设备都在 MSP ...