--
linux的日誌管理
ls /var/log/ --此目錄下很多系統日誌都存放在此
/var/log/messages --非常重要的日誌文件,幾乎所有系統發生的重要錯誤都會記錄在此
/var/log/secure --ssh ftp telnet pop3等有關
/var/log/dmesg --開機時核心檢測過程中所產生的信息
/var/log/cron --查看時間任務有關的日誌
/var/log/wtmp --用last查看,不能直接cat
/var/log/btmp --用lastb查看,不能直接cat
/var/log/lastlog --用lastlog查看
/var/log/boot --boot相關
/var/log/rpmpkgs --rpm相關
/var/log/maillog --mail相關
/var/log/spooler --news,uucp
/var/log/acpid --高級電源管理
/var/log/yum.log --yum程序相關的日誌
還有一種日誌就是每個服務所保存的日誌,路徑因服務會有所不同
一般是在/var/log/服務名/ 下
/etc/init.d/syslog --系統log服務,打開它才能記錄系統日誌
yum list |grep log
sysklogd.i386 --相關軟體包
logrotate.i386
# description: Syslog is the facility by which many daemons use to log messages to various system log files. It is a good idea to always run syslog.
設備:(facility)
auth -- pam產生的日誌
authpriv --包括許可權,登錄相關的信息
cron --時間任務相關的信息,crontab,at
mail --郵件相關的信息
kern --內核產生的信息
uucp --unix to unxi copy 指的是unix系統之間拷貝協議相關的信息
news --新聞組相關的信息
local0 到 local7 --程序自定義的日誌設備
mark --syslog服務內部的一些信息,產生一個時間標識
user --用戶程序產生的相關信息
日誌級別:
debug --調試,產生的日誌是最多的一個級別
連接符號
. 記錄大於等於此等級
.= 只記錄等於此等級的信息
.! 不等於此等級,也就是記錄此等級之外的信息
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
--/dev/console指的是一種外接的終端設備,有些封閉主機(沒有screen,keyboard,mouse等),可能會需要外接設備連接
# 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級別的信息到/var/log/messages,除了mail,authpriv,cron的信息
# The authpriv file has restricted access.
authpriv.* /var/log/secure
--記錄authpriv的所有級別的信息到/var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
--記錄郵件的所有級別的信息到/var/log/maillog,關於減號-的意思為:因為郵件的信息相比於其他的來說是比較大的,是採用非同步的方式,先存放在內存里,然後按一定的事件觸發,或者到達一定的大小寫到磁碟,而不是象其他的日誌那樣,產生了就馬上寫到磁碟.
# Log cron stuff
cron.* /var/log/cron
--記錄時間任務所有級別的信息到/var/log/cron
# Everybody gets emergency messages
*.emerg *
--記錄所有日誌設備的emerg信息以wall的方式發送給每個登錄到系統的人知道
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
--記錄uucp,new的crit信息到/var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
--另外把boot messages記錄到/var/log/boot.log
格式的寫法有兩種:
uucp.crit;news.crit
uucp,new.crit
--上面這兩種寫法是一致
例1,
只記錄mail的info級別信息到/var/log/newmaillog
mail.=info /var/log/newmaillog
例2,
記錄時間任務的info級別以上的所有信息(除了err外)到/var/log/newcron
cron.info;cron.!err /var/log/newcron
例3,把ssh的日誌單獨記錄
# vim /etc/ssh/sshd_config
SyslogFacility local5 --修改成local5,把ssh的日誌定義由local5來記錄
# /etc/init.d/sshd restart --重啟使之生效
# vim /etc/syslog.conf
local5.* /var/log/ssh --加這麼一句
# /etc/init.d/syslog restart --重啟后/var/log/ssh文件被自動創建
驗證發現所有的ssh登錄有關的信息被記錄到了/var/log/ssh
====================================
遠程系統日誌管理
管理多台主機,有時為了方便,可以把多台主機的日誌給傳到管理機(只一台)上,然後,系統管理員只要在管理機上查看,就可以查到多台主機的日誌
例4,把71的ssh登錄信息記錄到35的/var/log/remotessh.log日誌文件里
真實機做日誌服務端(管理端) 虛擬機做日誌客戶端
10.1.1.35 10.1.1.71
在35先做
vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0 -r" --加-r參數
/etc/init.d/syslog restart --重啟服務
[root@li ~]# netstat -ntlup |grep sys --加了-r參數后打開了遠程日誌功能,那麼就會多了一個監聽埠,為udp的514埠
udp 0 0 0.0.0.0:514 0.0.0.0:* 4252/syslogd
在71上做:
vim /etc/ssh/sshd_config
SyslogFacility local5
/etc/init.d/sshd restart
vim /etc/syslog.conf
local5.* @10.1.1.35
/etc/init.d/syslog restart
再回到35上做
vim /etc/syslog.conf
local5.* /var/log/remotessh.log
/etc/init.d/syslog restart
--把所有的日誌都放到同一台機器,可以方便使用grep,awk,sed等方便對其進行截取統計
如:在35上統計4月27號10.1.1.71這台機器允許ssh的次數
[root@dns /]# cat /var/log/ssh.log |grep "Apr 27" |grep 71 |grep Acc |wc -l
[root@li ~]# echo "7月11號34被ssh過`cat /var/log/ssh |grep 2.2.2.34 |grep "Jul 11" |wc -l`次"
7月11號34被ssh過5次
==================================================================
logrotate - rotates, compresses, and
mails system logs
日誌輪轉 rotate 日誌切割
常見的輪轉的日誌有:
/var/log/messages
/var/log/cron
/var/log/boot.log
/var/log/maillog
/var/log/secure
vim /etc/logrotate.conf --配置文件
# see "man logrotate" for details
# rotate log files weekly
weekly --默認是一個星期rotate一次
# keep 4 weeks worth of backlogs
rotate 4 --默認保留4個
# create new (empty) log files after rotating old ones
create --rotate后,創建一個新的代替
# uncomment this if you want your log files compressed
#compress --默認沒有打開日誌壓縮功能
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d --這表示/etc/logrotate.d目錄下的所有配置文件都生效
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp { --針對wtmp單獨的配置,這裡是絕對路徑
monthly --一個月rotate一次,取代上面的全局配置里的一個星期一次
minsize 1M --指定最小大小為1M,才rotate,就算是時間到了,大小沒有1M,也不rotate
create 0664 root utmp --定義創建的為屬性為0664,屬主為root,屬組utmp
rotate 1 --保留一個
}
logrotate -vf /etc/logrotate.conf --查看輪轉的過程
------------------------------
vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { --對哪些日誌文件進行定義
sharedscripts --腳本開始
postrotate --表示rotate結束
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript --腳本結束
}
結構如下:
sharedscripts
prerotate
xxxxx --輪轉之前執行XXXX
logger -t 'aa' 'bb' --在日誌文件里加上一個標記
[root@li test]# tail -n 1 /var/log/messages
May 8 15:33:02 li aa: bb --可以看到剛才加的標記
vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
prerotate --------
/bin/logger -t 'rotate' 'begin' --------
endscript --------
sharedscripts --------
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/logger -t 'rotate' 'end' ---------
endscript
}
logrotate -vf /etc/logrotate.conf --強制rotate,然後查看輪轉時日誌文件的重命名過程
這裡不要去強制輪轉/etc/logrotate.d/syslog這個文件,會造成.1結尾的文件被刪除
-f 強制rotate
-v 顯示過程
再去tail /var/log/message去查看打的標記是否已經成功打上
================================================
或者做下面的例子:
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
prerotate
echo "before rotate" | mail root --輪轉前發郵件
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
/etc/init.d/sendmail restart --啟動此服務,默認本機給本機可以收發郵件
logrotate -vf /etc/logrotate.conf --然後強制輪轉
cat /var/mail/root --查看郵件是否收到
==============================================
例5,配置/var/log/ssh日誌每星期輪轉一次,保留2份備份日誌,並且最小要2M才輪轉,忽略文件不存在的情況
# vim /etc/logrotate.conf --加上下面一段
/var/log/ssh {
weekly
minsize 2M
missingok
create 0600 root root
rotate 2
}
# logrotate -f /etc/logrotate.conf --使用此命令去驗證
=============================================================
logwatch - system log analyzer and reporter
logwatch --分析系統的日誌,並以容易查看的格式發郵件
logwatch 配置文件
[root@li ~]# vim /etc/logwatch/conf/logwatch.conf --會提示你去打開下面的配置文件
[root@li ~]# vim /usr/share/logwatch/default.conf/logwatch.conf
[root@li ~]# logwatch --直接使用此命令分析日誌
[root@li ula]# ls /etc/cron.daily/0logwatch --每天都會運行的一個crontab時間任務
/etc/cron.daily/0logwatch
LogDir = /var/log --分析/var/log下的所有日誌
TmpDir = /var/cache/logwatch --臨時目錄
MailTo = root --分析后郵件給root
MailFrom = Logwatch --從logwatch發郵件
Print = No --設為yes,表示分析后的報告輸出到屏幕
Save = /tmp/logwatch --有設置的話,表示分析后的報告保存到文件
Range = Yesterday --默認只分析昨天的日誌,改為all可以分析所有的,但速度較慢,視日誌大小定
# logwatch --直接使用此命令,讓系統分析昨天的日誌
# cat /var/mail/root --分析完后,直接查看這個文件就可以看到最新的分析結果
====================================
tcpwrapper
看程序是否支持tcpwrapper方式
比如說看sshd
[root@li test]# which sshd
/usr/sbin/sshd
[root@li test]# ldd /usr/sbin/sshd |grep wrap
libwrap.so.0 => /lib/libwrap.so.0 (0x00d39000) --有此模塊就表示支持
--不是所有的服務都支持,很多軟體編譯時會有./configure --enable-libwrap來支持tcpwrapper
由兩個文件來控制
/etc/hosts.allow
/etc/hosts.deny
訪問控制機製為先去匹配/etc/hosts.allow,再去匹配/etc/hosts.deny,如果都沒有,則都允許
vim /etc/hosts.deny
sshd: all --拒絕所有
sshd: all EXCEPT 10.1.1.104 --只允許104ssh上來
sshd: 10.1.1.0/255.255.255.0 EXCEPT 10.1.1.104 --拒絕10.1.1.0網段的人ssh訪問,除了104外;注意子網掩碼不支持/24寫法
sshd:all:spawn echo "`date`" %c %d >> /var/log/tcpwrapperdeny.log
--拒絕所有人登錄,並把拒絕的時間和IP等信息保存到日誌文件
--man hosts.deny查看幫助
====================================================================
模塊管理
ls /usr/src/kernels/2.6.18-164.el5-i686/ 內核源碼
/lib/modules/`uname -r`/kernel
[root@li /]# ls /lib/modules/2.6.18-164.el5/kernel/
arch/ crypto/ drivers/ fs/ lib/ net/ sound/
--也就是說由內核源碼編譯出來的模塊被分類放在上面的目錄
lsmod --查看裝載的模塊
--查看模塊信息
rmmod 8139too --刪除模塊
modprobe 8139too
insmod /lib/modules/2.6.18-164.el5/kernel/drivers/net/8139too.ko
=============================================================
內核編譯
內核的功能定製
www.kernel.org --下載內核源代碼
ls /usr/src/kernels/`uname -r` --當前使用系統的內核源碼
什麼情況下需要編譯內核?
系統要支持一個功能,但內核默認不支持,又不想升級成新的系統,則需要內核編譯
開發了一個模塊,需要內核的支持,也需要編入內核
內核編譯要考慮幾點:
自己定製的內核運行更快,具有更少的代碼
把不需要的功能編譯進內核可能會有受到漏洞被利用的風險
將某種功能編譯成模塊方式比直接編譯進內核速度要慢
10.1.1.35:/share/soft/kernel/linux-2.6.25.tar.bz2
10.1.1.35:/share/soft/kernel/linux-2.6.38.tar.bz2
10.1.1.35:/share/soft/kernel/config-2.6.25.selinux.ok
tar xvf /share/soft/kernel/linux-2.6.25.tar.bz2 -C /usr/src/
cd /usr/src/linux-2.6.25/
ls /share/soft/kernel/config-2.6.25.selinux.ok --這是一個編譯成功的配置文件
cp /share/soft/kernel/config-2.6.25.selinux.ok /usr/src/linux-2.6.25/.config
--拷到內核源碼下
編譯內核的步驟:
1,make mrproper --消除當前內核源碼,使之乾淨,(和make clean相似)
2,make config --基於文本的傳統的配置界面,不推薦使用
有三種括弧:
方括弧:要麼是編進,要麼是不編
尖括弧:三種選擇,編進,不編,編成模塊
圓括弧: 多選一
3,make
4,make modules_install --把編譯后的模塊複製到/lib/modules/內核新版本/ 以後就可以用modprobe insmod來裝載使用
5,make install --拷貝vmlinuz,initrd 到/boot/下 ,並自動修改grub
上面的編譯完成後,就可以reboot你的系統,然後在grub里選擇新的內核進入系統進行驗證
上面的內核編譯過程麻煩,有時候如果想升級內核的話,可以直接下載相關的內核rpm包,安裝就可以了
[root@li rac5.3]# pwd
/share/soft/rac5.3
[root@li rac5.3]# rpm -ivh kernel-PAE-2.6.18-128.el5.i686.rpm
[root@li rac5.3]# rpm -ivh kernel-PAE-devel-2.6.18-128.el5.i686.rpm
本文出自 「linuxart」 博客,請務必保留此出處http://linuxart.blog.51cto.com/686203/843948
[火星人 ] linux11-日誌管理,內核編譯已經有548次圍觀