本節所講內容:
1-1 Linux中的計划任務
1-1-1 at計划任務的使用
1-1-2 cron 計划任務的使用
1-1 Linux服務器的日志管理
1-1-1 日志的種類和記錄的方式
1-1-2 實戰-自定義ssh服務的日志存儲
1-1-3 擴展-日志的回滾
1-1-4 實戰-搭建rsyslog遠程日志服務器
====================================================
計划任務:在某個時段自動執行某個任務。
Linux 系統中有兩條指令用於設置計划任務,at、cron
at計划任務:只執行一次,然后就沒有然后了!!!!
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ... #使用計時器(timespec)來執行計划任務
at [-V] [-q x] [-f file] [-mMlbv] -t time #在某個時間執行計划任務
at -c job ...
atq [-V] [-q x]
at [ -rd ] job ...
atrm [-V] job ...
at –b
-m Send mail to the user when the job has completed even if there was no output.#當計划任務完成(即使這個命令沒有輸出)時,向用戶發送郵件
-M Never send mail to the user. #不發送通知
-f file Reads the job from file rather than standard input. #從文件中讀取計划任務,而不是從標准輸入中讀取
-t time run the job at time, given in the format [[CC]YY]MMDDhhmm[.ss] #在time這個時間執行計划任務,格式為 [[CC]YY]MMDDhhmm[.ss]
-l Is an alias for atq. #atq 命令的別名
-r Is an alias for atrm. #atrm命令的別名
-d Is an alias for atrm.#
-b is an alias for batch. #
-v Shows the time the job will be executed before reading the job.
Times displayed will be in the format "Thu Feb 20 14:50:00 1997".
-c cats the jobs listed on the command line to standard output.
配置文件:
/var/spool/at
/var/spool/at/spool
/proc/loadavg
/var/run/utmp
/etc/at.allow
/etc/at.deny
服務:atd
開啟atd服務
[root@localhost ~]# systemctl status atd
[root@localhost ~]# systemctl restart atd
[root@localhost ~]# systemctl enable atd
實戰-使用at創建計划任務
[root@localhost ~]# date #查詢當前系統時間
Tue Aug 23 23:34:26 CST 2016
[root@localhost ~]# at 23:36 #設置計划任務,在23:36分執行
at> mkdir /root/1607 #輸入要執行的命令
at> <EOT> #輸入ctrl+d退出
job 6 at Tue Aug 23 23:36:00 2016
[root@localhost ~]# at –l #查看當前的計划任務(執行一次的)
[root@localhost ~]# atq #同上
[root@localhost ~]# at 20:00 2017-10-1 #計划任務的特殊格式(在未來的某一天)
[root@localhost ~]# at now +10min #計划任務的特殊格式(在10min后)
對於系統來說 :計划任務 就是在某個特定的時刻 執行一個腳本文件
創建成功的at計划任務會在/var/spool/at/目錄下成生一個可執行的腳本文件
/var/spool/at/*
查看/var/spool/at/*
每一個腳本都對應一個at計划任務
刪除at計划任務:
atrm 命令
atrm + 計划任務的編號
[root@localhost ~]# atrm 3 #刪除編號 是3的計划任務
[root@localhost ~]# ls /var/spool/at/ #設置成功的計划任務,會在這個目錄下生成一個文件[root@localhost ~]# rm -rf /var/spool/at/a00007017f36d0 #刪除其中一個文件,在查看,會發現,計划任務已取消
[root@localhost ~]# at -r 8 #刪除計划任務命令格式
[root@localhost ~]# atrm 8 #刪除計划任務的另一個命令格式
at -l信息解析:
10 Tue Aug 23 23:50:00 2016 a root10 –> 任務編號為10 Tue Aug 23 23:50:00 2016 --->任務執行時間(2016年8月23日星期二的23:50分) root--->執行者
總結:at計划任務執行一次,下次就不能再次執行
====================================================
crond是cron執行計划任務的服務,crond命令會定期檢查是否有要執行的工作,如果有,便會自動執行該工作。
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。
linux任務調度的工作主要分為以下兩類:
*系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存. 例如/tmp 臨時目錄
*個人執行的工作:某個用戶定期要做的工作,由每個用戶自行設置。
啟動服務
[root@localhost ~]# systemctl status crond #查詢服務狀態
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2016-08-23 22:43:37 CST; 1h 10min ago
Main PID: 1250 (crond)
CGroup: /system.slice/crond.service
└─1250 /usr/sbin/crond -n
Aug 23 22:43:37 localhost.localdomain systemd[1]: Started Command Scheduler.
Aug 23 22:43:37 localhost.localdomain systemd[1]: Starting Command Scheduler...
Aug 23 22:43:37 localhost.localdomain crond[1250]: (CRON) INFO (RANDOM_DELAY will be scale....)
Aug 23 22:43:37 localhost.localdomain crond[1250]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl restart crond #crond服務重啟
[root@localhost ~]# systemctl enable crond #crond設置開機自啟
cron命令參數介紹: (個人用戶級別)
crontab的參數:
crontab -u #指定某個用戶的cron服務;
crontab -l #列出cron服務的詳細內容;
crontab -r #刪除cron服務;
crontab -e #編輯cron服務;
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
Default operation is replace, per 1003.2
例如:
crontab -u root -l # root查看自己的cron計划任務:
crontab -u san -r # root想刪除san的cron計划任務:
cron文件語法:
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command 一般一行對應一個任務
特殊符號的含義:
"*"代表取值范圍內的數字,(任意)
"/"代表"每", 20/
"-"代表從某個數字到某個數字, 6-18
","分開幾個離散的數字 6,18
# 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
創建計划任務
可用crontab -e命令來編輯,編輯的是/var/spool/cron下對應用戶的cron文件.
crontab的計划任務內容保存在目錄/var/spool/cron下面
[root@localhost ~]# cd /var/spool/cron/
[root@localhost cron]# ls
空的!!!
編輯計划任務
[root@localhost cron]# crontab -u root -e
5 * * * * mkdir /ro
再次查看:
也可以直接在/etc/crontab中添加計划任務
cron服務每分鍾不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用cron服務做一些事情。
用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務
編輯/etc/crontab 配置文件 (詳解)
SHELL=/bin/bash #變量的指,指定SHELL環境(次默認為bash shell)
PATH=/sbin:/bin:/usr/sbin:/usr/bin #PATH變量,指定執行的命令的程序路徑
MAILTO=root #如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號
[root@localhost ~]# vim /etc/crontab
10 0 * * * root mkdir /opt/aaa
[root@xuegod63 ~]# date
Thu Aug 25 00:10:07 CST 2016
[root@localhost ~]# ls /opt/
aaa rh
系統級別的計划任務
對於系統級別的計划任務,需要執行的命令和腳本都放在這里:
/etc/cron.* 按兩次tab
[root@localhost ~]# ls /etc/cron
cron.d/ cron.deny cron.monthly/ cron.weekly/
cron.daily/ cron.hourly/ crontab
目錄作用解釋:
cron.d/ #是系統自動定期需要做的任務,但是又不是按小時,按天,按星期,按月來執行的,那么就放在這個目錄下面。
cron.deny #控制用戶是否能做計划任務的文件;
cron.monthly/ #每月執行的腳本;
cron.weekly/ #每周執行的腳本;
cron.daily/ #每天執行的腳本;
cron.hourly/ #每小時執行的腳本;
crontab #主配置文件 也可添加任務;
計划任務案例:
1. 每天晚上21:30 重啟apache
30 21 * * * /etc/init.d/httpd restart
2. 每月1、10、22日的4 : 45重啟apache。
45 4 1,10,22 * * /etc/init.d/httpd restart
3. 每月1到10日的4 : 45重啟apache。
45 4 1-10 * * /etc/init.d/httpd restart
4. 周一到周五每天晚上 21:15 寄一封信給 root@xuegod63:
15 21 * * 1-5 mail -s "hi" root@localhost < /etc/fstab
[root@localhost ~]# cat /var/spool/mail/root
anacron
cron用控制循環執行例行性工作。如果我要設定機器每早8點進行備份用服務。除非我機器保證在8點這個時間點不會關機,如果關機了,cron中的腳本,在下次開機將不會被執行。
anacron並沒有取代cron的意思,anacron用於,機器重啟后,會偵測停機期間,有沒有cron沒有執行的計划任務,如果有,會立即,執行一下沒有執行的任務。
==============================================================================
1-2 Linux系統中的日志管理
1-2-1 日志的管理
日志對於安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以通過他來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。
日志主要的功能有:審計和監測。他還可以實時的監測系統狀態,監測和追蹤侵入者等等
/var/log 存放日志的位置.
常用的日志文件如下:
btmp 紀錄失敗的紀錄
lastlog 紀錄最近幾次成功登錄的事件和最后一次不成功的登錄
messages 從syslog中記錄信息(有的鏈接到syslog文件)
utmp 紀錄當前登錄的每個用戶
wtmp 一個用戶每次登錄進入和退出時間的永久紀錄
/var/log/wtmp 系統登錄的情況登入登出
vim 編輯 是加密的內容
last 命令查看日志內容
哪個用戶在哪個時間通過哪種方式登錄系統的情況
清空日志文件
再次使用last查看
2./var/log/lastlog 最后登錄信息
lastlog 記錄所有的用戶什么時候登錄過系統
lastlog 和 last的區別
last 查看IP
lastlog 查看后門的賬號
3./var/log/btmp 用戶登錄系統的錯誤信息
lastb 查看
發現是空的
模擬使用ssh錯誤的連接本機
再次查看
會產生相應的內容
如果說你發現你的btmp文件變得很大,說明有很大的可能是有人在暴力破解你的主機
可使用 ll -h 查看文件的大小
1-2-2 日志的記錄方式:
分類.級別
日志的種類:
daemon 后台進程相關
kern 內核產生的信息
lpr 打印系統產生的
authpriv 安全認證
cron 定時相關
mail 郵件相關
syslog 日志服務本身的
news 新聞系統
local 0-local 7 8個系統保留的類 供其它的程序使用 /或者是用戶自定義
日志的級別: 輕-重
debug 排錯的信息
info 正常的信息
notice 注意
warn 警告
err 錯誤
crit 關鍵的錯誤
alert 警報
energ 緊急 #系統快崩潰了
日志服務
舊版本 rhel5 服務名稱 syslog
配置文件 /etc/syslog.conf
rhel6-7
服務名稱 rsyslog
配置文件 /etc/rsyslog.conf
編輯配置文件 vim /etc/rsyslog.conf
#kern.* 內核類型的所有級別日志存放到 /dev/console
*.info;mail.none;authpriv.none;cron.none /var/log/messages
所有的類別 級別是info以上 除了mail,authpriv,cron (產生的日志太多,不易於查看)
類別.級別
authpriv.* 認證的信息存放 /var/log/secure
mail.* 郵件相關的信息存放 -/var/log/maillog
cron.* 計划任相關的信息存放 /var/log/cron
local7.* 開機時顯示的信息存放--> /var/log/boot.log
在mail.* 的指定文件前面,有個-
由於郵件的信息比較多,先將數據存儲到內存,當達到一定大小,全部寫到硬盤.有利於減少I/O進程的開銷
數據存儲在內存,如果關機不當會造成數據消失
日志輸入的規則
. info 高於info級別的信息全部記錄到某個文件
.= 級別 僅記錄等於某個級別的日志
例:.=info 只記錄info級別的日志
.! 級別 除了某個級別意外,記錄所有的級別信息
例.!err 除了err外 記錄所有
.none 指的是排除某個類別
=============================================================================
實戰-自定義ssh服務的日志
1.編輯rsyslog配置文件
編輯文件 vim /etc/rsyslog.conf
輸入 local 0 .* /var/log/sshd.log #日志的保存路徑
2.定義ssh服務的日志級別
編輯sshd服務的主配置文件vim /etc/ssh/sshd_config
/定位查找 關鍵字Syslog,更改級別是local 0 ,保存退出.
SyslogFacility local0
3.生效配置文件
先重啟rsyslog服務(生效配置)
systemctl restart rsyslog.service
再重啟sshd服務.生成日志
systemctl restart sshd
4.驗證是否生成日志並查看其中的內容
查看/var/log 出現 sshd.log
查看/var/log/sshd.log內容
時間 主機 服務 進程ID 相關的信息
如何防止日志被heike刪除
chattr +a /var/log/sshd.log
lsattr /var/log/sshd.log
日志的回滾
在linux下的日志會定期進行回滾,
控制系統執行日志回滾操作的配置文件主要有
/etc/logrotate.conf 以及 /etc/logrotate.d/ 這個目錄下的明細配置文件。
日志是很大的,如果讓日志無限制的記錄下去 是一件很可怕的事情
日積月累 就有幾百兆 占用磁盤的空間
如果你要找出某一條可用信息à海底撈針
日志回滾原理:當日志達到某個特定的大小,我們將日志分類,之前的日志保留一個備份,再產生的日志創建一個同名的文件保存新的日志.
實戰
編輯配置文件/etc/logrotate.conf
weekly : 每周執行回滾
rotate : 保留4個副本
create : 創建新的文件存儲數據
單獨配置
/var/log/wtmp { 指定的日志文件
monthly
create 0664 root utmp
minsize 1M 文件超過1M進行回滾
rotate 1 回滾產生的副本
old文件
========================================================
實戰配置-日志回滾 在ssh日志的基礎上
編輯配置文件
[root@localhost ~]# vim /etc/logrotate.conf
創建數據
[root@localhost ~]# dd if=/dev/zero of=/var/log/sshd.log bs=1M count=10
[root@localhost ~]# du -sh /var/log/sshd.log
10M /var/log/sshd.log
時間設置
[root@localhost ~]# date -s 2017-01-01
Sun Jan 1 00:00:00 EST 2017
生效配置文件
[root@localhost ~]# logrotate /etc/logrotate.conf
查看備份效果
再次查看文件的大小 為空
第二種方法 執行logrotate 腳本
更改時間
[root@localhost ~]# date -s 2020-02-02
添加數據
[root@localhost ~]# dd if=/dev/zero of=/var/log/sshd.log bs=1M count=10
[root@localhost ~]# du -sh /var/log/sshd.log
10M /var/log/sshd.log
執行腳本
[root@localhost ~]# sh /etc/cron.daily/logrotate
驗證效果
=============================================================================
實戰:配置遠程日志服務器->實現日志集中的管理
server localhost(IP 192.168.171.122)
client xiaogan63.cn(IP 192.168.171.63)
第一步:server端配置
編輯 /etc/rsyslog.conf
UDP—>速度快—>不保證數據的完整
TCP—>可靠—>完整
使用TCP的方式
去除#號注釋
重新啟動 rsyslog
systemctl restart rsyslog
查看服務監聽的狀態
netstat -anlpt| grep 514
第二步:client端配置:
先ping一下服務器,看看通不通(關掉防火牆!!!)
vim/etc/rsyslog.conf
*.* 所有類別和級別的日志
@@192.168.171.122:514 服務端的IP:端口
重啟rsyslog 服務
systemctl restart rsyslog
第三步:服務端驗證
輸入如下命令:
tail -f /var/log/message #動態的顯示到終端
client 重啟服務
systemctl restart atd
服務端顯示變化如下: