记一次crontab定时任务被清空的故障原因定位及复盘过程

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 记一次crontab定时任务被清空的故障原因定位及复盘过程

记一次crontab定时任务被清空的故障原因定位及复盘过程

一、问题描述及事件经过

大年二十九,接到运维值班同事反馈的一个问题:

某生产服务器上的1月17号下午1点左右业务部门运维人员通过堡垒机登录时查看crontab -l定时任务是在的

但是1/18号早上业务部门另外一名运维人员,通过堡垒机登录时查看crontab -l却发现全空了

(图片点击放大查看)

当时已经通过1月17号的堡垒机上的运维日志恢复了crontab定时任务,业务已经修复

但要回溯一下crontab -l被清空的根因, 业务部门一度怀疑17-18号这期间是不是有人绕过堡垒机登录过这台服务器,做过啥运维操作导致crontab定时任务被清空

二、问题原因分析过程

当运维值班同事的这个问题反馈过来后,开始着手分析

1、先排查SSH ACL访问控制,白名单配置文件中没有堡垒机以外的IP地址

为了证明不存在堡垒机绕过的情况,我这里直接GrayLog日志服务器查询了一下这台服务器这个时间区间的SSH登录日志 除了堡垒机IP没有其他IP有登录过服务器的SSH

(图片点击放大查看)

再说了,即使有绕过堡垒机登录的情况,GrayLog也会发送相应的堡垒机绕过告警到运维群里

所以不要怀疑自己这个SSH防堡垒机绕过的安全加固机制,要对自己有信心

2、这时查看堡垒机的1/18号最早的运维日志记录

(图片点击放大查看)

只发现crontab -l 多了一个空格,也只发现这样一个异常

我尝试在Linux虚拟机上做了测试,crontab - l 多了一个空格,这时会话会卡住

这时Ctrl+C直接退出,然后再crontab -l 查看crontab定时任务还是在的

(图片点击放大查看)

3、所以很诡异,问题陷入僵局

根据上面的测试论证,看来多一个空格也不至于说会把crontab定时任务清空哈 所以问题卡住

4、借助搜索引擎

https://blog.csdn.net/Dr_Guo/article/details/123085782
https://www.modb.pro/db/188537

这时不要禁锢在思维定势里,借助搜索引擎尝试找找有没有其他可能性

(图片点击放大查看)

(图片点击放大查看)

(图片点击放大查看)

好家伙,感觉和我现在的问题场景一模一样!

5、在Linux虚拟机下测试论证一下

crontab - l这时卡住了,然后直接关闭SecureCRT,中断SSH会话

然后再登录SSH会话,再查看crontab -l发现果然被清空了

并且/var/log/cron日志也有这个REPLACE关键字

crontab[13022]: (root) REPLACE (root)

(图片点击放大查看)

(图片点击放大查看)

6、然后GrayLog上查询cron日志发现1/18的日志中也有REPLACE关键字

(图片点击放大查看)

那就是这个原因无疑了

三、问题原因总结及后续改进措施

  • 1、问题原因:业务部门运维人员使用了错误的crontab - l 命令(多了一个空格)导致卡住,然后他看这时卡住了,接着直接关闭了这个堡垒机SSH会话,进而导致Crontab所有计划任务被清空
  • 2、问题评价:墨菲定律:你认为越没有可能发生的事情,越有可能发生

有点算一个小黑天鹅事件:虽然某个黑天鹅事件在某个时间点出现是非常小概率的事件,但是生活工作中“黑天鹅”事件是一定会出现的,只是不知道是哪一个或者在哪个时间点

  • 3、如何加固,避免这种现象再次发生
chattr +i /var/spool/cron/root (加锁:禁止修改定时任务)
chattr -i /var/spool/cron/root (解锁:先解锁,才能修改定时任务,避免误操作)
  • 4、当然也可以做告警,当堡垒机操作日志中出现chattr -i /var/spool/cron/root解锁命令时进行告警提醒
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
7月前
|
存储 安全 算法
深入探讨区块链技术的安全性
深入探讨区块链技术的安全性
477 103
|
10月前
|
开发框架 算法 安全
如何使用单点登录(SSO)提高账号安全性和用户体验?
单点登录(SSO)是作为此问题的解决方案而引入的,它是一种身份验证方案,允许用户使用一组凭据登录多个应用程序。因此,用户不必在每次需要访问其应用程序时都输入其凭据,如果跨应用程序和平台启用了 SSO,则用户对一个应用程序或平台的成功身份验证将用于访问其他连接的应用程序。
319 1
|
XML 存储 JSON
GitlabCI学习笔记之五:GitLabRunner pipeline语法之artifacts dependencies
GitlabCI学习笔记之五:GitLabRunner pipeline语法之artifacts dependencies
|
监控 安全 Shell
清除阿里云服务器挖矿病毒总结
监控发现`top`命令显示`xmrig`进程占满CPU,确认服务器遭挖矿病毒感染。通过`thistory`追溯到病毒执行步骤,包括下载恶意脚本、设置定时任务等。处理方案包括:清理异常定时任务并修复权限;查找并删除挖矿相关文件;识别并终止可疑`sh`进程;加强SSH安全,如修改端口、清除密钥、限制IP访问等,以彻底清除病毒并加固系统安全。
1597 2
|
11月前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
259 3
|
存储 PyTorch TensorFlow
Transformers 4.37 中文文档(九十六)(2)
Transformers 4.37 中文文档(九十六)
196 1
Go 项目自动重载解决方案 —— Air 使用入门
**Air**: 提升Go开发效率的利器!自动重载工具,监听文件变化,实时编译运行,无需频繁重启。安装:启用Go Module后,运行`GO111MODULE=on go install github.com/cosmtrek/air@latest`。启动项目:`air`,配置文件默认为`air.toml`。集成到项目,忽略`tmp/`目录。让代码更改即时生效,专注编码,告别手动重启。适用于开发环境,生产环境禁用。[更多详情](https://github.com/cosmtrek/air)
254 1
|
存储 安全 Java
基于springboot的新闻资讯系统的设计与实现
基于springboot的新闻资讯系统的设计与实现
|
关系型数据库 MySQL 数据库
成功解决:Navicat 连接虚拟机Docker中的mysql数据库失败(仅限某些特殊情况)
这篇文章介绍了在Ubuntu环境中使用Docker部署Flask项目的方法,包括创建测试项目、设置数据库、构建Flask和Nginx镜像以及容器编排,其中使用了MySQL 5.7作为数据库,Flask 2.0.2作为Web框架,Gunicorn 20.1.0作为应用服务器,Nginx 1.21.4作为反向代理,并解决了Navicat连接Docker中的MySQL数据库失败的问题。
|
并行计算 TensorFlow 算法框架/工具