一、问题现象
线上服务器运行过程中,进程有莫名进程被启动,怀疑是有定时任务自动启动,当你用常规方法去查看,比如使用crontab去查看定时器任务,提示no crontab for root
或者使用cat到/var/spool/cron目录下去查看定时器文件,也是提示no crontab for root
使用vim编辑定时器文件,打眼一看看到的似乎也是空白
但是你从cron定时任务日志中确看到有任务确实在执行,这是咋回事?首先你可能想到配置cron还有其他地方,比如/etc/cron.d/ 下、/etc/下,你检查一通,也都没有定时文件,咋回事呢?
二、问题原因
初次遇到这种问题时,按照常规命令检查,输出显然很是诡异,但cron日志有记录定时有任务在跑,就说明肯定是定时器存在,一定还是有问题没检查出来。
还是从当前能看到信息入手,cron的日志里,异常执行的任务中都带有个^M字符有点可疑,这个字符以前在windows上文件见到过。针对这个可疑字符,度娘了下,一下豁然开朗,原来^M在linux上可以表示为回车换行符,当我们使用cat/more等基础命令去查看带有^M的一行字符串时,终端屏幕上会把 ^M 之后的内容在同一行换行后输出,这样就覆盖掉了^M之前的内容,导致看到的前面出现的诡异现象。
三、解决方法
前面我们习惯于用cat/vim,不加任何参数,直接去看文件,内容其实都被掩藏了,很多人可能执行到这一步,就认为这一定就是个空文件,殊不知你再用相同命令,多走一步,你就可以看到事情的真相。例如:
你用 cat 加上-A参数可以读取文件的所有内容
我们用-A读取可疑文件,发现确实有一段定时任务存在
又或者,你在使用VI查看文件时,你多走一步,进入编辑模式,文本内容也会显示在你的眼前
四、经验总结
出现此类情况,通常服务器可能存在被黑客已经攻破的风险,恶意隐藏了程序代码。并且不光在crontab这种场景下,像执行脚本,配置文件等核心文件都有可能被利用隐藏恶意代码。所以防止此类情况的发生,从安全防御的角度来看,我们可以事前增加对一些关键文件的监控,例如监控文件md5值是否一致,当出现md5不一致情况,及时告警处理。