Linux日誌系統(一)

panpong發表於2016-12-11

1)        Linux常見日誌與檔名

/var/log/boot.log

開機的時候系統核心會去偵測與啟動硬體,接下來開始各種核心支援的功能啟動等。這些流程都會記錄在/var/log/boot.log  裡面哩! 不過這個檔案只會存在這次開機啟動的資訊,前次開機的資訊並不會被保留下來!

 

/var/log/cron

還記得第十五章例行性工作排程吧?你的 crontab 排程有沒有實際被進行? 進行過程有沒有發生錯誤? 你的 /etc/crontab 是否撰寫正確?在這個日誌內查詢看看。

 

/var/log/dmesg

記錄系統在開機的時候核心偵測過程所產生的各項資訊。由於 CentOS 預設將開機時核心的硬體偵測過程 取消顯示, 因此額外將資料記錄一份在這個檔案中;

 

/var/log/lastlog

可以記錄系統上面所有的賬號最近一次登入系統時的相關資訊。lastlog 指令就是利用這個 檔案的記錄資訊來顯示的。

 

/var/log/maillog /var/log/mail/*

記錄郵件的往來資訊,其實主要是記錄 postfix (SMTP 協議提供者) dovecot (POP3 協議提供者) 所產生 的訊息啦。 SMTP 是發信所使用的通訊協議, POP3 則是收信使用的通訊協議。 postfix dovecot 則分 別是兩套達成通訊協議的軟體。

 

/var/log/messages

這個檔案相當的重要,幾乎系統發生的錯誤訊息 (或者是重要的資訊) 都會記錄在這個檔案中; 如果系統發生莫名的錯誤時,這個檔案是一定要查閱的日誌之一。

 

/var/log/secure

基本上,只要牽涉到『需要輸入賬號密碼』的軟體,那麼當登入時 (不管登入正確或錯誤) 都會被記錄在此 檔案中。 包括系統的 login 程式、圖形介面登入所使用的 gdm 程式、 susudo 等程式、還有網路聯機的 sshtelnet 等程式, 登入資訊都會被記載在這裡;

 

/var/log/wtmp/var/log/faillog

這兩個檔案可以記錄正確登入系統者的帳戶資訊 (wtmp) 與錯誤登入時所使用的帳戶資訊 (faillog) !我們在第十章談到的 last 就是讀取wtmp 來顯示的, 這對於追蹤一般賬號者的使用行為很有幫助!

 

/var/log/httpd/*/var/log/samba/*

不同的網路服務會使用它們自己的日誌檔案來記載它們自己產生的各項訊息!上述的目錄內則是個別服務 所制訂的日誌。

 

2)  日誌相關服務(daemon) 與程式

systemd-journald.service:最主要的訊息收受者,由 systemd  提供的;

rsyslog.service:主要日誌系統與網路等服務的訊息;

logrotate:主要在進行日誌檔案的輪替功能。

 

3)        CentOS 7.x 使用 systemd  提供的 journalctl 日誌管理

CentOS 7 除了保有既有的 rsyslog.service 之外,其實最上游還使用了 systemd 自己的登入檔案日誌 管理功能喔!他使用的是 systemd-journald.service 這個服務來支援的。基本上,系統由 systemd 所 管理,那所有經由 systemd 啟動的服務,如果再啟動或結束的過程中發生一些問題或者是正常的訊 息, 就會將該訊息由 systemd-journald.service 以二進位制的方式記錄下來,之後再將這個訊息傳送給 rsyslog.service  作進一步的記載。

systemd-journald.service  的記錄主要都放置於記憶體中,因此在存取方面效能比較好~我們也能夠透過 journalctl  以及 systemctl status unit.service  來檢視各個不同服務的登入檔! 這有個好處,就是登入檔 可以隨著個別服務讓你查閱,在單一服務的處理上面,要比跑到 /var/log/messages  去大海撈針來的 簡易很多!不過,因為 system-journald.service  裡面的很多觀念還是沿用 rsyslog.service  相關的資訊, 所以,本章還是先從 rsyslog.service 先談起, 談完之後再以 journalctl 進一步瞭解 systemd 是怎麼去記錄登入檔案日誌功能的呦!

4)        rsyslog.service :記錄日誌檔案的服務

[root@study ~]# ps aux | grep rsyslog

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 750 0.0 0.1 208012 4732 ? Ssl Aug17 0:00 /usr/sbin/rsyslogd -n

[root@study ~]# systemctl status rsyslog.service

rsyslog.service - System Logging Service

Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled)

Active: active (running) since Mon 2015-08-17 18:37:58 CST; 2 days ago

Main PID: 750 (rsyslogd)

CGroup: /system.slice/rsyslog.service

└─750 /usr/sbin/rsyslogd -n  

rsyslog.service 的配置檔案:/etc/rsyslog.conf

 

5)        日誌檔案的安全性設定

[root@study ~]# chattr [+-=][ASacdistu]檔案或目錄名稱

選項與引數:

+:增加某一個特殊引數,其他原本存在引數則不動。

-:移除某一個特殊引數,其他原本存在引數則不動。

=:設定一定,且僅有後面接的引數

A:當設定了A這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟。(目前建議使用檔案系統掛載引數處理這個專案)

S:一般檔案是非同步寫入磁碟的(原理請參考前一章sync的說明),如果加上S這個屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。

a:當設定a之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這屬性

c:這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)

d:當dump程式被執行的時候,設定d屬性將可使該檔案(或目錄)不會被dump備份

i:這個i可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連線也無法寫入或新增資料!』對於系統安全性有相當大的助益!只有root能設定此屬性

s:當檔案設定了s屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間,

所以如果誤刪了,完全無法救回來了喔!

u:與s相反的,當使用u來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔!

注意1:屬性設定常見的是ai的設定值,而且很多設定值必須要身為root才能設定

注意2:xfs檔案系統僅支援AadiS而已

 

[root@study ~]# lsattr [-adR]檔案或目錄

選項與引數:

-a:將隱藏檔的屬性也秀出來;

-d:如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;

-R:連同子目錄的資料也一併列出來!

 

6)        日誌伺服器的設定

我們可以讓某一部主機當成 『日誌檔案伺服器』,用他來記錄所有的其他 linux 主機的資訊,這樣我就直接進入一部主機就可以了。

那要怎麼達到這樣的功能呢?很簡單啦, CentOS 7.x的 rsyslogd 本身就已經具有這個日誌檔案伺服器的功能了, 只是預設並沒有啟動該功能而已。既然是日誌伺服器,那麼我們的 Linux 主機當然會啟動一個埠來監聽了,就是 UDP 或 TCP 的 port 514 。

l  伺服器端設定:

# 1. Server 端:修改 rsyslogd 的啟動配置檔案,在 /etc/rsyslog.conf 內 !

[root@study ~]# vim /etc/rsyslog.conf

# 找到底下這幾行:

# Provides UDP syslog reception

#$ModLoad imudp

#$UDPServerRun 514

# Provides TCP syslog reception

#$ModLoad imtcp

#$InputTCPServerRun 514

# 上面的是 UDP 埠口,底下的是 TCP 埠口!如果你的網路狀態很穩定,就用 UDP 即可。

# 不過,如果你想要讓資料比較穩定傳輸,那麼建議使用 TCP 囉 !所以修改底下兩行即可!

$ModLoad imtcp

$InputTCPServerRun 514

l  客戶端設定

client 端的設定就簡單多了!只要指定某個資訊傳送到這部主機即可! 舉例來說,我們的日誌伺服器 IP 192.168.1.100 ,而 client 端希望所有的資料都送給主機, 所以,可以在 /etc/rsyslog.conf 裡面新增這樣的一行:

[root@study ~]# vim /etc/rsyslog.conf

*.* @@192.168.1.100

#*.* @192.168.1.100 # 若用 UDP 傳輸,設定要變這樣 !

[root@study ~]# systemctl restart rsyslog.service 

【參考】
【1】鳥哥的Linux私房菜-基礎篇.第四版,第十八章認識與分析登入檔。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2130250/,如需轉載,請註明出處,否則將追究法律責任。

相關文章