文章目錄
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腳本來實現。