前段时间,哥们的服务器被人反弹了shell,由于反弹的地址不可达,系统总是会发送一条mail邮件到root账户,导致入侵行为被发现,由于反弹的动作是通过crontab来定时执行的,所以来梳理下crontab相关的知识点

1.crontab填写格式

基本格式 :
*  *  *  *  *  command
分 时  日  月  周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
每5分钟执行一次date命令
* /5 * * * * date

每个用户通过crontab -l可以查看当前用户级别下的定时任务,root账户可通过查看/var/spool/cron/{user} 查看不同用户的定时任务

/etc/crontab 存储的是系统级别的定时任务

2.查看crontab执行日志
cat /var/log/cron

上述定时任务在服务器不关机的情况下,会运行良好,但是如果使用的是笔记本或者经常关机的服务器的时候,crontab就力不从心了,因为当在指定时间运行的任务服务器处于关机的状态时,定时任务是不运行的,所以就要用到anacron

anacron适合于每天或每周或每个月执行一次的周期任务,配置文件是 /etc/anacrontab,配置文件格式如下

#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

period in days:定义任务执行的周期1-@daily,7-@weekly,30-@monthly

delay in minutes: 任务执行前等待的时间,以分钟计

job-identifier: 任务标识符,用于区分任务名称,在这个地方填写的标识符 会在 /var/spool/anacron/{job-identifer} 生成同名文件,该文件记录脚本执行的时间戳

command:定义要执行的命令

我编辑 /etc/anacrontab文件,添加如下行

@daily   2    cron.test   echo 2017>>/tmp/2017

添加完成后,我执行关机操作,当我再次开机2分钟以后,在/tmp/2017文件能看到2017字符,并且,在/var/spool/anacron/目录下生成cron.test文件,该文件内容为今天的日期,

这样就能证明我们的推理,但是添加完成后,等待2分钟并没有发现该任务执行,这是为什么呢?查看下 /etc/cron.d/0hourly文件如下;

HELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
01 * * * * root run-parts /etc/cron.hourly

上述脚本的意思是在每个小时会通过 run-parts脚本执行/etc/cron.hourly目录下的可执行文件 (run-parts命令在/usr/bin/run-parts 使用方法是在脚本后面跟上一个目录即可)

而/etc/cron.hourly/0anacron 脚本如下

#!/bin/bash

# Skip excecution unless the date has changed from the previous run

if test -r /var/spool/anacron/cron.daily; then

day=`cat /var/spool/anacron/cron.daily`

fi

if [ `date +%Y%m%d` = "$day" ]; then

exit 0;

fi

# Skip excecution unless AC powered

if test -x /usr/bin/on_ac_power; then

/usr/bin/on_ac_power &> /dev/null

if test $? -eq 1; then

exit 0

fi

fi

/usr/sbin/anacron -s

对比文件中的日期信息,如果不对应,会执行 anacron -s 命令,而anacron会读取配置文件 /etc/anacrontab 这个配置文件里面记录了每天,每周,每个月要执行的任务,所以可以理解为:

在centos6下,anacrontab的周期执行是依靠crontab在每个小时执行一次维持的,他们两个的区别如下:

综上,在排查后门的时候要排查的文件

/var/spool/cron/{user},

/var/spool/anacron/*

/etc/cron.d/*

/etc/cron.hourly,

/etc/cron.daily,

/etc/cron.weekly,

/etc/cron.monthly,

/etc/anacrontab

参考链接:https://www.tecmint.com/cron-vs-anacron-schedule-jobs-using-anacron-on-linux/

最新文章

  1. java目录与classpath
  2. 用vuejs写了一个酷狗的webApp
  3. HDOJ 2089 不要62
  4. shapely and geos break在distance方法
  5. Jmeter笔记1:使用Badboy录制脚本,作为JMeter测试的素材
  6. 编程语言拟人化:Java、C++、Python、Ruby、PHP、C#、JS!--隆重推荐转
  7. 如何学习C++[转]
  8. windows下安装redis和php的redis扩展
  9. BZOJ1631: [Usaco2007 Feb]Cow Party
  10. FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全
  11. [lua] 你所不知道的lua nil值在可变参数函数中怎么处理!
  12. JavaScript数组对象方法
  13. P2515 [HAOI2010]软件安装
  14. Windows远程连接的实现
  15. Sum It Up---(DFS)
  16. JavaEE第六周
  17. Codeforces555 B. Case of Fugitive
  18. TestMap
  19. 1.2.3 Excel中姓名处理,将名加密星号
  20. Laravel表单传值

热门文章

  1. pytest_1安装和启动
  2. Array数组对象
  3. sha256---利用java自带的实现加密
  4. CoverflowJS
  5. shadow使用方法
  6. 【机器学习】聚类算法:ISODATA算法
  7. [ASP.NET] 解决点击控件下载文件没有响应的问题
  8. 第十周java总结
  9. Java第六周实验+总结
  10. 多网卡的bond模式-把多个物理网卡绑定成一个逻辑上的网卡