Linux计划任务那点事儿

  • A+
所属分类:安全闲碎

Linux计划任务那点事儿

Linux 中经常看到利用 crontab 留后门,从接触的样本看多利用方式多是:

  • ① 是直接利用 crontab 命令;
  • ② 直接修改/etc/crontab。

不论是样本,还是博客对其它方式讨论较少。

本文主要讨论:

  • ① 计划任务有哪些类别;
  • ② 直接修改数据文件方式创建计划任务及其中的关键点;

linux 计划任务实现可分为:crontab、at、cron、anacron。

1. crontab

命令格式如下图所示:Linux计划任务那点事儿

1.1 用户级计划任务

数据文件位置

  • ubuntu:/var/spool/cron/crontabs/{username}
  • centos:/var/spool/cron/{username}

1.1.1 修改已存在计划任务文件

此时直接修改文件内容即可正常运行,如修改/var/spool/cron/crontabs/root 实现 root 用户计划任务后门。

1.1.2 新建计划任务文件

如果用户级计划任务文件不存在,可手动创建。步骤:

①.在其它位置创建计划任务文件,写入内容,设置权限(权限 0600);

② 移动文件到计划任务文件目录。注意:若直接在/var/spool/cron/crontabs 目录下创建计划任务文件,然后修改权限,计划任务不会被正常识别(具体原因待研究源码)。

如下图所示为正常 crontab 命令创建的文件:Linux计划任务那点事儿手动构建时 uid 必须与用户名相对应,gid 目前测试不必是 crontab。下图 demo 可正常运行:Linux计划任务那点事儿

1.2 系统级计划任务

数据文件为/etc/crontab,可直接修改该文件。

2. at&batch

batch 本质为 at,故此处只讨论 at。at 用于创建单次计划任务。

2.1 数据文件位置

  • ubuntu:/var/spool/cron/atjobs/{filename}
  • centos:/var/spool/at/{filename}

文件名格式:a[5 位任务序号][8位分钟为单位的时间戳],如 a00009019df4c6(文件名算法可参考at源码)。如下图所示为某次创建的计划任务:Linux计划任务那点事儿

2.2 修改已存在的计划任务文件

可直接修改目录下 14 位文件名中的命令。

2.3 新建计划任务文件

步骤

① 创建文件,文件名满足规范;

② 写入待执行的命令;

③ 修改文件权限;

④ 向 atd 发送 SIGHUP(kill -1 atdpid 即可);

⑤ 文件会在设定的时间执行。

特殊说明:手动构造文件计划运行的时间可早于当前时间,此时发送 SIGHUP 后会立即执行。文件中需含有相关运行环境,建议复制 at 创建的计划任务文件中的相关设置,否则可能无法正常运行。at虽在.SEQ文件中记录了当前已使用的最高序号,但实际构造中可任意使用序号。

at 创建的文件权限如下图所示:Linux计划任务那点事儿

3. anacron

粒度只能到天,未启动的任务会定期检查并执行(crontab 未执行的不会重新执行)。

3.1 数据文件位置

/etc/anacrontab,可直接修改。

4. cron

4.1 数据文件位置

/etc/cron.d/,/etc/cron.daily/,/etc/cron.hourly/,/etc/cron.monthly/,/etc/cron.weekly/。

4.2 新建计划任务文件

4.2.1 修改/etc/cron.d/

该目录下放置单个计划任务文件(注意:文件名不能有扩展名,否则文件会被忽略),时间格式类似 crontab,但需指定执行时的用户身份,demo 如下图所示:Linux计划任务那点事儿正常创建时权限如下图:Linux计划任务那点事儿

4.2.2 修改其他位置

/etc/cron.daily/,/etc/cron.hourly/,/etc/cron.monthly/,/etc/cron.weekly/,这四个位置可放置真正想要执行的程序。

5. 计划任务日志

默认位置

/var/log/syslog(ubuntu)

/var/log/cron(centos)

ref

  • https://github.com/V3ded/osx-linux-backdoor/blob/master/backdoor.sh
  • https://stackoverflow.com/questions/53151124/jobs-in-etc-cron-d-are-not-working-on-ubuntu
  • https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
  • https://kb.iu.edu/d/afiz
  • https://blog.csdn.net/sinat_30071459/article/details/51191693
  • https://docs.oracle.com/cd/E19253-01/817-0403/sysrescron-18108/index.html
  • https://stackoverflow.com/questions/21615673/difference-between-cron-crontab-and-cronjob
  • https://blog.csdn.net/sinat_30071459/article/details/51191693
  • https://docs.oracle.com/cd/E19253-01/817-0403/sysrescron-18108/index.html
  • https://blog.csdn.net/zzb5233/article/details/78239318
  • https://stackoverflow.com/questions/45817456/unix-editing-system-crontab-etc-crontab-and-restarting-cron-services-after
  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-Automating_System_Tasks#s1-Scheduling_a_Recurring_Asynchronous_Job_Using_Anacron
  • http://blog.lujun9972.win/blog/2018/04/19/%E4%BD%BF%E7%94%A8anacron%E5%AE%9A%E6%9C%9F%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1/index.html

-----微信ID:SecWiki-----
SecWiki,9年来一直专注安全技术资讯分析!

本文始发于微信公众号(SecWiki):Linux计划任务那点事儿

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: