【Linux】(12)计划任务:来看看如何防止黑客利用计划任务窃取信息以及背后的原理

目录

一、计划任务

1.1 【导入】游戏服务器资源分析

        1.2 为什么需要计划任务

        1.3 Linux里的计划任务

        1.4 创建计划任务

        1.4.1 cron命令格式

         1.4.2 时间数值的表示方法

        1.4.3 实例+具体操作

        1.4.4 普通用户创建计划任务

        1.4.5 练习

        1.5 同一时间可以做多个计划任务吗

        1.6 如何判断计划任务是否执行

        1.6.1 直接看效果

        1.6.2 看日志文件

        1.7 前台、后台

        1.8 【黑客可能利用】计划任务的顺风车

        1.8.1 操作系统的后台工作开展需要的计划任务存放在哪里

        1.9 anacron服务

二、思考

        2.1 每个用户都有自己的计划任务

        2.2 这个用户没有登录是否计划任务也会执行?

        2.3 root用户是否可以去管理其他用户的执行计划

        2.4 🖤黑客是否会利用计划任务,如何排查?

         2.5 计划任务里脚本尽量使用绝对路径

三、练习(最后来巩固以下所学吧)

        3.1 练习1

         3.2 练习2

        3.3 思考题

四、【补充】随机数


一、计划任务

按照计划准时准点去执行任务

任何脚本都可以配合计划任务来执行,做到定时完成某些事情

1.1 【导入】游戏服务器资源分析

        1.2 为什么需要计划任务

可以自动执行,不需要人干预,解放了人力,提高工作效率

        1.3 Linux里的计划任务

        crond进程:负责Linux里执行计划任务的程序,在内存里一直运行的程序(守护进程)。不要关闭

        每隔一分钟去检查Linux系统里的计划任务,最短时间间隔:一分钟

使用crontab命令调用crond进程,设置按固定周期(如每天、每周等)重复执行预先计划好的任务。

#查看crond进程是否存在
[root@localhost ~]# ps aux|grep crond
root        698  0.0  0.1 126384  1672 ?        Ss   15:46   0:00 /usr/sbin/crond -n
root       1857  0.0  0.0 112824   988 pts/0    R+   16:58   0:00 grep --color=auto crond
#重启
[root@localhost ~]# service crond restart
Redirecting to /bin/systemctl restart crond.service
#停止
[root@localhost ~]# service crond stop
#在centos7中真正执行的命令
Redirecting to /bin/systemctl stop crond.service
#启动
[root@localhost ~]# service crond start
Redirecting to /bin/systemctl start crond.service

【注】systemctl stop crond和service crond stop时等价的

        1.4 创建计划任务

(Linux系统里可以定制很多计划任务,一行一个计划任务)

crontab是创建计划任务的命令

crontab -e 编辑计划任务

crontab -l 查看计划任务

        1.4.1 cron命令格式

【格式如下:15行】

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# 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

[root@localhost ~]#

        *    表示任意时间

         1.4.2 时间数值的表示方法

        【翻译时间从右到左】

===示例

0 17 * * 1-5 ==》周一到周五每天17:00

30 8 * * 1,3,5 ==》周一、三、五的8:30

0 8-18 * * * ==》每天8点到18点整

0 12 */3 * * ==》每隔3天的12点整

===

        1.4.3 实例+具体操作

【题目】

每天23:00备份一次,使用计划任务执行

备份脚本:/root/lianxi/backup_log.sh

【步骤】

[root@localhost lianxi]# crontab -e

第一步:按i进入计划任务的编辑模式,输入以下内容

0 23 * * * /root/lianxi/backup_log.sh

第二步:按Esc,输入:wq 退出并且保存

[root@localhost lianxi]# crontab -l 查看计划任务

0 23 * * * bash /root/lianxi/backup_log.sh

        1.4.4 普通用户创建计划任务

1. lihua用户自己创建计划任务

[root@localhost cron]# su - lihua
上一次登录:三 3月 16 21:55:16 CST 2022pts/0 上
[lihua@localhost ~]$ crontab -e

2. root用户帮助lihua用户创建计划任务

[root@localhost cron]# crontab -e -u lihua

        1.4.5 练习

  1. 每隔一分钟新建一个文件夹,这个文件名里需要包含当前时间,精确到秒
  2. 新建的文件夹保存在/root/lianxi/sanchuang
  3. 脚本名字create_dir.sh

        需求分析

  1. 编写脚本实现新建文件夹,名字里包含当前的时间,精确到秒==》mkdir 和 date +%Y%m%d%H%M%S
  2. 脚本名字create_dir.sh,存放在/root/lianxi/sanchuang
  3. 制定计划任务,实现每一分钟执行上面的create_dir.sh脚本

        【答案】

时间格式==》*/1 * * * * bash /root/lianxi/sanchuang/create_dir.sh 或 * * * * * bash /root/lianxi/sanchuang/create_dir.sh

[root@localhost sanchuang]# vim create_dir.sh
[root@localhost sanchuang]# cat create_dir.sh
#!/bin/bash

#获得当前时间
ctime=$(date +%Y%m%d%H%M%S)

#新建文件夹
mkdir -p /root/lianxi/sanchuang/lihua_$ctime

[root@localhost sanchuang]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost sanchuang]# crontab -l
*/1 * * * * bash /root/lianxi/sanchuang/create_dir.sh

        1.5 同一时间可以做多个计划任务吗

答:可以,方法一:一行一个计划任务,时间点相同。方法二:都写到一个脚本中,直接做一个计划任务。

        建议:最好不要同时做很多事情,会在一个时间点消耗服务器的cpu、内存、磁盘、带宽等资源。会给服务器造成很大压力。

        1.6 如何判断计划任务是否执行

【注:希望某个计划任务不执行时,可以加#注释掉】


[root@localhost sanchuang]# ls
create_dir.sh         lihua_20220316200601  lihua_20220316200901
lihua_20220316200401  lihua_20220316200702  lihua_20220316201001
lihua_20220316200501  lihua_20220316200801  lihua_20220316201101
[root@localhost sanchuang]# crontab -e
crontab: installing new crontab
[root@localhost sanchuang]# rm -rf lihua*
[root@localhost sanchuang]# ls
create_dir.sh
[root@localhost sanchuang]# date
2022年 03月 16日 星期三 20:12:40 CST

[root@localhost sanchuang]# date
2022年 03月 16日 星期三 20:14:27 CST
[root@localhost sanchuang]# ls
create_dir.sh
[root@localhost sanchuang]# crontab -l
#*/1 * * * * bash /root/lianxi/sanchuang/create_dir.sh

        1.6.1 直接看效果

        1.6.2 看日志文件

日志:程序会记录发生的事情到文件里

crontab的日志:记录哪些计划任务的生成、执行、修改等操作 ==》/var/log/cron

CROND[22491] CROND时进程 [22491]时crond的进程好 pid号

CMD表示执行命令command

192表示用户,前面表示时间

[root@localhost log]# tail -f cron

Mar 16 20:18:01 192 crontab[2357]: (root) LIST (root)   查看
Mar 16 20:18:13 192 crontab[2358]: (root) BEGIN EDIT (root)  编辑
Mar 16 20:18:21 192 crontab[2358]: (root) REPLACE (root)  修改
Mar 16 20:18:21 192 crontab[2358]: (root) END EDIT (root)  结束编辑
Mar 16 20:19:01 192 crond[702]: (root) RELOAD (/var/spool/cron/root)   加载计划任务开始执行
Mar 16 20:19:01 192 CROND[2363]: (root) CMD (bash /root/lianxi/sanchuang/create_dir.sh)  脚本的执行输出效果 

        1.7 前台、后台

计划任务是在后台执行的,人看不到

前台:我们看得到的界面

后台:Linux系统的背后执行,我们看不到,但是有进程可以看到,只是无法看到界面

在Linux中命令后面接一个&符号,就是将这条命令放到后台执行

jobs:查看后台运行的有哪些程序

fg 1:将后台编号为1的程序调到前台执行

[root@localhost lianxi]# vim create_dir_v2.sh &
[1] 12406
[root@localhost lianxi]# jobs
[1]+  已停止               vim create_dir_v2.sh
[root@localhost lianxi]# fg 1
vim create_dir_v2.sh

        1.8 【黑客可能利用】计划任务的顺风车

Linux系统本身也有一些任务需要定时完成。例如:日志文件的轮转(每隔一段时间产生一个新的日志文件)。updatedb:(locate)每天自动更新一次

        1.8.1 操作系统的后台工作开展需要的计划任务存放在哪里

        /var/spool/cron 是存放用户的计划任务,Linux系统的后台工作开展需要的计划任务存放在哪里?

/etc下这些文件夹可以存放Linux系统的计划任务

cron.daily/ ==》存放每天需要执行的任务。若是安装了mlocate,该目录下会再加一个mlocate

cron.hourly/ ==》存放每小时需要执行的任务

cron.weekly/ ==》存放每周需要执行的任务

cron.monthly/ ==》存放每月需要执行的任务

cron.deny ==》存放拒绝执行的用户的计划任务的用户名

[root@localhost lianxi]# cd /etc/cron.
cron.d/       cron.deny     cron.monthly/
cron.daily/   cron.hourly/  cron.weekly/
[root@localhost lianxi]# cd /etc/cron.daily/
[root@localhost cron.daily]# ls
logrotate  man-db.cron
[root@localhost cron.daily]#

        1.9 anacron服务

  1. 是cron服务的补充程序,起到查漏补缺的作用
  2. 弥补cron再系统关机后不能执行计划任务的问题,等系统开机后再将没有执行的计划任务执行一遍
  3. 不能代替cron
  4. 按天、按周或月为单位去检查系统未进行的cron任务
  5. /var/spool/anacron
  6. 开机时自动运行,然后将为执行的计划执行一遍后,anacron会自动停止

二、思考

【注】本点下计划任务示例中使用的为命令,但后续检验发现,会出现问题,需要自行换为执行脚本

【补充】$USER 用户名


[root@localhost cron]# echo $USER
root

        2.1 每个用户都有自己的计划任务

[root@localhost lianxi]# useradd lihua
[root@localhost lianxi]# su - lihua
[lihua@localhost ~]$ crontab -e
no crontab for lihua - using an empty one
crontab: installing new crontab
[lihua@localhost ~]$ crontab -l
*/1 * * * * /usr/bin/mkdir -p /home/lihua/$(date +%F_%H%M%S).lihua
[root@localhost lianxi]# useradd xiaohong
[root@localhost lianxi]# su - xiaohong
[xiaohong@localhost ~]$ crontab -e
no crontab for xiaohong - using an empty one
crontab: installing new crontab
[xiaohong@localhost ~]$ crontab -l
*/1 * * * * /usr/bin/mkdir -p /home/xiaohong/$(date +%F_%H%M%S).xiaohong

        2.2 这个用户没有登录是否计划任务也会执行?

答:会执行

计划任务的存放位置:

        每个用户对应一个计划任务的文件

        Linux中一切皆文件

crond这个进程每隔一分钟就到/var/spool/cron文件夹下加载所有的文件,执行里面的计划任务

[root@localhost log]# cd  /var/spool/cron  存放任务的文件夹,和用户名对应
[root@localhost cron]# ls
lihua  root  xiaohong
[root@localhost cron]# cat lihua
*/1 * * * * /usr/bin/mkdir -p /home/lihua/$(date +%F_%H%M%S).lihua
[root@localhost cron]# cat xiaohong
*/1 * * * * /usr/bin/mkdir -p /home/xiaohong/$(date +%F_%H%M%S).xiaohong

        2.3 root用户是否可以去管理其他用户的执行计划

默认情况下,只有root用户可以查看其他用户的计划任务,其他用户只能看自己的计划任务

        2.4 🖤黑客是否会利用计划任务,如何排查?

1. 到/var/spool/cron目录下查看是否右可疑的计划任务文件;

2. 还要查看root用户本身的计划任务,是否有可疑的脚本执行

3. 还要注意查看系统的计划任务,防止黑客坐计划任务顺风车

         2.5 计划任务里脚本尽量使用绝对路径

PATH变量的问题,建议使用命令的绝对路径,防止找不到

【两个PATH变量的值不一样,计划任务里的要少一些】

[root@localhost cron]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost cron]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin

三、练习(最后来巩固以下所学吧)

        3.1 练习1

[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l

50 7 * * * bash /root/lianxi/mkdir_file.sh
50 22 * * * bash /root/lianxi/create_file.sh
0 12 */5 * * rm -rf /backup_tmp/*
30 7 * * 6 service sshd restart
30 17 * * 1,3,5 bash /root/lianxi/abc.sh
0 23 * * * bash /lianxi/backup_pwd_boot_log.sh

 【注意:变量用花括号括起来,防止造成歧义】

         3.2 练习2

[root@localhost ~]# useradd liangluyao
[root@localhost ~]# crontab -u liangluyao -e
no crontab for liangluyao - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -u liangluyao -l
55 23 * * 7 bash /root/lianxi/backup_pwd.sh
#检查是否成功为用户liangluyao创建计划任务
[root@localhost ~]# cd /var/spool/cron
[root@localhost cron]# ls
liangluyao  lihua  root  xiaohong
[root@localhost cron]# cat liangluyao
55 23 * * 7 bash /root/lianxi/backup_pwd.sh
[root@localhost lianxi]# vim backup_pwd.sh
[root@localhost lianxi]# cat backup_pwd.sh
#!/bin/bash

#使用cp命令的绝对路径,避免覆盖之前的内容时需要确认
/usr/bin/cp /etc/passwd ~liangluyao/$(date +%F)_pwd.txt
[root@localhost lianxi]# /usr/bin/cp /etc/passwd ~liangluyao/$(date +%F)_pwd.txt
[root@localhost lianxi]# ls ~liangluyao
2022-03-17_pwd.txt



 【后三行】目的:检验改脚本命令是否有错

        3.3 思考题

 【查看】

[root@localhost ~]# cd /var/spool/cron
[root@localhost cron]# ls
liangluyao  lihua  root  xiaohong

四、【补充】随机数

(()) 双圆括号是shell里的数学运算使用,双圆括号里可以不接$符号引用变量

% 取余

[root@localhost lianxi]# ((8%5))
[root@localhost lianxi]# echo $((8%5))
3
#得到随机数
[root@localhost lianxi]# echo $RANDOM
3945
[root@localhost lianxi]# echo $RANDOM
19030
#得到10以内的随机数
[root@localhost lianxi]# echo $((RANDOM%10))
6
#得到3以内的随机数
[root@localhost lianxi]# echo $((RANDOM%3))
1
[root@localhost lianxi]# echo $((RANDOM%3))
1
[root@localhost lianxi]# mkdir lihua$RANDOM
[root@localhost lianxi]# ls
lihua20922  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值