260 likes | 478 Views
Linux 基礎學習. Chapter 19 認識與分析登錄檔. 內容. 什麼是登錄檔 syslogd :記錄登錄檔的服務 登錄檔的輪替 (logrotate) 分析登錄檔. 19.1 什麼是登錄檔. 登錄檔的重要性. 解決系統方面的錯誤 解決網路服務的問題 過往事件記錄簿. Linux 常見的登錄檔檔名. /var/log/cron /var/log/dmesg /var/log/lastlog /var/log/maillog 或 /var/log/mail/* /var/log/messages /var/log/secure
E N D
Linux 基礎學習 Chapter 19 認識與分析登錄檔 Linux基礎--認識與分析登錄檔
內容 • 什麼是登錄檔 • syslogd :記錄登錄檔的服務 • 登錄檔的輪替(logrotate) • 分析登錄檔 Linux基礎--認識與分析登錄檔
19.1 什麼是登錄檔 • 登錄檔的重要性 • 解決系統方面的錯誤 • 解決網路服務的問題 • 過往事件記錄簿 • Linux 常見的登錄檔檔名 • /var/log/cron • /var/log/dmesg • /var/log/lastlog • /var/log/maillog 或 /var/log/mail/* • /var/log/messages • /var/log/secure • /var/log/wtmp, /var/log/faillog • /var/log/httpd/*, /var/log/news/*, /var/log/samba/*
19.1 什麼是登錄檔 • 登錄檔所需相關服務 (daemon) 與程式 • 總結一下,針對登錄檔所需的功能,我們需要的服務與程式有: • syslogd:主要登錄系統與網路等服務的訊息; • klogd:主要登錄核心產生的各項資訊; • logrotate:主要在進行登錄檔的輪替功能。
19.2syslogd :記錄登錄檔的服務 • 19.2.1 登錄檔內容的一般格式 • 事件發生的日期與時間; • 發生此事件的主機名稱; • 啟動此事件的服務名稱(如 samba, xinetd 等) 或函式名稱 (如 libpam ..) • 該訊息的實際資料內容。
19.2syslogd :記錄登錄檔的服務 • 19.2.2syslog 的設定檔:/etc/syslog.conf • 服務名稱
19.2syslogd :記錄登錄檔的服務 • 訊息等級 • . :代表『比後面還要高的等級 (含該等級) 都被記錄下來』的意思,例如:mail.info 代表只要是 mail 的資訊,而且該資訊等級高於 info (含 info 本身)時,就會被記錄下來的意思。 • .=:代表所需要的等級就是後面接的等級而已,其他的不要! • .!:代表不等於,亦即是除了該等級外的其他等級都記錄。
19.2syslogd :記錄登錄檔的服務 • 訊息記錄的檔名或裝置或主機 • 檔案的絕對路徑:通常就是放在 /var/log 裡頭的檔案啦! • 印表機或其他:例如 /dev/lp0 這個印表機裝置 • 使用者名稱:顯示給使用者囉! • 遠端主機:例如 @www.vbird.tsai 當然啦,要對方主機也能支援才行! • *:代表『目前在線上的所有人』,類似 wall 這個指令的意義!
19.2syslogd :記錄登錄檔的服務 • CentOS 5.x 預設的 syslog.conf 內容
19.2syslogd :記錄登錄檔的服務 • 1.#kern.*:只要是核心產生的訊息,全部都送到 console(終端機) 去。console 通常是由外部裝置連接到系統而來,舉例來說,很多封閉型主機 (沒有鍵盤、螢幕的系統) 可以透過連接 RS232 連接口將訊息傳輸到外部的系統中,例如以筆記型電腦連接到封閉主機的 RS232 插口。這個項目通常應該是用在系統出現嚴重問題而無法使用預設的螢幕觀察系統時,可以透過這個項目來連接取得核心的訊息。 • 2.*.info;mail.none;news.none;authpriv.none;cron.none:由於 mail, news, authpriv, cron 等類別產生的訊息較多,且已經寫入底下的數個檔案中,因此在 /var/log/messages 裡面就不記錄這些項目。除此之外的其他訊息都寫入 /var/log/messages 中。這也是為啥我們說這個 messages 檔案很重要的緣故!
19.2syslogd :記錄登錄檔的服務 • 3.authpriv.*:認證方面的訊息均寫入 /var/log/secure 檔案; • 4.mail.*:郵件方面的訊息則均寫入 /var/log/maillog 檔案; • 5.cron.*:例行性工作排程均寫入 /var/log/cron 檔案; • 6.*.emerg:當產生最嚴重的錯誤等級時,將該等級的訊息以 wall 的方式廣播給所有在系統登入的帳號得知,要這麼做的原因是希望在線的使用者能夠趕緊通知系統管理員來處理這麼可怕的錯誤問題。 • 7.uucp,news.crit:uucp 是早期 Unix-like 系統進行資料傳遞的通訊協定,後來常用在新聞群組的用途中。news 則是新聞群組。當新聞群組方面的資訊有嚴重錯誤時就寫入 /var/log/spooler 檔案中; • 8.local7.*:將本機開機時應該顯示到螢幕的訊息寫入到 /var/log/boot.log 檔案中; • 9.後面的 news.=crit、news.=err、news.notice 則主要在分別記錄新聞群組產生的不同等級的訊息。
19.2syslogd :記錄登錄檔的服務 • 自行增加登錄檔檔案功能
19.2syslogd :記錄登錄檔的服務 • 19.2.3 登錄檔的安全性設置
19.2syslogd :記錄登錄檔的服務 • 19.2.4 登錄檔伺服器的設定 登錄檔伺服器的架構
19.3 登錄檔的輪替(logrotate) • 19.3.1logrotate 的設定檔 登錄檔進行 logrotate 的結果
19.3 登錄檔的輪替(logrotate) • 在上面的語法當中,我們知道正確的 logrotate 的寫法為: • 檔名:被處理的登錄檔絕對路徑檔名寫在前面,可以使用空白字元分隔多個登錄檔; • 參數:上述檔名進行輪替的參數使用 { } 包括起來; • 執行腳本:可呼叫外部指令來進行額外的命令下達,這個設定需與 sharedscripts .... endscript 設定合用才行。至於可用的環境為: • prerotate:在啟動 logrotate 之前進行的指令,例如修改登錄檔的屬性等動作; • postrotate:在做完 logrotate 之後啟動的指令,例如重新啟動 (kill -HUP) 某個服務! • Prerotate 與 postrotate 對於已加上特殊屬性的檔案處理上面,是相當重要的執行程序! • 那麼 /etc/logrotate.d/syslog 內設定的六個檔案的輪替功能就變成了: • 該設定只對 /var/log/ 內的 messages, secure, maillog, spooler, boot.log, cron 有效; • 登錄檔輪替每週一次、保留四個、且輪替下來的登錄檔不進行壓縮(未更改預設值); • 輪替完畢後 (postrotate) 取得 syslog 的 PID 後,以 kill -HUP 重新啟動 syslogd
19.3 登錄檔的輪替(logrotate) • 19.3.2 實際測試 logrotate 的動作 [root@www ~]# logrotate [-vf] logfile 選項與參數: -v :啟動顯示模式,會顯示 logrotate 運作的過程喔! -f :不論是否符合設定檔的資料,強制每個登錄檔都進行 rotate 的動作! 範例一:執行一次 logrotate 看看整個流程為何? [root@www ~]# logrotate -v /etc/logrotate.conf reading config file /etc/logrotate.conf <==讀取主要設定檔 including /etc/logrotate.d <==呼叫外部的設定 reading config file acpid <==就是外部設定啊! ....(中間省略).... Handling 21 logs <==共有 21 個登錄檔被記錄 ....(中間省略).... rotating pattern: /var/log/messages /var/log/secure /var/log/maillog \ /var/log/spooler /var/log/boot.log /var/log/cron weekly (4 rotations) empty log files are rotated, old logs are removed considering log /var/log/messages <==開始處理 messages log does not need rotating <==因為時間未到,不需要更動! ....(底下省略)....
19.3 登錄檔的輪替(logrotate) • 19.3.3 自訂登錄檔的輪替功能 • 登錄檔輪替一個月進行一次; • 該登錄檔若大於 10MB 時,則主動進行輪替,不需要考慮一個月的期限; • 保存五個備份檔案; • 備份檔案需要壓縮 # 1. 先建立 +a 這個屬性啊! [root@www ~]# chattr +a /var/log/admin.log [root@www ~]# lsattr /var/log/admin.log -----a------- /var/log/admin.log [root@www ~]# mv /var/log/admin.log /var/log/admin.log.1 mv: cannot move `/var/log/admin.log' to `/var/log/admin.log.1': Operation not permitted # 這裡確定了加入 a 的隱藏屬性!所以 root 無法移動此登錄檔! # 2. 開始建立 logrotate 的設定檔,增加一個檔案在 /etc/logrotate.d 內就對了! [root@www ~]# vi /etc/logrotate.d/admin # This configuration is from VBird 2009/04/08 /var/log/admin.log {
19.3 登錄檔的輪替(logrotate) monthly <==每個月進行一次 size=10M <==檔案容量大於 10M 則開始處置 rotate 5 <==保留五個! compress <==進行壓縮工作! sharedscripts prerotate /usr/bin/chattr -a /var/log/admin.log endscript sharedscripts postrotate /usr/bin/killall -HUP syslogd /usr/bin/chattr +a /var/log/admin.log endscript } # 3. 測試一下 logrotate 相關功能的資訊顯示: [root@www ~]# logrotate -v /etc/logrotate.conf ....(前面省略).... rotating pattern: /var/log/admin.log 10485760 bytes (5 rotations) empty log files are rotated, old logs are removed considering log /var/log/admin.log
19.3 登錄檔的輪替(logrotate) log does not need rotating not running prerotate script, since no logs will be rotated not running postrotate script, since no logs were rotated ....(底下省略).... # 因為還不足一個月,檔案也沒有大於 10M,所以不需進行輪替! # 4. 測試一下強制 logrotate 與相關功能的資訊顯示: [root@www ~]# logrotate -vf /etc/logrotate.d/admin reading config file /etc/logrotate.d/admin reading config info for /var/log/admin.log Handling 1 logs rotating pattern: /var/log/admin.log forced from command line (5 rotations) empty log files are rotated, old logs are removed considering log /var/log/admin.log log needs rotating rotating log /var/log/admin.log, log->rotateCount is 5 renaming /var/log/admin.log.5.gz to /var/log/admin.log.6.gz (rotatecount 5, logstart 1, i 5), old log /var/log/admin.log.5.gz does not exist renaming /var/log/admin.log.4.gz to /var/log/admin.log.5.gz (rotatecount 5, logstart 1, i 4),
19.3 登錄檔的輪替(logrotate) old log /var/log/admin.log.4.gz does not exist renaming /var/log/admin.log.3.gz to /var/log/admin.log.4.gz (rotatecount 5, logstart 1, i 3), old log /var/log/admin.log.3.gz does not exist renaming /var/log/admin.log.2.gz to /var/log/admin.log.3.gz (rotatecount 5, logstart 1, i 2), old log /var/log/admin.log.2.gz does not exist renaming /var/log/admin.log.1.gz to /var/log/admin.log.2.gz (rotatecount 5, logstart 1, i 1), old log /var/log/admin.log.1.gz does not exist renaming /var/log/admin.log.0.gz to /var/log/admin.log.1.gz (rotatecount 5, logstart 1, i 0), old log /var/log/admin.log.0.gz does not exist log /var/log/admin.log.6.gz doesn't exist -- won't try to dispose of it running prerotate script renaming /var/log/admin.log to /var/log/admin.log.1 running postrotate script compressing log with: /bin/gzip [root@www ~]# lsattr /var/log/admin.log* -----a------- /var/log/admin.log ------------- /var/log/admin.log.1.gz <==有壓縮過喔!
19.4 分析登錄檔 • 19.4.1CentOS 預設提供的 logwatch • logwatch 分析的結果如下所示 Linux基礎--認識與分析登錄檔
19.4 分析登錄檔 # 先會說明分析的日期與相關的分析期間! ################### Logwatch 7.3 (03/24/06) #################### Processing Initiated: Wed Apr 8 04:02:05 2009 Date Range Processed: yesterday ( 2009-Apr-07 ) Period is day. Detail Level of Output: 0 Type of Output: unformatted Logfiles for Host: www.vbird.tsai ################################################################## # 底下則是依據各種服務來進行各項分析!先是登入者的 ssh 服務分析 --------------------- SSHD Begin ------------------------ Users logging in through sshd: root: 192.168.100.101: 1 time 192.168.100.254: 1 time ---------------------- SSHD End ------------------------- # 磁碟容量分析!可以避免你的系統使用過量磁碟,導致的系統不穩問題! --------------------- Disk Space Begin ------------------------ Filesystem Size Used Avail Use% Mounted on /dev/hda2 9.5G 3.8G 5.3G 42% / /dev/hda3 4.8G 1.1G 3.5G 23% /home /dev/hda1 99M 21M 73M 23% /boot ---------------------- Disk Space End ------------------------- ###################### Logwatch End #########################
19.4 分析登錄檔 • 19.4.2 鳥哥自己寫的登錄檔分析工具
19.4 分析登錄檔 =============== 系統彙整 ================================= 核心版本 : Linux version 2.6.18-92.el5 (mockbuild@builder16.centos.org) CPU 資訊 : Intel(R) Celeron(TM) CPU : 1200.062 MHz 主機名稱 : www.vbird.tsai 統計日期 : 2009/April/08 17:00:59 ( Wednesday ) 分析的日期: Apr 8 已開機期間: 7 days, 22:46, 目前主機掛載的 partitions Filesystem Size Used Avail Use% Mounted on /dev/hda2 9.5G 3.8G 5.3G 42% / /dev/hda3 4.8G 1.1G 3.5G 23% /home /dev/hda1 99M 21M 73M 23% /boot tmpfs 363M 0 363M 0% /dev/shm # 這個程式會將針對 internet 與內部監聽的埠口分開來顯示! ================= Ports 的相關分析資訊 ======================= 主機啟用的 port 與相關的 process owner: 僅對本機介面開放的 ports (PID|owner|command) tcp 25|(root)|sendmail: accepting connections tcp 631|(root)|cupsd tcp 2207|(root)|python ./hpssd.py tcp 2208|(root)|./hpiod 對外部介面開放的 ports (PID|owner|command)
19.4 分析登錄檔 tcp 22|(root)|/usr/sbin/sshd tcp 111|(rpc)|portmap tcp 737|(root)|rpc.statd udp 111|(rpc)|portmap udp 514|(root)|syslogd -m 0 -r udp 631|(root)|cupsd udp 731|(root)|rpc.statd udp 734|(root)|rpc.statd udp 5353|(avahi)|avahi-daemon: running [www.local] udp 32768|(avahi)|avahi-daemon: running [www.local] udp 32769|(avahi)|avahi-daemon: running [www.local] # 以下針對有啟動的服務個別進行分析! ================= SSH 的登錄檔資訊彙整 ======================= 今日沒有使用 SSH 的記錄 ================= Sednamil 的登錄檔資訊彙整 ================== 你的主機有進行 SASL 身份認證的功能 今日沒有 sendmail 的相關資訊 ================= 全部的登錄檔資訊彙整 ======================= 1. 重要的登錄記錄檔 ( Secure file ) 說明:已經取消了 pop3 的資訊! Apr 8 15:46:22 www su: session opened for user vbird by root(uid=0) Apr 8 15:47:02 www su: session closed for user vbird 2. 使用 last 這個指令輸出的結果 wtmp begins Wed Apr 8 15:19:47 2009 3. 將特重要的 /var/log/messages 列出來瞧瞧! 已經取消 crond 與 snmpd 的訊息 Apr 8 15:19:47 www syslogd 1.4.1: restart (remote reception). Apr 8 15:34:25 www syslogd 1.4.1: restart (remote reception).