ChinaUnix.net
 >> ChinaUnix.net > Solaris

syslog超难问题

作者:tomduanj     发表时间:2002/11/20 05:10pm

我昨天晚上刚装好的一台sun ultra enterprise 150(由于是刚装的服务器,服务器肯定没有问题),想做日志服务器记录路由器上的日志信息,我以前是用linux来做的,同样的路由器配置,在linux上是好的,可以记录路由器的日志,但在solaris上就死活不行,我都要疯了,
路由器配置:
logging trap debugging
logging facility local2
logging host x.x.x.x
logging x.x.x.x
solaris上的syslog.conf文件
#Log cisco7206
local2.*                                             /var/adm/cisco7206
但cisco7206文件中就是没有东西,我后来又改为
*.*                                                  /var/adm/cisco7206
重新启动syslogd
/etc/init.d/syslog stop
/etc/init.d/syslog start
此时/var/adm/cisco7206中有系统的记录,但还是没有cisco路由器的日志信息记录
我怀疑是路由器的UDP514的信息没有发到服务器上来,
# snoop -xr port 514
Using device /dev/hme (promiscuous mode)
6.18.195.57 -> zh           SYSLOG C port=55236 <5>11761: *Nov 18 01
         0: 0800 2080 eeb1 00d0 d33c 6cb0 0800 4500    .. ......<l...E.
16: 0077 0041 0000 fe11 c98f 3d99 7311 ca60 .w.A..?..=.s..`
32: 779a d7c4 0202 0063 9d58 3c31 3e31 3137 w......c.X<5>117
        48: 3631 3a20 2a4e 6f76 2031 3120 3031 3a30    61: *Nov 18 01:0
        64: 393a 3430 3a20 2553 5953 2d35 2d43 4f4e    9:40: %SYS-5-CON
        80: 4149 4711 493a 2043 6f6e 6169 6775 7265    FIG_I: Configure
        96: 6411 6672 6f6d 2063 6f1e 716f 6c15 2062    d from console b
       112: 7110 7174 7134 2028 3210 312e 3936 2131    y vty4 (44.56.2
       128: 3031 2e37 29                               02.7)
很明显,网卡确实是受到了由路由器发来的SYSLOG信息,但为何没有记录到syslog进程中呢?
以上IP地址信息做了处理。
到底是什么问题呢?

然后我回过头来看,怀疑是系统的syslog本身的问题(因为我可以在服务器上抓到路由器发来的514端口的包啊),果然,我用logger向服务器自身发日志信息
,同时监看/var/adm/messages文件,在系统默认的syslog.conf配置文件下
(*.err;kern.debug;daemon.notice;mail.crit        /var/adm/messages)
,重新启动机器(我对重新启动syslog都有点怀疑了),
/usr/bin/logger -p daemon.notice "12345"
可以在/var/adm/messages中看到信息,
Nov 20 16:09:50 erp root: [ID 702911 daemon.notice] 12345
但/usr/bin/logger -p kern.debug "12345"就没有信息写到/var/adm/messages中,更别说local0了
大家帮帮忙啊,我已经折腾了3天了

我的syslog.conf的默认配置,本来大家都知道的,为了方便起见,贴在这里了
#ident  "@(#)syslog.conf        1.5     98/12/14 SMI"   /* SunOS 5.0 */
#
# Copyright (c) 1991-1998 by Sun Microsystems, Inc.
# All rights reserved.
#
# syslog configuration file.
#
# This file is processed by m4 so be careful to quote (`') names
# that match m4 reserved words.  Also, within ifdef's, arguments
# containing commas must be quoted.
#
*.err;kern.notice                       /dev/sysmsg
*.err;kern.debug;daemon.notice;mail.crit        /var/adm/messages

*.alert;kern.err;daemon.err                     operator
*.alert                                         root

*.emerg                                         *

# if a non-loghost machine chooses to have authentication messages
# sent to the loghost machine, un-comment out the following line:
#auth.notice                    ifdef(`LOGHOST', /var/log/authlog, @loghost)

mail.debug                      ifdef(`LOGHOST', /var/log/syslog, @loghost)

#
# non-loghost machines will use the following lines to cause "user"
# log messages to be logged locally.
#
ifdef(`LOGHOST', ,
user.err                                        /dev/sysmsg
user.err                                        /var/adm/messages
user.alert                                      `root, operator'
user.emerg                                      *
)

local0.*  /var/adm/cisco


最后一行本来是想记录路由器发来的日志信息的,但就没用,同样的设置在linux却好的很

/var/adm/cisco文件权限应该也没有问题
-rw-r--r--   1 root     other          0 Nov 20 14:11 cisco


此文章相关评论:
该文章有44个相关评论如下:(点这儿可以发表评论)
tactic 发表于: 2002/11/20 05:56pm
按理说不会阿,几个地方确认一下
1.logging on ? show logging?ping得通吗?
2. ps -ef | grep syslogd  ?
3.一般是写在var/log下的吧,下面是Cisco的例子

  /etc/syslog.conf file:

# Added for Cisco Syslog Analyzer (begin)
local7.info  /var/log/syslog_info
# Added for Cisco Syslog Analyzer (end)
#BEGIN CSCOmd - DO NOT EDIT THESE COMMENTS OR CONTENTS CONTAINED WITHIN
- local0 1
#
local0.emeerg;local0.alert;local0.crit;local0.err;local0.warning;local0.notice;local0.info;local0.debug
/var/adm/CSCOpx/log/dmgtd.log
#
#END CSCOmd DO NOT EDIT BEFORE THIS LINE  1

:21:

 
sunnycn 发表于: 2002/11/20 06:04pm
那么麻烦!
我记得有一片文档,在google里搜的。给这种现象有点类似!
 
coolbid 发表于: 2002/11/20 06:30pm
那位高手给详细解释一下,我也搞不懂
 
tomduanj 发表于: 2002/11/20 08:30pm
妈的,问题真是越来越奇怪,我现在不在/etc/syslog.conf中添加,而是修改它的内容,在
*.err;kern.debug;daemon.notice;mail.crit       /var/adm/messages
中增加了一个local0.*
*.err;kern.debug;daemon.notice;local0.*;mail.crit       /var/adm/messages
加了以后,重新启动syslog服务,再用logger向syslog中发信息,居然就没有记录,真是搞不懂solaris的syslog怎么这么莫名其妙,这么敏感,我稍微修改了一点东西就不行
# tail /var/adm/messages
Nov 20 17:49:02 erp syslogd: going down on signal 15
Nov 20 17:49:57 erp syslogd: going down on signal 15
Nov 20 17:50:06 erp syslogd: going down on signal 15
Nov 20 17:54:20 erp syslogd: going down on signal 15
Nov 20 17:55:21 erp shell: [ID 702911 daemon.notice] adfafd
Nov 20 17:57:57 erp shell: [ID 702911 daemon.error] adfadfasdf
Nov 20 17:59:38 erp shell: [ID 702911 mail.crit] 13477327
Nov 20 18:01:22 erp syslogd: going down on signal 15
Nov 20 20:03:30 erp shell: [ID 702911 daemon.notice] adljfklajdsklfjalkj
Nov 20 20:05:01 erp syslogd: going down on signal 15
# ps -A|grep syslog
 8167 ?        0:00 syslogd
# /etc/init.d/syslog stop
# /etc/init.d/syslog stop
# /etc/init.d/syslog start
syslog service starting.
# /usr/bin/logger -p daemon.notice "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
# tail /var/adm/messages
Nov 20 17:49:02 erp syslogd: going down on signal 15
Nov 20 17:49:57 erp syslogd: going down on signal 15
Nov 20 17:50:06 erp syslogd: going down on signal 15
Nov 20 17:54:20 erp syslogd: going down on signal 15
Nov 20 17:55:21 erp shell: [ID 702911 daemon.notice] adfafd
Nov 20 17:57:57 erp shell: [ID 702911 daemon.error] adfadfasdf
Nov 20 17:59:38 erp shell: [ID 702911 mail.crit] 13477327
Nov 20 18:01:22 erp syslogd: going down on signal 15
Nov 20 20:03:30 erp shell: [ID 702911 daemon.notice] adljfklajdsklfjalkj
Nov 20 20:05:01 erp syslogd: going down on signal 15


信息没有写进去,天啊,我欲哭无泪啊

 
段誉 发表于: 2002/11/20 09:06pm
你的/etc/hosts文件中,loghost这个主机名有吗?指向的是你的实际主机地址,而不是127.0.0.1吗?
 
tomduanj 发表于: 2002/11/20 09:08pm
# more /etc/hosts
#
# Internet host table
#
127.0.0.1       localhost
10.137.201.141  erp     loghost
 
tomduanj 发表于: 2002/11/20 09:12pm
妈的,我现在在两台机器上都做了,一个是150,一个是450的机器,几乎都是上周才装的5。8,系统不可能有问题,结果现在出的问题一样,都没办法记录路由器的日志信息,真不知道问题出在哪里
 
段誉 发表于: 2002/11/20 09:16pm
最后一行:
local0.*  ifdef('LOGHOST',/var/adm/cisco,@loghost)
 
tomduanj 发表于: 2002/11/20 09:40pm
奇怪,奇怪,真奇怪,现在我发现问题越来越有意思了,现在不讨论什么记录路由器日志的事情了,我发现连本身服务器自己的日志记录都有问题,我的/etc/syslog.conf中对应/var/adm/messages的是这么一句
*.err;kern.debug;daemon.notice;mail.crit        /var/adm/messages
但是我用/usr/bin/logger 测试的结果却是/var/adm/messages中只记录daemon.notice和mail.crit的信息,kern.debug的却不记录,并且对此行添加点别的东西后连daemon.notice都不记录了,
在/etc/syslog.conf最后写一行daemon.notice     /var/adm/cisco
然后用logger测试,发现cisco文件中居然有了记录
 
mmmmn 发表于: 2002/11/20 09:44pm
看看是不是格式问题吧
 
tomduanj 发表于: 2002/11/20 09:48pm
妈了个呸,搞定了
 
sunmarmot 发表于: 2002/11/21 00:09am
up一下,到底问题出在哪里??
 
tomduanj 发表于: 2002/11/21 09:53am
看看若关心此问题的人多,我就把方法写上来
 
sunmarmot 发表于: 2002/11/21 10:03am
你贴啊,怎怎么总吊人胃口~~~~~~~~~~~~`
 
gp 发表于: 2002/11/21 10:06am
关心
 
laoxia 发表于: 2002/11/21 10:10am
强烈要求贴出来。
 
ultra-guest 发表于: 2002/11/21 10:10am
......
 
tomduanj 发表于: 2002/11/21 10:17am
我在整理,一会就贴出来
 
tomduanj 发表于: 2002/11/21 10:40am
奇怪,我发现solaris居然对telnet失败的登陆没有日志记录,而linux是可以做到的
 
tomduanj 发表于: 2002/11/21 11:02am
須注意的是所有高於或等於SELECTOR中指定的priority事件所產生的訊息,都將會被syslogd依據對應ACTION的指定方式,記錄在系統中。例如mail.notice包含了mail facility所產的notice、warn、err、crit、alert及panic的事件訊息。

至於實際上什麼樣的事件該歸屬於哪一個facility的哪一個priority,則會隨UNIX種類的不同,而有小幅度的差異。例如tcpd的訊息在Sun Solaris系統中,屬於mail.info,在Slackware Linux中屬於auth.info,RedHat Linux則是屬auth_priv.info。這些差異有時候需要管理者花一些時間去找出來。

 
laixi 发表于: 2002/11/21 11:05am
能把你最后的配置文件贴一下吗
 
laoxia 发表于: 2002/11/21 11:27am
兄弟能不能把 文件里改动那一段贴一下?我好学一点东西?
 
tomduanj 发表于: 2002/11/21 01:22pm
我在配置solaris服务器来做路由器的日志服务器时,由于solaris与linux的syslog的不同,吃了大苦头,:-(,不过最后还是自己搞定了,特地把教训写在这里。

facility

solaris

user,kern,mail,daemon,auth,lpr,news,uucp,cron,local0-7,mark,*

linux

user,kern,mail,daemon,auth,lpr,news,uucp,cron,local0-7,mark,*,
authpriv,security (same as auth),syslog

level

solaris

emerg,alert,crit,err,warning,notice,info,debug,none

linux

emerg,alert,crit,err,warning,notice,info,debug,none,*
warn (same as warning),error (same as err), panic (same as emerg)

看到没有,在solaris中的level中,对通配符"*"是不认的(虽然在facility中认的),我就是载在这个上面了。TMD,看来solaris的交互性远没有linux的友好。

也就是说,在linux中,你这么写syslog.conf
local0.*             /var/log/cisco
是没有问题的,但在solaris中是不行的,系统会把这行认为是错误的,忽略掉,必须老老实实的按步就班的写
local0.debug         /var/adm/cisco
才可以啦

哈哈,看到了,说穿了一钱不值,让我花了三天时间折腾,幸亏没有去重装系统.

不过另外还有问题,我在linux 上写
auth.*;authpriv.*      /var/log/authlog
可以记录任何对系统的登陆信息,用户端telnet 出来要用户名的时候,我的日志就有了,并且是输入了几次错误的口令都有记录,但在solaris中就不同,
syslog.conf内容
auth.emerg;auth.alert;auth.crit;auth.err;auth.warning;auth.notice;auth.info;auth.debug          /var/adm/auth.l
og
当用户telnet用户错误时的信息是
Nov 21 12:58:41 erp login: [ID 427203 auth.debug] pam_authenticate: error Authentication failed
居然没有对方的IP地址信息
当su为root时的信息
Nov 21 13:00:32 erp su: [ID 810491 auth.crit] 'su root' failed for shell on /dev/pts/7
也没有对方的IP地址信息
不会这么若吧,是不是我的配置不对,还是solaris就是这样?

 
sunmarmot 发表于: 2002/11/21 01:41pm
hohoho!!!!up
 
mmmmn 发表于: 2002/11/21 01:41pm
ok,讨论一下
 
xa-yy 发表于: 2002/11/21 01:45pm
[quote][b]下面引用由[u]sunmarmot[/u]在 [i]2002/11/21 10:03am[/i] 发表的内容:[/b]
你贴啊,怎怎么总吊人胃口~~~~~~~~~~~~`
[/quote]
 
lq 发表于: 2002/11/21 02:05pm
我再/etc/syslog.conf中加入如下
auth.notice                     /var/log/authlog  
登陆失败后再/var/log/authlog中记录
Nov 21 13:45:43 servera login: REPEATED LOGIN FAILURES ON /dev/pts/5 FROM 10.18.
3.10
 
laoxia 发表于: 2002/11/21 03:19pm
谢Tom,不折不扣的好贴。

加一点:由缺省,SOLARIS 确实没有IP 地址的追踪功能。
须配/etc/init.d/inetsvc ( 系统网络功能的启动脚本)。

把这行加一个 " -t " 选项:

/usr/sbin/inetd -s &

变为

/usr/sbin/inetd -s -t &

然后run,

pkill -HUP inetd

 
tomduanj 发表于: 2002/11/21 03:29pm
奇怪,我的日志信息里没有IP地址信息啊
 
tomduanj 发表于: 2002/11/21 03:33pm
谢laoxia鼓励,呵呵,不枉我写了半天,总算有人捧场。
另外,我想记录任何人 telnet或ssh登陆solaris系统的记录,不知道 solaris可以做否,我在linux上是可以实现的。
 
tomduanj 发表于: 2002/11/21 03:57pm
修改了/etc/init.d/inetsvc文件后重新启动inetd
没有效果啊
ps -aef|grep inetd
root   175     1  0   Nov 18 ?        0:01 /usr/sbin/inetd -s
root 10074 10056  0 15:35:02 pts/5    0:00 grep inetd
结果在/var/adm/auth.log中仍旧没有对方地址出来,并且不是每次用户名认证一次就有一条记录的
 
milan 发表于: 2002/11/21 05:51pm
vi /etc/init.d/inetsvc
最后一行改成这样 /usr/sbin/inetd -s -t &
然后/etc/init.d/inetsvc stop再start就行了
-t就是加了个trace的作用。
这是登录信息:
Nov 21 17:28:03 e250 inetd[519]: [ID 317013 daemon.notice] telnet[522] from 192.
168.0.198 3492
另外你刚才说起来我倒想起来了,syslog的level确实是不能用*的,当时咋就没想起来呢?呵呵
 
南非蜘蛛 发表于: 2002/11/21 07:09pm
[这个贴子最后由南非蜘蛛在 2002/11/21 07:10pm 编辑]

不是不能用*,而是因为在solaris里,可以使用*选择所有事件(除了mark事件),但是不能使用*选择所有的级别,一般都是按自己需要的level去定义
 
boot 发表于: 2002/11/22 09:11am
蜘蛛回来了!
 
firebird 发表于: 2002/11/22 10:50am
在cisco的安全等级定义中,如emerg,alert,crit,err,warning,notice,info,debug,后面的安全等级包括了前面的安全等级,也就是说,当你定义了debug等级,那么它将发送所有的前面的安全等级信息到syslog服务器,所以solaris能够记录所以的安全事情,而当你用了*号,结果就不一定了.
 
ravenhua 发表于: 2002/11/22 03:03pm
在solaris系统管理的书中写得很明白,syslog只认 *.debug等的格式,而不认 auth.* 的格式,所以你的 local0.* 在solaris系统中肯定是错误的。
 
abao22 发表于: 2002/11/22 03:21pm
[这个贴子最后由abao22在 2002/11/22 03:27pm 编辑]

 
tomduanj 发表于: 2002/11/22 05:01pm
call,现在大家都明白了,solaris 的通配符*只能用在 facility中,而level是不行的,而在linux中是都可以的
 
monkeysun 发表于: 2002/12/12 11:57am
Configuring the /etc/syslog.conf File
A configuration entry in the /etc/syslog.conf file consists of two
tab-separated fields: selector and action.
The selector field consists of a facility and a level written as
facility.level. Facilities represent categories of system processes
that can generate messages. Levels represent the severity or
importance of the message.
The action field determines where to send the message.
For example, placing the following entry in the /etc/syslog.conf
file causes error messages for all facilities to be sent to the
/var/adm/messages file:
*.err /var/adm/messages
where
*.err Is the selector field; * is the facility, . is the
delimiter, and err is the level of the message
/var/adm/messages Is the action field


Caution – Only use tabs as white space in the /etc/syslog.conf file.

Selector Field
The selector field is a semicolon-separated list of priority specifications
of the form:
facility.level; facility.level.

Facility is a system facility that is defined by the items shown in
Table 3-1.
<font color="red" face="arial"><b>
Note – You can use the * to select all facilities (for example *.err);
however, you cannot use it to select all levels for a facility (for
example, kern.*)</b></font>
----------------------------------------
SA228 3-6

 
非凡公子 发表于: 2002/12/12 12:21pm
我的syslog.conf 中是這樣寫的
auth.notice                     ifdef(`LOGHOST', /var/log/authlog, @loghost)

cat /var/log/authlogDec 12 12:16:06 yt168sun220 sshd2[578]: [ID 702911 auth.notice] Password authentication for user root accepted.
Dec 12 12:16:06 yt168sun220 sshd2[578]: [ID 702911 auth.notice] User root, coming from 192.168.0.19, authenticated

系統為solaris 8 sparc,記錄了IP了呀

 
doffinee 发表于: 2002/12/12 06:21pm
老大啊,Solaris本来就是这样的,*只能用来指facility的,Level是禁止--这个在manual里面很清楚的。  呆了大家那么长时间的胃口, 唉 ~
 
phoenixli 发表于: 2002/12/12 06:29pm
小问题咯~~~不值当D~~~
 
dblife 发表于: 2002/12/18 05:20pm
just a test
 
ericyi 发表于: 2002/12/18 10:25pm
楼上的老兄,你怎么这样的呀。我曾经在linux下也没有成功,恳请能赐教。
 
 

Copyright © ChinaUnix.net  *  转载请注明出处及作者