學習筆記:CentOS7學習之十七: Linux計划任務與日志的管理


學習筆記:CentOS7學習之十七: Linux計划任務與日志的管理


本文用於記錄學習體會、心得,兼做筆記使用,方便以后復習總結。內容基本完全參考學神教育教材,圖片大多取材自學神教育資料,在此非常感謝MK老師和學神教育的優質教學。希望各位因學習需求而要進行轉載時,能申明出處為學神教育,謝謝各位!


17.1 計划任務-at-cron-計划任務使用方法

計划任務的作用:是做一些周期性的任務,在生產中的主要用來定期備份數據

CROND:這個守護進程是為了周期性執行任務或處理等待事件而存在

任務調度分兩種:系統任務調度,用戶任務調度

計划任務的安排方式分兩種:

  • 一種是定時性的,也就是例行。就是每隔一定的周期就要重復來做這個事情,通過at實現
  • 一種是突發性的,就是這次做完了這個事,就沒有下一次了,臨時決定,只執行一次的任務,通過crontab實現

at和crontab這兩個命令:

  • at:它是一個可以處理僅執行一次就結束的指令
  • crontab:它是會把你指定的工作或任務,比如:腳本等,按照你設定的周期一直循環執行下去

17.1.1 at計划任務的使用

語法格式: at 時間 ;服務:atd

如下所示:

centos7下


[root@centos-7-24 ~]# systemctl start atd # 啟動atd服務
[root@centos-7-24 ~]# systemctl status atd # 查看atd服務狀態
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since 五 2019-06-21 00:11:10 CST; 3min 37s ago #狀態為active表示已經啟動
 Main PID: 7149 (atd)
    Tasks: 1
   CGroup: /system.slice/atd.service
           └─7149 /usr/sbin/atd -f

6月 21 00:11:10 centos-7-24 systemd[1]: Started Job spooling tools.
[root@centos-7-24 ~]# systemctl enable atd #將atd服務加入開機啟動
[root@centos-7-24 ~]# systemctl list-unit-files --type service|grep atd #查看atd服務開機狀態,顯示enable,成功
atd.service                                   enabled 
rpc-statd-notify.service                      static  
rpc-statd.service                             static  

centos6下


[root@centos6-22 ~]# service atd start #啟動atd服務
[root@centos6-22 ~]# service atd status #查看atd服務狀態
atd (pid  11139) is running...
[root@centos6-22 ~]# chkconfig --list  |  grep atd #查看atd自啟動設置
atd            	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@centos6-22 ~]# chkconfig atd on #開啟atd服務開機自啟動
[root@centos6-22 ~]# chkconfig --list  |  grep atd #在runlevel 2、3、4、5下均為on說明開機自啟動已經設置好了
atd            	0:off	1:off	2:on	3:on	4:on	5:on	6:off


實例:使用at創建計划任務

[root@centos6-22 ~]# date #查看當前時間
Fri Jun 21 00:36:36 PDT 2019
[root@centos6-22 ~]# at 00:39 
at> mkdir /test  #輸入需要執行的命令
at> touch /test/attest1.txt
at> <EOT>  #crtl+D結束
job 1 at 2019-06-21 00:39
[root@centos6-22 ~]# at -l #查看計划任務
1	2019-06-21 00:39 a root
[root@centos6-22 ~]# atq #查看計划任務
1	2019-06-21 00:39 a root
[root@centos6-22 ~]# ll /test/ #查看發現執行成功
total 0
-rw-r--r--. 1 root root 0 Jun 21 00:39 attest1.txt
[root@centos6-22 ~]# at -l #執行完成后,計划任務清空

17.1.2 查看和刪除at將要執行的計划任務

查看,只能看到還沒有執行的。如果這個任務已經開始執行或者執行完成了,是看不到的

如下所示:


[root@centos6-22 ~]# at 03:20am #創建at任務
at> rm -rf /test/attest1.txt
at> cp /etc/passwd /test/
at> echo "ok"  
at> <EOT>
job 2 at 2019-06-21 03:20
[root@centos6-22 ~]# at -l #查看at任務列表
2	2019-06-21 03:20 a root

at任務列表說明

任務編號 執行的時間 隊列 執行者
2 2019-06-21 03:20 a root
[root@centos6-22 ~]# at -c 2 #查看編號為2的at任務詳情
#!/bin/sh
# atrun uid=0 gid=0
# mail yangjie 0
umask 22
HOSTNAME=centos6-22; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
USER=root; export USER
LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:mi=01\;05\;37\;41:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lz=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.bz=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=01\;36:\*.au=01\;36:\*.flac=01\;36:\*.mid=01\;36:\*.midi=01\;36:\*.mka=01\;36:\*.mp3=01\;36:\*.mpc=01\;36:\*.ogg=01\;36:\*.ra=01\;36:\*.wav=01\;36:\*.axa=01\;36:\*.oga=01\;36:\*.spx=01\;36:\*.xspf=01\;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass; export SSH_ASKPASS
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
XAUTHORITY=/root/.xauth9hNSXA; export XAUTHORITY
cd /root || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER44b61201' #這里時at任務的詳細類容
rm -rf /test/attest1.txt
cp /etc/passwd /test/
echo "ok"

marcinDELIMITER44b61201

[root@centos6-22 ~]# ls /var/spool/at/ #at計划任務在/var/spool文件夾下
a00002018d02ec  spool
[root@centos6-22 ~]# tail -5 /var/spool/at/a00002018d02ec  #查看末尾5行就能查看任務詳細內容
rm -rf /test/attest1.txt
cp /etc/passwd /test/
echo "ok"

marcinDELIMITER44b61201

刪除at計划任務

語法: atrm 任務編號


[root@centos6-22 ~]# at -l
3	2019-06-21 04:00 a root
2	2019-06-21 03:20 a root
[root@centos6-22 ~]# atrm 3 #刪除at定時任務3
[root@centos6-22 ~]# at -l
2	2019-06-21 03:20 a root


17.1.3 crontab定時任務的使用

crond命令定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作

cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。

linux任務調度的工作主要分為以下兩類:

系統執行的工作:系統周期性所要執行的工作,如更新whatis數據庫 updatedb數據庫,日志定期切割,收集系統狀態信息,/tmp定期清理
用戶執行的工作:定時備份數據庫等

啟動crond服務:


[root@CentOS 7-23 ~]# systemctl start crond #啟動crond服務
[root@CentOS 7-23 ~]# systemctl enable crond #設置crond開機啟動

17.1.4 cron命令參數介紹

crontab的參數:

crontab -u hr #指定hr用戶的cron服務
crontab -l #列出當前用戶下的cron服務的詳細內容
crontab -u yangjie -l #列出指定用戶yangjie下的cron服務的詳細內容
crontab -r #刪除cron服務
crontab -e #編輯cron服務

例如:

crontab -u root -l     # root查看自己的cron計划任務
crontab -u san -r      # root想刪除san的cron計划任務

cron -e 編輯時的語法,如下圖所示:

星期日用0或7表示

一行對應一個任務,特殊符號的含義:

* 代表取值范圍內的數字 (任意/每)
/ 指定時間的間隔頻率 */10 0-23/2
- 代表從某個數字到某個數字 8-17
分開幾個離散的數字 6,10-13,20

17.1.5 創建計划任務

例1:每天凌晨2點1分開始備份數據


[root@CentOS 7-23 ~]# crontab -e #創建當前用戶root的定時任務
...
1 2 * * * tar czvf /opt/grub2.tar.gz /boot/grub2
...

no crontab for root - using an empty one
crontab: installing new crontab


[root@CentOS 7-23 ~]# crontab -u yangjie -l #查看用戶yangjie的定時任務
30 0 * * 0 cp /etc/passwd /home/yangjie


注:所有用戶的計划任務,都會在/var/spool/cron/下產生對應的文件


[root@CentOS 7-23 ~]# ll /var/spool/cron
總用量 8
-rw-------. 1 root root 49 6月  22 00:27 root
-rw-------. 1 root root 40 6月  22 00:37 yangjie

17.1.6 系統級別的計划任務


[root@CentOS 7-23 ~]# ll /etc/crontab #查看系統級別的定時任務
-rw-r--r--. 1 root root 451 6月  10 2014 /etc/crontab
[root@CentOS 7-23 ~]# vim /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


也可以直接在/etc/crontab中添加計划任務

使用crontab命令的注意事項:

環境變量的問題

清理你的郵件日志 ,比如使用重定向 >/dev/null 2>&1


[root@CentOS 7-23 ~]# ll /etc/cron*
-rw-------. 1 root root   0 11月 20 2018 /etc/cron.deny #控制用戶是否能做計划任務的文件;
-rw-r--r--. 1 root root 451 6月  22 00:40 /etc/crontab #主配置文件 也可添加任務;

/etc/cron.d: #是系統自動定期需要做的任務,但是又不是按小時,按天,按星期,按月來執行的,那么就放在這個目錄下面。
總用量 16
-rw-r--r--. 1 root root 128 11月 20 2018 0hourly
-rw-r--r--. 1 root root 108 10月 30 2018 raid-check
-rw-r--r--. 1 root root 459 10月 16 2018 sa-update
-rw-------. 1 root root 235 10月 31 2018 sysstat

/etc/cron.daily: #每天執行的文件在這個目錄下面
總用量 12
-rwx------. 1 root root 219 10月 31 2018 logrotate
-rwxr-xr-x. 1 root root 618 10月 30 2018 man-db.cron
-rwx------. 1 root root 208 4月  11 2018 mlocate

/etc/cron.hourly: #每小時執行的文件在這個目錄下
總用量 8


還有:

cron.monthly/ #每月執行的腳本;

cron.weekly/ #每周執行的腳本;

17.1.7 常見的計划任務寫法和案例

1、每天晚上21:00 重啟apache

0 21 * * * systemctl restart httpd # 0 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、每隔兩天的上午8點到11點的第3和第15分鍾重啟apache

3,15 8-11 */2 * * /etc/init.d/httpd restart

5、晚上11點到早上7點之間,每隔一小時重啟apache

0 23-7/1 * * * /etc/init.d/httpd restart

6、周一到周五每天晚上 21:15 寄一封信給 root@panda:

15 21 * * 1-5 mail -s "hi" root@panda < /etc/fstab

7、案例要求:

每天2:00備份/etc/目錄到/tmp/backup下面

將備份命令寫入一個腳本中

每天備份文件名要求格式: 2017-08-19_etc.tar.gz

在執行計划任務時,不要輸出任務信息

存放備份內容的目錄要求只保留三天的數


[root@CentOS 7-23 ~]# mkdir /tmp/backup #創建/tmp/backup文件夾
[root@CentOS 7-23 ~]# vim backup.sh #編輯backup腳本
#!/bin/bash

tar -czvf /tmp/backup/`date +'%Y-%m-%d'`_etc.tar.gz /etc/ #創建以日期+_etc.tar.gz命名的/etc/歸檔文件

find /tmp/backup/ -name *_etc.tar.gz -mtime +3 -exec rm -rf {}\; #刪除/tmp/backup下修改日期超過3天的歸檔文件

[root@CentOS 7-23 ~]# chmod 755 backup.sh #修改backup.sh文件的執行權限
[root@CentOS 7-23 ~]# crontab -u root -e #為用戶root添加定時任務
1 2 * * * tar czxf /opt/grub2.tar.gz /boot/grub2
0 2 * * * /root/backup.sh & > /dev/null #明天02:00執行backup.sh同時不顯示任何信息

crontab: installing new crontab
[root@CentOS 7-23 ~]# crontab -l #查看定時任務列表
1 2 * * * tar czxf /opt/grub2.tar.gz /boot/grub2
0 2 * * * /root/backup.sh & > /dev/null

17.2 日志的種類和記錄的方式-自定義ssh服務日志類型和存儲位置

在centos7中,系統日志消息由兩個服務負責處理:systemd-journald和rsyslog

17.2.1 常見日志文件的作用

系統日志文件概述:/var/log目錄保管由rsyslog維護的,里面存放的一些特定於系統和服務的日志文件

日志文件 用途
/var/log/message 大多數系統日志消息記錄在此處。有也例外的:如與身份驗證,電子郵件處理相關的定期作業任務等
/var/log/secure 安全和身份驗證相關的消息和登錄失敗的日志文件。 ssh遠程連接產生的日志
/var/log/maillog 與郵件服務器相關的消息日志文件
/var/log/cron 與定期執行任務相關的日志文件
/var/log/boot.log 與系統啟動相關的消息記錄
/var/log/dmesg 與系統啟動相關的消息記錄

例1:查看哪個IP地址經常暴力破解系統用戶密碼

[root@centos-7-24 ~]# ssh root@192.168.234.23 #在24上遠程登陸23,故意輸錯三次密碼
The authenticity of host '192.168.234.23 (192.168.234.23)' can't be established.
ECDSA key fingerprint is SHA256:y4YpS7A4EB9G7GdT8weTstd5C4Y7iic8CoeTUy7Dc04.
ECDSA key fingerprint is MD5:32:66:6e:7a:76:ef:d7:c4:e9:0a:d3:f8:fe:33:7c:11.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.234.23' (ECDSA) to the list of known hosts.
root@192.168.234.23's password: 
Permission denied, please try again.
root@192.168.234.23's password: 
Permission denied, please try again.
root@192.168.234.23's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

[root@CentOS 7-23 ~]# grep Failed /var/log/secure #在23上查看登陸失敗信息
Jun 24 21:44:03 CentOS 7-23 sshd[18379]: Failed password for root from 192.168.234.24 port 59360 ssh2
Jun 24 21:44:09 CentOS 7-23 sshd[18379]: Failed password for root from 192.168.234.24 port 59360 ssh2
Jun 24 21:44:13 CentOS 7-23 sshd[18379]: Failed password for root from 192.168.234.24 port 59360 ssh2

[root@CentOS 7-23 ~]# grep Failed /var/log/secure|awk '{print $12}'|uniq -c

#awk '{print $11}'  #以空格做為分隔符,打印第11列的數據
#uniq命令用於報告或忽略文件中的重復行,-c或——count:在每列旁邊顯示該行重復出現的次數;

      3 192.168.234.24

例2:/var/log/wtmp文件的作用

/var/log/wtmp也是一個二進制文件,記錄每個用戶的登錄次數和持續時間等信息。
可以用last命令輸出wtmp中內容: last 顯示到目前為止,成功登錄系統的記錄


[root@CentOS 7-23 ~]# last #使用last查看系統最近的登陸信息
yangjie  pts/0        :0               Mon Jun 24 21:40   still logged in   
yangjie  :0           :0               Mon Jun 24 21:40   still logged in   
reboot   system boot  3.10.0-693.el7.x Mon Jun 24 21:39 - 21:51  (00:12)    
yangjie  pts/1        :0               Sat Jun 22 01:08 - 01:34  (00:26)    
yangjie  pts/0        :0               Sat Jun 22 00:18 - 01:34  (01:15)    
yangjie  :0           :0               Sat Jun 22 00:18 - down   (01:16) 


[root@CentOS 7-23 ~]# last -f /var/log/wtmp
yangjie  pts/0        :0               Mon Jun 24 21:40   still logged in   
yangjie  :0           :0               Mon Jun 24 21:40   still logged in   
reboot   system boot  3.10.0-693.el7.x Mon Jun 24 21:39 - 21:54  (00:15)    
yangjie  pts/1        :0               Sat Jun 22 01:08 - 01:34  (00:26)    
yangjie  pts/0        :0               Sat Jun 22 00:18 - 01:34  (01:15)    
yangjie  :0           :0               Sat Jun 22 00:18 - down   (01:16) 

例3:使用 /var/log/btmp文件查看暴力破解系統的用戶

/var/log/btmp文件是記錄錯誤登錄系統的日志。如果發現/var/log/btmp日志文件比較大,大於1M,就算大了,就說明很多人在暴力破解ssh服務,此日志需要使用lastb程序查看


[root@CentOS 7-23 ~]# ll /var/log/btmp
-rw-------. 1 root utmp 1536 6月  24 21:44 /var/log/btmp

[root@CentOS 7-23 ~]# lastb
root     ssh:notty    192.168.234.24   Mon Jun 24 21:44 - 21:44  (00:00)    
root     ssh:notty    192.168.234.24   Mon Jun 24 21:44 - 21:44  (00:00)    
root     ssh:notty    192.168.234.24   Mon Jun 24 21:44 - 21:44  (00:00)    
root     pts/0                         Mon Jun 24 21:42 - 21:42  (00:00)    

btmp begins Mon Jun 24 21:42:00 2019

#發現后,使用防火牆,拒絕掉:命令如下:
iptables -A INPUT -i eth0 -s. 192.168.234.24 -j DROP

17.2.2 日志的記錄方式

日志的命名規則:分類-》級別,形式為:分類.級別,分別說明如下::

日志的分類:

分類 說明
daemon 后台進程相關
kern 內核產生的信息
lpr 打印系統產生的
authpriv 安全認證
cron 定時相關
mail 郵件相關
syslog 日志服務本身的
news 新聞系統
local0~7 自定義的日志設備

備注:local0-local7 8個系統保留的類, 供其它的程序使用或者是用戶自定義

日志的級別: 輕>重

編碼 優先級 嚴重性
7 debug 信息對開發人員調試應用程序有用,在操作過程中無用
6 info 正常的操作信息,可以收集報告,測量吞吐量等
5 notice 注意,正常但重要的事件
4 warning 警告,提示如果不采取行動。將會發生錯誤。比如文件系統使用90%
3 err 錯誤,阻止某個模塊或程序的功能不能正常使用
2 crit 關鍵的錯誤,已經影響了整個系統或軟件不能正常工作的信息
1 alert 警報,需要立刻修改的信息
0 emerg 緊急,內核崩潰等嚴重信息

17.2.3 rsyslog日志服務

rhel5 ->服務名稱syslog ->配置文件 /etc/syslog.conf
rhel6-7 ->服務名稱rsyslog ->配置文件 /etc/rsyslog.conf

查看日志的配置文件信息:


[root@CentOS 7-23 ~]# vim /etc/rsyslog.conf
....

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514 #允許514端口接收使用UDP協議轉發過來的日志

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514 #允許514端口接收使用TCP協議轉發過來的日志
....

....
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
# 所有的類別級別是info以上 除了mail,authpriv,cron

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
#所有的認證的信息存放到/var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
#所有的郵件相關的信息存放到/var/log/maillog,“- ”號: 郵件的信息比較多,現將數據存儲到內存,達到一定大小,全部寫到硬盤.有利於減少I/O進程的開銷,數據存儲在內存,如果關機不當數據消失


# Log cron stuff
cron.*                                                  /var/log/cron 
#計划任務相關的信息存放到 /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*


# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
#開機時顯示的信息存放到/var/log/boot.log

17.2.4 日志輸入的規則

.info 大於等於info級別的信息全部記錄到某個文件

.=級別 僅記錄等於某個級別的日志

	例:.=info  只記錄info級別的日志

.!級別 除了某個級別意外,記錄所有的級別信息

	例.!err  除了err外記錄所有

.none 指的是排除某個類別 例: mail.none 所有mail類別的日志都不記錄

17.2.5 自定義ssh服務的日志類型和存儲位置


[root@CentOS 7-23 ~]# vim /etc/rsyslog.conf

#添加:local0.*                 /var/log/sshd.log #把local0級別的所有日志添加到/var/log/sshd.log

定義ssh服務的日志類別為local0,編輯sshd服務的主配置文件


[root@CentOS 7-23 ~]# vim /etc/ssh/sshd_config
[root@CentOS 7-23 ~]# ll /var/log/sshd.log
-rw-------. 1 root root 151 6月  24 23:12 /var/log/sshd.log #查看發現/var/log下面存在sshd.log文件,說明修改成功
[root@CentOS 7-23 ~]# cat /var/log/sshd.log
Jun 24 23:12:24 CentOS 7-23 sshd[20137]: Server listening on 0.0.0.0 port 22.
Jun 24 23:12:24 CentOS 7-23 sshd[20137]: Server listening on :: port 22.

17.3 日志切割-搭建遠程日志收集服務器

17.3.1 日志的切割

在linux下的日志會定期進行滾動增加,我們可以在線對正在進行回滾的日志進行指定大小的切割(動態),如果這個日志是靜態的。比如沒有應用向里面寫內容。那么我們也可以用split工具進行切割;其中Logrotate支持按時間和大小來自動切分,以防止日志文件太大。

logrotate配置文件主要有:

/etc/logrotate.conf 以及 /etc/logrotate.d/ 這個子目錄下的明細配置文件。

logrotate的執行由crond服務調用的。


[root@CentOS 7-23 ~]# vim /etc/cron.daily/logrotate  #查看logrotate腳本內容

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf #調用/etc/logrotate.conf文件
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

[root@CentOS 7-23 ~]# less /etc/logrotate.conf #查看/etc/logrotate.conf文件

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here #配置有wtmp和btmp日志的logrotate日志切割配置
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

[root@CentOS 7-23 ~]# ll /etc/logrotate.d #查看/etc/logrotate.d下的明細配置文件,存在不同服務的logrotate配置文件
總用量 64
-rw-r--r--. 1 root root   91 4月  11 2018 bootlog
-rw-r--r--. 1 root root  160 9月  15 2017 chrony
-rw-r--r--. 1 root root   71 4月  11 2018 cups
-rw-r--r--. 1 root root  172 9月  30 2016 iscsiuiolog
-rw-r--r--. 1 root root  165 5月  29 08:16 libvirtd
-rw-r--r--. 1 root root  142 5月  29 08:16 libvirtd.qemu
-rw-r-----. 1 root named 514 6月   5 03:26 named
-rw-r--r--. 1 root root  106 4月  11 2018 numad
-rw-r--r--. 1 root root  136 6月  10 2014 ppp
-rw-r--r--. 1 root root  408 8月   3 2017 psacct
-rw-r--r--. 1 root root  115 10月 31 2018 samba
-rw-r--r--. 1 root root   68 10月 16 2018 sa-update
-rw-r--r--. 1 root root  224 10月 30 2018 syslog
-rw-r--r--. 1 root root  188 10月 31 2018 vsftpd
-rw-r--r--. 1 root root  100 10月 31 2018 wpa_supplicant
-rw-r--r--. 1 root root  103 11月  5 2018 yum
[root@CentOS 7-23 ~]# cat /etc/logrotate.d/yum #查看yum服務的logrotate配置文件
/var/log/yum.log {
    missingok #在日志輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤
    notifempty #如果日志文件為空,輪循不會進行
    maxsize 30k #文件超過30k進行日志切割
    yearly #每年執行一次日志回滾
    create 0600 root root #重建用戶為root,屬組為root,執行權限為0600的/var/log/yum.log文件
}

logrotate程序每天由cron在指定的時間(/etc/crontab)啟動

日志是很大的,如果讓日志無限制的記錄下去 是一件很可怕的事情,日積月累就有幾百兆占用磁盤的空間。

因此需要做日志切割,當日志達到某個特定的大小,我們將日志分類,之前的日志保留一個備份,再產生的日志創建一個同名的文件保存新的日志.

17.3.2 實戰演示

編輯配置文件


[root@CentOS 7-23 ~]# vim /etc/logrotate.conf

# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# 說明:(全局參數)
#weekly :	  每周執行回滾,或者說每周執行一次日志回滾
#rotate: 	  表示日志切分后歷史文件最多保存離現在最近的多少份   [rəʊˈteɪt] 旋轉
#create :   指定新創建的文件的權限與所屬主與群組
#dateext :  使用日期為后綴的回滾文件  #可以去/var/log目錄下看看

# RPM packages drop log rotation information into this direct
ory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly 
    create 0664 root utmp 
	minsize 1M
    rotate 1
}

/var/log/btmp {  #	指定的日志文件的名字和路徑
    missingok #如果文件丟失,將不報錯
    monthly #每月輪換一次
    create 0600 root utmp 設置btmp這個日志文件的權限,屬主,屬組
    minsize 1M #文件超過1M進行回滾,所以大家要知道它不一定每個月都會進行分割,要看這個文件大小來定
    rotate 1  #日志切分后歷史文件最多保存1份,不含當前使用的日志
}

# system-specific logs may be also be configured here.

其它參數說明:

  • monthly: 日志文件將按月輪循。其它可用值為‘daily’,‘weekly’或者‘yearly’。
  • rotate 5: 一次將存儲5個歸檔日志。對於第六個歸檔,時間最久的歸檔將被刪除。
  • compress: 在輪循任務完成后,已輪循的歸檔將使用gzip進行壓縮。
  • delaycompress: 總是與compress選項一起用,delaycompress選項指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循周期進行。這在你或任何軟件仍然需要讀取最新歸檔時很有用。
  • missingok: 在日志輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤。
  • notifempty: 如果日志文件為空,輪循不會進行。
  • create 644 root root: 以指定的權限創建全新的日志文件,同時logrotate也會重命名原始日志文件。
  • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令將被執行。在這種情況下,rsyslogd 進程將立即再次讀取其配置並繼續運行。

/var/lib/logrotate/status中默認記錄logrotate上次輪換日志文件的時間

[root@CentOS 7-23 ~]# vim /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2019-6-20-21:0:0
"/var/log/cups/page_log" 2019-6-20-21:0:0
"/var/log/sa-update.log" 2019-6-20-21:0:0
"/var/log/cups/error_log" 2019-6-20-21:0:0
"/var/named/data/named.run" 2019-6-20-21:0:0
"/var/log/boot.log" 2019-6-20-21:0:0
"/var/log/cups/access_log" 2019-6-20-21:0:0
"/var/log/wtmp" 2019-6-20-21:0:0
"/var/log/chrony/*.log" 2019-6-20-21:0:0
"/var/log/spooler" 2019-6-20-21:0:0
"/var/log/btmp" 2019-6-20-21:0:0
"/var/log/xferlog" 2019-6-20-21:0:0
"/var/log/iscsiuio.log" 2019-6-20-21:0:0
"/var/log/maillog" 2019-6-20-21:0:0
"/var/log/libvirt/libvirtd.log" 2019-6-20-21:0:0
"/var/log/libvirt/qemu/*.log" 2019-6-20-21:0:0
"/var/log/wpa_supplicant.log" 2019-6-20-21:0:0
"/var/log/secure" 2019-6-20-21:0:0
<lib/logrotate/logrotate.status" 25L, 984C 1,1

17.3.3 使用 logrotate 進行ssh日志分割

定義了ssh日志存儲在/var/log/sshd的基礎上執行:


[root@CentOS 7-23 ~]# vim /etc/logrotate.d/sshd #創建一個sshd的logrotate配置文件
/var/log/sshd.log{
missingok
weekly
create 0600 root root
minsize 1M
rotate 3
}


[root@CentOS 7-23 ~]# systemctl restart rsyslog #重啟日志服務
[root@CentOS 7-23 ~]# logrotate -vf /etc/logrotate.d/sshd 
#強制輪循,也就是說即使輪循條件沒有滿足,也可以通過加-f強制讓logrotate輪循日志文件
reading config file /etc/logrotate.d/sshd
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /var/log/sshd.log forced from command line (3 rotations)
empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
considering log /var/log/sshd.log
  log needs rotating
rotating log /var/log/sshd.log, log->rotateCount is 3
dateext suffix '-20190625'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/sshd.log.3 to /var/log/sshd.log.4 (rotatecount 3, logstart 1, i 3), 
renaming /var/log/sshd.log.2 to /var/log/sshd.log.3 (rotatecount 3, logstart 1, i 2), 
renaming /var/log/sshd.log.1 to /var/log/sshd.log.2 (rotatecount 3, logstart 1, i 1), 
renaming /var/log/sshd.log.0 to /var/log/sshd.log.1 (rotatecount 3, logstart 1, i 0), 
old log /var/log/sshd.log.0 does not exist
fscreate context set to system_u:object_r:var_log_t:s0
renaming /var/log/sshd.log to /var/log/sshd.log.1
creating new /var/log/sshd.log mode = 0600 uid = 0 gid = 0
removing old log /var/log/sshd.log.4
set default create context
[root@CentOS 7-23 ~]# ll /var/log/sshd* #輕質輪循4次后,查看sshd日志文件,發現只保存了最近的4的日志文件
-rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log
-rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log.1
-rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log.2
-rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log.3

17.3.4 日志配置步驟總結:

在/etc/rsyslog.conf文件中配置相應等級的存放位置或文件,如配置local0.*等級日志存放到/var/log/sshd.log

在/etc/相應服務的配置文件中配置日志的等級,如在/etc/ssh/sshd_config文件中配置日志等級為local0

在/etc/logrotate.d目錄中配置sshd服務的日志分割配置文件,如配置/etc/logrotate.d/ssh文件

17.3.5 配置遠程日志服務器-實現日志集中的管理

使用23作為server端配置


[root@CentOS 7-23 ~]# vim /etc/rsyslog.conf #修改rsyslog.conf配置文件

# 改:19 #$ModLoad imtcp
#     20 #$InputTCPServerRun 514
#為:
#19 $ModLoad imtcp
#20 $InputTCPServerRun 514

[root@CentOS 7-23 ~]# systemctl restart rsyslog #重啟rsyslog服務
[root@CentOS 7-23 ~]# netstat -anutp|grep 514 #查看服務監聽狀態
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      21476/rsyslogd      
tcp6       0      0 :::514                  :::*                    LISTEN      21476/rsyslogd      
[root@CentOS 7-23 ~]# getenforce 
Enforcing
[root@CentOS 7-23 ~]# setenforce 0 #關閉selinux功能
[root@CentOS 7-23 ~]# getenforce
Permissive
[root@CentOS 7-23 ~]# systemctl stop firewalld #關閉防火牆
[root@CentOS 7-23 ~]# systemctl status firewalld #查看防火牆狀態
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 二 2019-06-25 00:36:54 CST; 23s ago
     Docs: man:firewalld(1)
  Process: 6523 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 6523 (code=exited, status=0/SUCCESS)

6月 24 21:39:27 CentOS7-23 systemd[1]: Starting firewalld... 
6月 24 21:39:34 CentOS7-23 systemd[1]: Started firewalld ...
6月 25 00:36:54 CentOS 7-23 systemd[1]: Stopping firewall...
6月 25 00:36:54 CentOS 7-23 systemd[1]: Stopped firewalld...
Hint: Some lines were ellipsized, use -l to show in full.
[root@CentOS 7-23 ~]# iptables -F #清空防火牆規則

使用24作為cilent端配置

[root@centos-7-24 ~]# vim /etc/rsyslog.conf #編輯/etc/rsyslog.conf文件

*.* @@192.168.234.23:514 #在末尾添加

[root@centos-7-24 ~]# systemctl restart rsyslog.service #重啟rsyslog服務
[root@centos-7-24 ~]# logger "aaaaa" #在客戶端24進行測試,使用logger模擬發送的日志“aaaaa”

在23服務端動態查看日志


[root@CentOS 7-23 ~]# tail -f /var/log/messages|grep centos --color 
#在23上動態查看message日志文件,發現24日志發送成功
Jun 25 00:50:20 centos-7-24 systemd: Stopping System Logging Service...
Jun 25 00:50:20 centos-7-24 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="21170" x-info="http://www.rsyslog.com"] exiting on signal 15.
Jun 25 00:50:20 centos-7-24 systemd: Stopped System Logging Service.
Jun 25 00:50:20 centos-7-24 systemd: Starting System Logging Service...
Jun 25 00:50:20 centos-7-24 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="21265" x-info="http://www.rsyslog.com"] start
Jun 25 00:50:20 centos-7-24 systemd: Started System Logging Service.
Jun 25 00:51:03 centos-7-24 yangjie: aaaaa

注:
總結:服務器使用udp協議,客戶端只能使用的配置文件中這一行只能有一個@
. @192.168.234.24:514
服務器使用tcp協議,客戶端只能使用的配置文件中這一行必須有兩個@@
. @@192.168.234.24:514


END
2019/6/25 0:58:21


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM