1.1 什麼是日志?
日志是記錄系統每天發生的各種事情,使用者可以通過它來檢查錯誤發生的原因,或者尋找受到攻擊時攻擊者留下的痕迹。日志主要的功能是審計和監測。它還可以實時地監測系統狀态,監測和追蹤侵入者。
Linux系統中,所有的日志檔案都在/var/log下
1.2 日志的作用
1. 解決系統方面的錯誤
2. 解決網絡方面的問題
3. 記錄一些重要的事件
4. 解決安全方面的問題
1.3 Linux 常見的日志檔案
1. /var/log/cron: crontab(計劃任務)服務的日志
2· /var/log/dmesg: 記錄系統在開機的時候核心偵測過程所産生的各項資訊。
3· /var/log/lastlog:所有的帳号最近一次登陸系統時的相關資訊
4· /var/log/maillog或/var/log/mail/* :記錄郵件的往來資訊,其實主要是記錄 sendmail (SMTP ) 和 dovecot (POP3) 所産生的訊息。 SMTP 是發信所使用的通訊協定, POP3 則是收信使用的通訊協定。 sendmail和dovecot 則分别是兩套達成通訊協定的軟體。
5· /var/log/messages:幾乎所有的系統錯誤資訊都會記錄在此。( 很重要!!!)
6· /var/log/secure:基本上,當涉及到需要輸入賬号密碼的軟體,當登入時都會被記錄在檔案中
7· /var/log/wtmp: 記錄正确登入者的帳号資訊
/var/log/faillog 記錄錯誤登入者的賬号資訊
8· /var/log/httpd/*, 網絡服務的日志檔案,不同的網路服務有自己的登入的日志檔案來記載它們自己産生的各種資訊
1.4 日志檔案所需相關服務 (daemon) 與程式
1.
syslogd:主要記錄系統與網絡等服務的資訊;
klogd:主要記錄核心産生的各項資訊;
logrotate: 進行日志論滾,logrotate 是将舊的登入檔更改名稱,然後建立一個空的登入檔,如此一來, 新的登入檔案将重新開始記錄,舊檔案會保留一段時間,幾個月左右, 如果這段時間沒有問題,可以讓系統自動的把它删除, 可以節省硬碟空間
2.日志的格式
# less /var/log/messages
注意: 不要用vim指令檢視,@1.當你不小心改動日志時,并儲存退出了,那麼日志檔案将不再記錄日志了. @2.如果日志檔案很大,vim會把整個日志檔案讀入記憶體,很容易造成記憶體溢出
日志的格式:
時間 主機名 相關的服務 發生事件的較長的描述
Feb 6 04:44:44 tx1 sshd[2037]: Server listening on 0.0.0.0 port 22.
3.syslog配置檔案
vim /etc/syslog.conf
@1.格式
服務或裝置(facility) ,分隔符, 日志級别(priority),把日志記錄到哪裡
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# 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
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages al
local7.* /var/log/boot.log
@2.syslog 認識的服務主要有以下這些
kern 核心資訊
auth (authpriv)使用者授權,主要與認證有關的機制,如 login, ssh, su 等需要帳号的地方;
cron 計劃任務的資訊
lpr 與列印有關的資訊
mail 與郵件有關的資訊
news 新聞討論區伺服器有關的資訊
syslog 日志syslog生成的資訊
uucp,news 新聞討論區資訊
local0 ~ local7 自定義的服務
@3.日志的級别
none 不需要日志
debug 調試資訊
info 一般的通知資訊
notice 提醒資訊
warning 警告
err 錯誤,比如因為配置錯誤 導緻某些服務無法啟動
crit 比error 還要嚴重的錯誤資訊
alert 問題已經很嚴重了,比critical 還嚴重 ,需要立即采取動作
emerg 疼痛等級,指系統幾乎要當機的狀态!
@4.服務與日志的級别之間的分隔符
. 是 “>=”
.info:記錄本身這個級别,并且記錄高于這個級别的資訊
.= 是 “==”
.=info:隻記錄info 這個級别的資訊
.! 是“除了”
.!info:除了info 這個級别,其他資訊都記錄
.none:是 “不記錄”
* 所有
*. 所有的服務
.* 所有的級别
@5.記錄日志的位置
檔案的絕對路徑:通常就是放在 /var/log 裡頭的檔案
列印機或其他裝置:例如 /dev/lp0
輸出到終端 /dev/console
使用者名稱:顯示給使用者!
遠端主機:例如 @www.tx.com @ 後面寫主機名或IP位址,當然對方主機也能支援才行!
*:表示『目前線上上的所有人
1.5. 日志檔案的安全
1.可以用遠端日志,就是把日志記錄到其他機器上,這樣的即使你的主機被入侵了,日志檔案被删掉了,但是另外一台機器上還有重要的資料
2.可以将日志資料傳送到列印機上面
3.可以把日志檔案加上隐藏權限,這樣檔案就不能被删除,隻能被追加。root可以去掉這個權限,然後進行删除的
#chattr +a /var/log/messages
但是這樣,logrotate将無法工作,下面會說到,在有隐藏權限的情況下讓logrotate工作
4.不要用vim打開日志檔案
1.6日志伺服器的設定
Server:
#vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0 -r" //開啟接收遠端日志功能
#service syslog restart
日志伺服器監聽的端口為514
# netstat -lunp | grep syslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 2913/syslogd
Client
# vim /etc/syslog.conf
*.* @192.168.8.70
# service syslog restart
1.7 logrotate 日志輪替
日志輪替主要是防止日志檔案無限制的變大,syslog 利用的是 daemon 的方式來啟動的的, 當有需求的時候就會被執行,但是 logrotate 卻是在規定的時間到了以後才來迚行登入檔的輪替, 是以這個 logrotate 程式就要挂在 cron 底下進行, /etc/cron.daily/logrotate 就是記錄了每天要進行的日志檔案輪替
如圖所示:當第一次執行完輪替後,原本的 messages 會變成 messages.1 而且會建立一個空的 messages 給系統來儲存登入檔案。而第二次執行輪替後,則 messages.1 會變成 messages.2 而 messages 會變成 messages.1 ,又造成一個空的 messages 來儲存登入檔案,如果我們僅保留三個檔案,那麼執行第四次時,則 messages.3 這個檔案就會被删除,并由後面的較新的檔案代替。
1.配置檔案
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 是主要的配置檔案,logrotate.d 是一個目錄, 該目錄裡面的所有檔案都會被調入 /etc/logrotate.conf 當中來進行。如果在 /etc/logrotate.d/ 中沒有指定一些詳細設定,則以 /etc/logrotate.conf中的設定為預設值
2.相關軟體:
#rpm -qa | grep logrotate
logrotate-3.7.4-12
3. 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 //建立一個新的空日志檔案
# 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 -- we'll rotate them here
/var/log/wtmp { //對/var/log/wtmp進行的設定
monthly //輪替周期為一個月
minsize 1M //檔案大小要超過1M,才進行輪替
create 0664 root utmp //建立的空日志檔案的權限及所有者、所屬組
rotate 1 //保留 1 個日志備份
}
/var/log/btmp {
missingok //如果日志檔案丢失,進入到下一個不發出錯誤消息
monthly //輪替周期為一個月
minsize 1M //檔案大小要超過1M,才進行輪替
create 0600 root utmp //建立的空日志檔案的權限及所有者、所屬組
rotate 1 //保留 1 個日志備份
}
1.8 日志輪滾的格式:
1.格式
檔案名 {
sharedscripts 開始
prerotate 啟動logrotate之前執行的指令
commands
endscript 結束
sharedscripts 開始
postrotate 啟動logrotate之 後執行的指令
endscript 結束
}
例:如果日志檔案有隐藏權限怎麼辦?
#touch /var/log/tx.log
#chattr +a tx.log
#vi /etc/logrotate.d/tx
/var/log/tx.log {
monthly
size=5M
rotate 4
create
compress
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
postrotate
/usr/bin/killall -HUP syslogd //系統的syslogd重新讀syslog.conf檔案
/usr/bin/chattr +a /var/log/admin.log
2. 輪滾測試工具:
#logrotate -vf logfile
-v:啟動顯示模式,會顯示logrotate運作的過程
-f:不論是否符合配置檔案的資料,強制每個日志檔案都進行輪替操作
[root@tx1 ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf //讀取主配置檔案
including /etc/logrotate.d //調用外部設定
reading config file acpid //外部設定
...................
Handling 17 logs //共有17個日志檔案被記錄
considering log /var/log/messages //開始處理messages
log does not need rotating //時間未到,不需要改動
considering log /var/log/secure
log does not need rotating
# logrotate -v /etc/logrotate.d/tx
reading config file /etc/logrotate.d/tx
reading config info for /var/log/tx.log
Handling 1 logs
rotating pattern: /var/log/tx.log 10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/tx.log
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
# logrotate -vf /etc/logrotate.d/tx
rotating pattern: /var/log/tx.log forced from command line (5 rotations)
log needs rotating
rotating log /var/log/tx.log, log->rotateCount is 5
renaming /var/log/tx.log.5.gz to /var/log/tx.log.6.gz (rotatecount 5, logstart 1, i 5),
old log /var/log/tx.log.5.gz does not exist
renaming /var/log/tx.log.4.gz to /var/log/tx.log.5.gz (rotatecount 5, logstart 1, i 4),
old log /var/log/tx.log.4.gz does not exist
renaming /var/log/tx.log.3.gz to /var/log/tx.log.4.gz (rotatecount 5, logstart 1, i 3),
old log /var/log/tx.log.3.gz does not exist
renaming /var/log/tx.log.2.gz to /var/log/tx.log.3.gz (rotatecount 5, logstart 1, i 2),
renaming /var/log/tx.log.1.gz to /var/log/tx.log.2.gz (rotatecount 5, logstart 1, i 1),
renaming /var/log/tx.log.0.gz to /var/log/tx.log.1.gz (rotatecount 5, logstart 1, i 0),
old log /var/log/tx.log.0.gz does not exist
log /var/log/tx.log.6.gz doesn't exist -- won't try to dispose of it
running prerotate script
renaming /var/log/tx.log to /var/log/tx.log.1
creating new log mode = 0644 uid = 0 gid = 0
running postrotate script
compressing log with: /bin/gzip