欢迎各位兄弟 发布技术文章
这里的技术是共享的
linux 日志系统
syslog (红帽5)
syslog-ng (g genelration 第几代的意思) (ng 下一代) 下一代升级版的日志系统 (红帽6)
开源版 商业版
红帽5 syslog 与 红帽6 syslog-ng本质上差别大,实际上配置起来我们感觉不到差别大
日志系统: syslog 有两个进程
信息详细程度: 日志级别
子系统:facility (设施)
动作:
A:
B:
D:
syslog服务:是一个服务,专门用于提供记录日志的功能,可以为各程序负责记录日志的
可以把每一个程序理解为一个子系统
有两个进程 (两个进程)
syslogd:系统 (sys system 就是系统),非内核产生的信息
klogd:内核 (k 就是 kernel 内核),专门负责记录内核产生的日志信息
kernel --> (bios切换控制后 /sbin/init启动之前 的终端上显示的信息,是在物理终端)
(后来/sbin/init之后,比如之后给出让你填账号密码 ,才是虚拟终端)
远程登录的叫伪终端
日志需要滚动(日志切割):
messages messages.1 messages.2 (过一段时间(比如一个星期)后,messages重命名为messages.1,再重新开一个新messages messages.1 是历史信息 ,又过一个星期messages.1 变成了 messages.2,messages 变成了 messages1 再重新开一个新messages )
命令或程序 logrotate 帮助我们完成日志切割 , rotate (滚动旋转)
一般按大小(比如100M)和时间(比如一个星期)滚动一次 (或者两个结合起来用,哪一个先符合,就滚动一下)
/sbin/init之后 由syslogd来记录,因为它是非内核日志
/var/log/messages: 系统标准错误日志信息
非内核产生的引导信息,各子系统生的信息(不一定都是错误信息,因为不同的日志系统所记录的信息级别不一样,)
它会滚动的以免文件过大
/var/log/maillog:邮箱系统产生的日志信息 (邮件功能安装完后会自动启动日志的邮件服务功能的)
(将来安装配置邮件服务器的时候,也会涉及到邮件日志的相关内容)
/var/log/secure:跟安全相关的,它的权限比较独特 (secure 保护,安全)
其它的日志信息,一般情况下也是放在 /var/log 下面,不接受syslog管理的日志文件,也可以放在/var/log 下
syslog: (它应该是随时运行,服务叫syslog)
syslogd
klogd
配置文件在 /etc/syslog.conf
配置文件定义格式为:facility.priority action
facility,可以理解为日志的来源或设备 目前常用的facility有以下几种
auth
authpriv
登录的时候,就是由这两个子系统进行记录
cron #任务计划相关的
daemon # 守护进程,工作在后台的 (比如httpd)
kern # 内核相关的,就是 klogd 记录的
lpr # 打印相关的 ( lpr Line Print)
mail # 邮件相关的
mark # 标记相关的
news # 新闻组相关的
security # 安全相关的,与auth 类似
syslog # 记录syslog自己的
user # 用户相关的
uucp # unix to unix cp 相关的
local0 到 local7 # 用户自定义使用的
* # 所有的facility (来源,设备,设施)
priority (log level )日志的级别,一般有以下几种级别(从低到高)
(一般意思上,指定某级别,比它高的级别都会被记录)
debug # 程序或系统的调试信息 (最低级别,级别越低,记录的信息更详细)(一般在排错时用到)
info # 一般信息
notice # 不影响正常功能,需要注意的消息
warning / warn # 可以影响系统功能,需要提醒用户的重要事件
err/error #错误信息 蓝色警报
crit # ( critical )比较严重的 橙色警报 (黄色警报)
alert # 必须马上处理的 红色警报 (red alert)
emerg / panic # 会导致系统不可用的 (panic 恐慌) ( emerg emergency 紧急事件 ) (系统马上可能会挂掉)
* # 表示所有的日志级别 (写成debug也是类似于 * 吧,因为比debug高的会同时被记录)
none # 跟 * 相反,表示啥也没有
action(动作)日志记录的位置
系统上的绝对路径 # 普通文件 如: /var/log/xxx
| # 管道 通过管道送给其他的命令处理
终端 # 终端 如: /dev/console (输出到物理终端上去)
@HOST # 远程主机 如 @10.0.0.1 (主机名或ip)把产生的日志通通发送给其它主机
用户 # 系统用户 如: root 产生的信息都发给某个用户了
* # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的 (告诉别人要挂了,该保存的就保存一下)
把几台的服务器所有日志信息发送给同一台主机(它想接收别的服务器的日志,要修改某些参数),当某黑客攻破一台服务器时,日志信息还在,
这样就加强了安全性
定义格式例子:
mail.info /var/log/mail.log # 表示将mail相关的级别为info及
info以上级别的信息记录到/var/log/mail.log 文件中
auth.=info @10.0..0.1 # 这里 .= 表示精确只记录 info级别的 表示将auth相关的
基本为info的信息记录到 10.0..0.1 主机上去
user.!=error # 表示记录user相关的, 除了error级别以外的其它的信息都记录
user.!error # 表示与user.error相反
*.info # 表示记录所有的日志信息的info级别及以上级别
mail.* # 表示记录mail子系统相关的 (mail子系统所产生的) 所有级别的信息
*.* # 所有信息
cron.info;mail.info # 多个日志来源,可以使用分号 ; 隔开
cron,mail.info # 与 cron.info;mail.info 同一个意思 (facility 可以使用逗号分隔)
mail.*;mail.!=info # 记录mail的所有级别,但是除了info级别 (表示记录mail相关的所有级别的信息,
但是不包括info级别的)
物理终端( /dev/console )
开机很快显示的信息 (/sbin/init启动之前),记录在 /var/log/dmesg (内核日志)当中
可以cat 查看
或者 # dmesg (专门打开这个文件 /var/log/dmesg,并显示出来)
dmesg = diagnostic message diagnostic (诊断的,判断的;特征的)
[root@localhost ~]# dmesg
下图一直到最后的信息 ,都在启动 /sbin/init 之前产生的信息
[root@localhost ~]# cat /var/log/dmesg (也可以使用它来查看,与 dmesg 命令的结果,可能并不完全一样)
[root@localhost ~]# man logrotate
[root@localhost ~]# ls /etc/cron.daily/
00webalizer 0logwatch cups makewhatis.cron prelink rpm
0anacron certwatch logrotate mlocate.cron rhsmd tmpwatch
[root@localhost ~]#
[root@localhost ~]# vim /etc/cron.daily/logrotate (里面的意思 大约就是判断有没有达到logrotate的条件,达到了 就log rotate 一下)
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
~
[root@localhost cron.d]# vim /etc/logrotate.conf
# see "man logrotate" for details
# 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 #它还包含进来 /etc/logrotate.d 这个文件夹里面的所有文件
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly # 按月滚动
minsize 1M # 最小1M
create 0664 root utmp #creat 一个文件 权限 属主 文件名
rotate 1 # 保留几个历史版本
}
# 可以在这里添加自定义,也可以在 /etc/logrotate.d 创建一个文件
/var/log/btmp {
missingok # 此前没有的话也没关系
monthly # 按月滚动
minsize 1M # 最小1M
create 0664 root utmp #creat 一个文件 权限 属主 文件名
rotate 1 # 保留几个历史版本
}
[root@localhost ~]# cd /etc/logrotate.d
[root@localhost logrotate.d]# ls (每一个文件定义每一个子系统的日志的)
acpid httpd ppp setroubleshoot syslog wpa_supplicant
conman iscsiuiolog psacct squid tux yum
cups mgetty rpm subscription-manager up2date
[root@localhost logrotate.d]#
[root@localhost logrotate.d]# cat cups
/var/log/cups/*_log {
missingok
notifempty # 如果为空的话,不需要通知? 不懂
sharedscripts # 这是一个共享脚本
}
[root@localhost logrotate.d]#
[root@localhost cron.d]# ll /var/log/secure (600权限)
(登录的信息,登录的用户名,密码是否输错了,输错了几次,尝试了几次,这里都有记录的)
-rw------- 1 root root 3423 12-11 03:23 /var/log/secure
[root@localhost cron.d]#
[root@localhost cron.d]# chkconfig --list syslog (注意不是 syslogd,因为syslogd是进程)
syslog 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@localhost cron.d]#
[root@localhost cron.d]# service syslog status (看到了吗? syslogd 是一个进程)
syslogd (pid 3299) 正在运行...
klogd (pid 3302) 正在运行...
[root@localhost cron.d]#
[root@localhost cron.d]# cat /etc/syslog.conf
# 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 # (除了mail authpriv cron 的所有设备的info及info以上的信息都放在/var/log/messages 里面)
# The authpriv file has restricted access.
authpriv.* /var/log/secure # 跟用户权限相关的所有级别都放到 /var/log/secure 里面
# Log all the mail messages in one place.
mail.* -/var/log/maillog # 跟mail相关的所有级别都放到 /var/log/maillog 前面加个中短横线表示异步写入
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg * # 产生emerg 信息,立即通知每一个用户
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler # uucp和news的 crit 级别放入 /var/log/spooler 里面
# Save boot messages also to boot.log
local7.* /var/log/boot.log # 这里定义了跟引导相关的信息 放在 /var/log/boot.log 里面
You have new mail in /var/spool/mail/root
[root@localhost cron.d]#
local0 到 local7 是用户自定义的 ,我们这里并没有定义谁往local7里面写,所以我们还需要在其它当中用于专门说明这个日志信息要发到local7上去,它才会记录到 /var/log/boot.log 里面去 所以这里尽管定义了,但是它的意义并不大
[root@localhost ~]# cat /var/log/boot.log
Nov 10 15:02:32 localhost NET[4378]: /sbin/dhclient-script : updated /etc/resolv.conf
[root@localhost ~]#
[root@localhost ~]# vim /etc/syslog.conf
# 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.info /var/log/cron # 假如这里可以改成info,但是不会立即生效
#要想立即生效 执行 service syslog restart
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
[root@localhost ~]# service syslog restart (可能会中断当前正在写的日志,所以建议 reload 不建议 restart)
关闭内核日志记录器: [确定]
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]
启动内核日志记录器: [确定]
[root@localhost ~]# service syslog reload (reload 让一个服务不用重启就能够读取配置文件并能够重新生效的 )
( 表示向对方发送第1号信号 SIGHUP ) (大多数程序都支持 reload ) (只不过标准四个 start stop restart status)
Reloading syslogd... [确定]
Reloading klogd... [确定]
[root@localhost ~]#
我们是通过 service 来调用这个脚本的
[root@localhost ~]# vim /etc/rc.d/init.d/syslog
#!/bin/bash
#
# syslog Starts syslogd/klogd.
#
#
# chkconfig: 2345 12 88
# 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.
### BEGIN INIT INFO
# Provides: $syslog
### END INIT INFO
# Source function library.
. /etc/init.d/functions # 包含这个文件
RETVAL=0
start() {
[ -x /sbin/syslogd ] || exit 5
[ -x /sbin/klogd ] || exit 5
# Source config
if [ -f /etc/sysconfig/syslog ] ; then
. /etc/sysconfig/syslog # 包含这个配置文件吧
else
SYSLOGD_OPTIONS="-m 0"
KLOGD_OPTIONS="-2"
fi
if [ -z "$SYSLOG_UMASK" ] ; then
SYSLOG_UMASK=077;
fi
umask $SYSLOG_UMASK
echo -n $"Starting system logger: "
daemon syslogd $SYSLOGD_OPTIONS
RETVAL=$?
echo
echo -n $"Starting kernel logger: "
daemon klogd $KLOGD_OPTIONS
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/syslog
return $RETVAL
}
stop() {
echo -n $"Shutting down kernel logger: "
killproc klogd
echo
echo -n $"Shutting down system logger: "
killproc syslogd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/syslog
return $RETVAL
}
rhstatus() {
status syslogd
status klogd
}
restart() {
stop
start
}
reload() {
RETVAL=1
syslog=`cat /var/run/syslogd.pid 2>/dev/null`
echo -n "Reloading syslogd..."
if [ -n "${syslog}" ] && [ -e /proc/"${syslog}" ]; then
kill -HUP "$syslog";
RETVAL=$?
fi
if [ $RETVAL -ne 0 ]; then
failure
else
success
fi
echo
RETVAL=1
echo -n "Reloading klogd..."
klog=`cat /var/run/klogd.pid 2>/dev/null`
if [ -n "${klog}" ] && [ -e /proc/"${klog}" ]; then
kill -USR2 "$klog";
RETVAL=$?
fi
if [ $RETVAL -ne 0 ]; then
failure
else
success
fi
echo
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
rhstatus
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
[ -f /var/lock/subsys/syslog ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 2
esac
exit $?
[root@localhost ~]# vim /etc/sysconfig/syslog
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0" # 改成 "-r -m 0" 即 加上 -r ( 意思是 recieved )选项 (-m 是不是make的意思) 它就能够作为日志服务器了
# 能够接受其它主机发来的信息,记录到本机上 当然 我们还要重启下 日志服务 (service syslog restart)
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".
~
~
~
[root@localhost ~]# vim /etc/syslog.conf
# 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.* @172.16.100.1 # 把所有的mail信息都发送到 172.16.100.1 这台主机,只要这台主机能够 接受 mail这个 facility产生的信息,它都能够进行记录的
# Log cron stuff
cron.info /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 also to boot.log
local7.* /var/log/boot.log
红帽6上用 syslog-ng 但是风格差不多
[root@localhost ~]# cd busybox-1.20.2/_install/
[root@localhost _install]# pwd
/root/busybox-1.20.2/_install
[root@localhost _install]# ls sbin (busybox里面可以看到syslogd 和 klogd)
acpid freeramdisk init mke2fs reboot sysctl
adjtimex fsck insmod mkfs.ext2 rmmod syslogd
arp fsck.minix klogd mkfs.minix route tunctl
blkid getty loadkmap mkfs.vfat runlevel udhcpc
blockdev halt logread mkswap setconsole vconfig
bootchartd hdparm losetup modinfo slattach watchdog
depmod hwclock lsmod modprobe start-stop-daemon zcip
devmem ifconfig makedevs nameif sulogin
fbsplash ifdown man pivot_root swapoff
fdisk ifenslave mdev poweroff swapon
findfs ifup mkdosfs raidautorun switch_root
[root@localhost _install]#
我们可以在小linux中使用syslog ( 即使用 syslogd 和klogd )
在 etc/rc.d/rc.sysinit 中 直接启动 syslogd 和klogd
(我们当然也可以直接写个服务脚本,让它 start 起来 )
使用了 syslogd 和 klogd 我们需要提供配置文件
[root@localhost sysroot]# cd /mnt/sysroot
[root@localhost sysroot]# vim etc/rc.d/rc.sysinit
#!/bin/sh
#
echo -e "\tWelcome to \033[34mMageEdu Tiny\033[0m Linux"
echo "Set the hostname"
[ -f /etc/hostname ] && . /etc/hostname
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost
hostname $HOSTNAME
echo "mount proc and sys ..."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo "Remount the rooffs..."
mount -t ext3 -o remount,rw /dev/hdb2 /
echo "Detect and export hardware infomation ..."
mdev -s
echo "Mount the other filesystem..."
mount -a
echo "Start syslog..."
syslogd
klogd
echo "Load ethernet card module ..."
insmod /lib/modules/mii.ko
insmod /lib/modules/pcnet32.ko
ifconfig eth0 192.168.1.47/24
ifconfig lo 127.0.0.1/8
此时再编辑 syslog的配置文件
[root@localhost sysroot]# vim etc/syslog.conf
*.info /var/log/messages
~
可以看到 var/log 目录
[root@localhost sysroot]# ls var/
lock log run
[root@localhost sysroot]#
[root@localhost sysroot]# cd
[root@localhost ~]# sync
[root@localhost ~]# sync
[root@localhost ~]# sync
马哥挂载失败,我执行的是对的,下面是马哥的图
马哥已换成了新的linux内核
我的是源生的linux内核
马哥的 己装不装载mii.ko了
# vim etc/rc.d/rc.sysinit
# 马哥的 initrd里面的 init 即 # vim /tmp/initrd/init ( # vim init ) (马哥 已经没有引入 jbd.ko 和 ext3.ko 模块了)
马哥 做了一个别名 # vim ~/.bashrc
要 source ~/.bashrc 一下,才能生效的哦
通过mkram 就直接生成了 initrd.gz文件
# mkram /mnt/boot/initrd.gz
# vim init
# blkid /dev/hda2
# blkid /dev/hda2
马哥的变成了 ext2 了
我的是 ext3
马哥现在改成 ext3
tune2fs - adjust tunable (可调谐的 可调的) filesystem parameters on ext2/ext3 filesystems
# tune2fs -j /dev/hda2
# blkid /dev/hda2
马哥说已经启动了 切换到第二个控制台 ctrl+alt+f2
下面是马哥的
下面是马哥的 可以看到日志信息
上面 可以看到登录信息 也被记录了 应该把登录信息 记入 secure ,并且secure 为 600 权限
关闭小linux 恢复源linux
# cd /mnt/sysroot
# vim etc/syslog.conf
*.info;auth.none /var/log/messages
auth.* /var/log/secure
~
建一下 secure文件 # touch var/log/secure
建一个权限为 600 # chmod 600 var/log/secure
再复新启动下 应该就没有问题了
上面的功能是 在我们的小系统上 使用 syslog的功能, (这里小系统上的 syslog 的功能 并没有使用服务(service) )