linux中日誌管理及日誌輪詢

1、日誌管理的意義

日誌對於安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以通過他來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。

日誌主要的功能有:審計和監測。他還可以實時的監測系統狀態,監測和追蹤侵入者等等

一般情況下我們的日誌主要放在哪裏?
/var/log

[root@ localhost ~]# ls /var/log
anaconda.ifcfg.log    anaconda.xlog     ConsoleKit  lastlog   sa        yum.log
anaconda.log          anaconda.yum.log  cron        maillog   secure
anaconda.program.log  audit             dmesg       messages  spooler
anaconda.storage.log  boot.log          dmesg.old   ntpstats  tallylog
anaconda.syslog       btmp              dracut.log  prelink   wtmp

2、常用的日誌文件:

btmp 記錄登錄失敗的信息
lastlog 記錄最近幾次登錄事件和最後一次不成功的登錄
messages 從syslog 記錄信息(有的鏈接到syslog文件)
utmp 記錄當前登錄的每一個用戶
whmp 系統登錄情況: 登入登出

1)登錄信息查看

last 查看登錄日誌內容

[root@ localhost ~]# last
root     pts/0        10.0.0.1         Fri Nov 29 13:36   still logged in   
root     tty1                          Fri Nov 29 11:17   still logged in
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

清空日誌文件

[root@ localhost ~]# > /var/log/wtmp 
[root@ localhost ~]# last

wtmp begins Fri Nov 29 13:40:24 2019

2)/var/log/lastlog 查看最後登錄信息

記錄的是所有的用戶什麼時候登錄過系統

[root@ localhost ~]# lastlog
用戶名           端口      來自             最後登陸時間
Username         Port     From             Latest
root             pts/0    10.0.0.1         Fri Nov 29 13:36:47 +0800 2019
bin                                        **從未登錄過**
daemon                                     **從未登錄過**
adm                                        **從未登錄過**
lp                                         **從未登錄過**
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

3)/var/log/btmp 用戶登錄系統的錯誤信息

[root@ localhost ~]# lastb             # 查看登錄失敗的信息
root     ssh:notty    192.168.1.4      Fri Feb 28 14:36 - 14:36  (00:00)    
root     ssh:notty    192.168.1.4      Fri Feb 28 14:36 - 14:36  (00:00)    
root     ssh:notty    192.168.1.4      Fri Feb 28 14:36 - 14:36  (00:00)    
root     ssh:notty    192.168.1.4      Fri Feb 28 14:36 - 14:36  (00:00)    
root     ssh:notty    192.168.1.4      Fri Feb 28 14:36 - 14:36  (00:00)    

btmp begins Fri Feb 28 14:36:32 2020

備註: 巡檢 , 發現/var/log/btmp 變得很大。說明有人在對你的服務器進行暴力破解

問題: 怎麼查看一個文件的大小

[root@ localhost ~]# ll -h /var/log/btmp 
-rw-------. 1 root utmp 1.9K 2月  28 14:36 /var/log/btmp

又模擬一下輸錯命令之後,查看文件大小

[root@ localhost ~]# ll -h /var/log/btmp 
-rw-------. 1 root utmp 4.2K 2月  28 14:39 /var/log/btmp

4)日誌的記錄方式:

日誌的種類:

daemon     後臺進程相關  
kern  	     內核產生的信息
lpr   	          打印系統產生的
authpriv     安全認證
cron   	      定時相關
mail 	      郵件相關
syslog  	  日誌服務本身的
news 	      新聞系統
local0~7      自定義的日誌設備
local 0->local 7 8個系統保留的類, 供其它的程序使用 /或者是用戶自定義

5)日誌級別: 重–輕

0.emery 緊急, 內核崩潰等嚴重的信息
1.alert 警報: 需要立刻修改的信息
2.crit 關鍵的錯誤,已經影響到了整個的系統或者軟件不能正常工作的信息
3.err 錯誤,阻止某個模塊或者程序的功能不能正常使用
4.warning 警告
  notice 注意,正常但是重要的信息
5.info 正常的信息,一般的信息,最常用的
  debug 調試級的信息,日誌信息最多

6)日誌服務:

rhel5
服務名稱: syslog
配置文件: /etc/syslog.conf

RHEL6-RHEL7
服務名稱: rsyslog

配置文件: /etc/syslog.conf

打開文件 /etc/syslog.conf

7)配置文件:

MODULES 日誌的模塊

$ModLoad imuxsock 支持本地系統日誌的模塊
$ModLoad imklog 支持內核日誌的模塊
$ModLoad immark 支持日誌標記
$ModLoad imudp 支持upd協議
$UDPServerRun 514 允許514端口接收使用udp和tcp協議轉發過來的日誌
$ModLoad imtcp 支持tcp協議

#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
//  內核類型的所有級別的日誌  存放到  ——> /dev/consloe
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none               /var/log/messages
// 所有類型的級別是info以上,除了mail,authpiv, cron,

問題: mail , authpiv ,cron放在哪裏

authpriv.* 認證的信息–>存放–> /var/log/secure
mail.* 郵件相關的信息->存放–> -/var/log/maillog
cron.* 計劃任務相關的信息–>存放–> /var/log/cron
local7.* 開機時顯示的信息–>存放–> /var/log/boot.log

8)日誌輸入的規則

-info 高於info級別的信息全部都記錄到某個文件裏去
.= 級別 僅記錄等於某個級別的日誌
舉例: .=info 只記錄 info 級別的日誌
.! 級別 除了某個級別意外,記錄所有級別信息
舉例: .!err 除了err級別,別的級別都記錄
.none 指的是排除某個類別

3、實戰案例

自定義ssh 服務的日誌

1、 編輯rsyslog的配置文件

[root@ localhost ~]# vim /etc/rsyslog.conf
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
# 添加
local0.*                                                /var/log/sshd.log

2、定義ssh服務的日誌級別

[root@ localhost ~]# vim /etc/ssh/ssh_config
# 添加的內容如下:

SyslogFacility local0

3、 啓動rsyslog和sshd服務

[root@ localhost ~]# systemctl  restart rsyslog
[root@ localhost ~]# systemctl  restart sshd

4、查看是否生成相關日誌

[root@ localhost ~]# cd /var/log/
[root@ localhost log]# more sshd.log
Feb 28 15:29:08 centos7-xinsz08 sshd[22837]: Server listening on 0.0.0.0 port 2
2.
Feb 28 15:29:08 centos7-xinsz08 sshd[22837]: Server listening on :: port 22.

備註: 對應信息: 時間 - 主機-服務-進程ID -監聽的相關信息

4、日誌切割(輪轉)

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

1、logrotate 配置文件:

/etc/ logrotate.conf /etc/ lograte.conf.d/

logrotate的執行由crond服務實現。在/etc/cron.daily目錄中,有個文logrotate,它實際上是個shell script,用來啓動logrotate

[root@ localhost log]# cd /etc/cron.daily/
[root@ localhost cron.daily]# ls
logrotate  makewhatis.cron  mlocate.cron  prelink  readahead.cron  tmpwatch

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

2、日誌回滾原理

當日志達到某個特定的大小,我們將日誌分類,之前的日誌保留一個備份,再產生的日誌創建一個同名的文件保存新的日誌.
sshd日誌回滾實戰

1) 修改配置文件

[root@ localhost cron.daily]# vim /etc/logrotate.conf
/var/log/sshd.log {         #  指定的是要切割的日誌文件
    missingok               # 如果文件丟失不報錯
    monthly                 # 每月輪換一次
    create 0664 root utmp   # 設置sshd.log這個文件的屬主和屬組
    minsize 10M             # 文件超過10M進行回滾
    rotate 2                # 日誌進行分割後,保留兩份歷史數據
}

2) 重啓rsyslog

[root@ localhost cron.daily]# systemctl restart rsyslog

3) 強制切割

[root@ localhost cron.daily]# logrotate –vf /etc/logrotate.conf
[root@ localhost cron.daily]# cd /var/log/
[root@ localhost log]# ll sshd.log 
-rw------- 1 root root 0 2019-11-29 14:00 sshd.log
# 切割完之後,源文件大小變爲0

日誌切割,是可以按照文件的大小和時間來進行切割,也可以使用shell腳本來實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章