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 --调试,产生的日志是最多的一个级别info --一般信息的日志,最常用
notice --最具有重要性的普通条件的信息
warning或warn --警告级别
err或error --错误级别,阻止某个功能或者模块不能正常工作的信息
crit --严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert --需要马上修改的信息
emerg或panic --内核崩溃等严重错误
none --什么都不记录
--上面的日志级别,从上往下级别从低到高,记录的信息是多到少,级别低的记录的信息包括级别高的
连接符号
. 记录大于等于此等级
.= 只记录等于此等级的信息
.! 不等于此等级,也就是记录此等级之外的信息
# 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 --轮转之前执行XXXXendscript
sharedscripts
postrotate
xxxxx --轮转之后执行xxxx
endscript
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 || trueecho "end rotate" |mail root --轮转后发邮件
endscript
}
/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可以分析所有的,但速度较慢,视日志大小定Detail = 0 --分析日志报告的详细程度,最高是10,可以写数字,也可以low,med,或者high
# 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 --基于文本的传统的配置界面,不推荐使用make menuconfig --基于ncurses-devel库的一种文本选单方式(要装ncurses-devel)
make oldconfig --如果只想在原来的内核配置基础上修改的话,用此选项
make xconfig --基于x windows的图形配置界面,基于qt的(要装avahi-qt3-devel)
* 代表编入内核
M 代表编成模块
空 代表不编入内核
有三种括号:
方括号:要么是编进,要么是不编
尖括号:三种选择,编进,不编,编成模块
圆括号: 多选一
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