使用 logadm 管理日志

如果 poold 处于活动状态,则 logadm.conf 文件将包含管理缺省文件 /var/log/pool/poold 的条目。此条目为:
/var/log/pool/poold -N -s 512k

一、有关课程设置

1、安全概述

一个好的安全管理计划应该包括
A、 安全策略
B、 物理安全
C、 平台安全
D、 网络安全
E、 应用安全
F、 安全操作和管理
我们的培训主要涉及的是 C D ,系统级的安全和网络的安全。

2、安全等级的划分(桔皮书)

D
提供最少的保护
C1
基本的授权和认证(默认)
C2
提供审计功能, BSM 模块被安装配置
B1
基于特殊版本的安全等级
B2
更严格的管理,需要通过专门的安全工具来实现
B3
记录所有的操作行为
A
理论化的安全

二、Solaris的日志文件

1、管理日志文件的几个要点

A、 定期备份日志文件,最好是每天备份
B、 在备份日志文件之后,清除已经备份的日志,防止日志文件过大
C、 定期察看日志文件,有没有异常的登陆和读取日志的情况
D、 使用过滤器过滤关注的信息,同时确保没有遗漏的日志内容
E、 发送日志到单独的日志管理服务器,并保存多份

2、几个重要的日志文件

A /var/adm/lastlog 上次登陆的信息
成功登陆后可以修改登陆的信息,所以应该定期将日志拷贝到安全的地方。
B /var/adm/loginlog 连续五次登陆不成功的信息,默认是未打开的。
C /var/adm/utmpx 保存当前登陆到服务器的情况, who,w,whodo,users,finger 读取的日志
D /var/adm/wtmpx 用户 login logout 的信息,扩展信息保存在 /etc/wtmp 下面,记录连接的类型、远程服务器的名字等,用 last 读取的日志
E /var/adm/sulog su 的日志文件,配置文件是 /etc/default/su ,同样,***登陆后可以修改日志内容。
配置文件:
# more su
#ident "@(#)su.dfl 1.6 93/08/14 SMI" /* SVr4.0 1.2 */
# SULOG determines the location of the file used to log all su attempts
#
SULOG=/var/adm/sulog -- 日志的位置
……
# SYSLOG determines whether the syslog(3) LOG_AUTH facility should be used
# to log all su attempts. LOG_NOTICE messages are generated for su's to
# root, LOG_INFO messages are generated for su's to other users, and LOG_CRIT
# messages are generated for failed su attempts.
#
SYSLOG=YES
日志文件:
# tail sulog
SU 05/24 12:45 + pts/1 boba-root
SU 05/24 12:45 + pts/1 boba-orapcard
SU 05/24 12:50 + pts/1 boba-root
SU 05/24 12:51 + pts/1 boba-orapcard
SU 07/04 11:00 + pts/1 boba-root 成功登陆的记录 +
SU 07/19 14:48 - pts/1 boba-root 不成功登陆的记录 -
SU 07/19 14:48 - pts/1 boba-root
SU 07/19 14:48 + pts/1 boba-root
F /var/adm/messages 缺省所有的消息都会发送到控制台,并填写到该日志文件

3、配置和使用系统日志管理工具

syslog 工具的一个优点就是可以收集应用程序发送的提示信息,而不需要单独建立日志文件。对应的配置文件是 /etc/syslog.conf
$ ps -ef | grep syslogd
boba 524 517 0 08:49:15 pts/7 0:00 grep syslogd
root 202 1 0 08:27:47 ? 0:00 /usr/sbin/syslogd
配置文件 syslog.conf :(需要注意的是配置文件的对应类型和执行操作之间应该是 TAB ,不是空格,否则 syslog 工具会忽略操作内容,通过 cat –vet syslog.conf 可以显示分隔符类型)
# cat /etc/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;auth.notice /dev/sysmsg
*.err;kern.debug;daemon.notice;auth.notice;mail.crit /var/adm/messages
auth.debug /var/adm/authlogs
*.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 *
)
日志内容:每个 messages 由四个部分组成:
1、 program name 程序名
2、 Facility 消息的种类,包括 kernel,user,mark,auth
3、 Priority 优先级,紧急程度,包括 emerg,alert,crit,err,warning
4、 Message text 日志内容
程序类型
描述
kern
Kernel
user
user process
mark
Time stamp
auth
认证程序( login,su 等)
daemon
网络后台进程( inetd ftpd 等)
*
所有工具
优先级
描述
emerg
紧急,通常需要广播给所有的用户
alert
需要快速响应
crit
临街警告
err
其他错误
warning
警告
notice
注意
info
信息
debug
调试
none
特别的优先级,表示可以被忽略
低优先级默认包含高优先级的内容
修改了配置文件,需要重启进程:
pkill –HUP syslogd
# cat /var/adm/messages
Jul 4 12:02:48 bj30 sshd[1053]: [ID 702911 auth.warning] DNS lookup failed for "***.***.***.***".
Jul 4 12:02:51 bj30 sshd[1053]: [ID 702911 auth.notice] User boba's local password accepted.
Jul 4 12:02:51 bj30 sshd[1053]: [ID 702911 auth.notice] Password authentication for user boba accepted.
Jul 4 12:02:51 bj30 sshd[1053]: [ID 702911 auth.notice] User boba, coming from ***.***.***.***, authenticated.
另外还有一些配置文件需要对应修改:
1 、修改 /etc/default/login 文件的 SYSLOG=YES 以记录所有 root 登陆和多次失败的登陆尝试。
2 、修改 /etc/default/login 文件的 SYSLOG_FAILED_LOGINS=0 ,记录所有失败的登陆尝试,默认值是 5
3 、修改 /etc/default/su SYSLOG=YES ,记录所有试图 su root 的操作。
# tail sc300log
Jul 19 17:17:59 bj30 sshd[173]: [ID 702911 auth.info ] connection from "***.***.***.***"
Jul 19 17:18:02 bj30 sshd[1749]: [ID 702911 auth.notice ] User boba's local password accepted.
Jul 19 17:18:02 bj30 sshd[1749]: [ID 702911 auth.notice] Password authentication for user boba accepted.
Jul 19 17:18:02 bj30 sshd[1749]: [ID 702911 auth.notice] User boba, coming from pointdb, authenticated.
Jul 19 17:18:11 bj30 su: [ID 366847 auth.notice] 'su root' succeeded for boba . /dev/pts/2
Jul 19 17:18:57 bj30 sshd[173]: [ID 702911 auth.info] connection from "***.***.***.***"
Jul 19 17:19:01 bj30 sshd[1767]: [ID 702911 auth.notice] User boba's local password accepted.
Jul 19 17:19:01 bj30 sshd[1767]: [ID 702911 auth.notice] Password authentication for user boba accepted.
Jul 19 17:19:01 bj30 sshd[1767]: [ID 702911 auth.notice] User boba, coming from pointdb, authenticated.
Jul 19 17:19:04 bj30 su: [ID 810491 auth.crit ] 'su root' failed for boba . /dev/pts/3
Syslog 工具存在一个隐患,就是他本身是不能限制接受什么日志,拒绝什么日志的,如果***可以往某一台服务器的 syslog 发送消息,就有可能恶意的发送日志,以致于把服务器的空间撑满,或者造成网络的堵塞,对于这个隐患需要进行安全管理。

4、有关日志集中管理:

优点:
1、 多个系统的复杂问题容易及时察看原因,因为所有的日志都在相同的服务器上,而不是分布在各自得服务器上。
2、 日志的备份管理简单
3、 日志监控可以集中、实时管理
4、 ***不容易修改日志的内容以隐藏自己的行踪
缺点:
1、 日志文件是明文传输的,有安全隐患
2、 集中管理的服务器如果是单机,存在单点故障的隐患,建议采用多机。
配置集中管理需要修改 /etc/syslog.conf 文件:
auth.notice @loghost1
auth.notice @loghost2
修改 /etc/services 文件:
删除
syslog 514/udp
这样其他服务器就不能发送日志到本机,如果不是作为集中日志管理服务器,就需要关掉该端口,这样就防止了***恶意的发送日志到本机。

5、日志备份

日志备份通过 crontab 中的 /usr/sbin/logadm 进行:
# crontab -l
#ident "@(#)root 1.20 01/11/06 SMI"
#
# The root crontab should be used to perform accounting data collection.
#
# The rtc command is run to adjust the real time clock if and when
# daylight savings time changes.
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
#10 3 * * * /usr/lib/krb5/kprop_. ___slave_kdcs___
对应的配置文件是: /etc/logadm.conf
# cat logadm.conf
……
# The format of lines in this file is:
# <logname> <options>
/var/log/syslog -C 8 -P 'Sat Aug 6 19:10:00 2005' -a 'kill -HUP `cat /var/run/syslog.pid`'
/var/adm/messages -C 4 -P 'Wed Aug 10 19:10:00 2005' -a 'kill -HUP `cat /var/run/syslog.pid`'
…….

6、对TCP连接请求做日志处理:inetd进程

inetd 是一个监听守护进程,他监听与提供 INTERNET 服务进程(如 rlogin,telnet) 进行连接的要求,并扩展所需的服务进程。默认情况下 inetd 监听的这些 daemon 均列于 /etc/inetd.conf 文件中。
# ps -ef | grep inetd
root 126 1 0 May 24 ? 0:00 /usr/sbin/inetd -s
root 1102 1097 0 09:15:58 pts/1 0:00 grep inetd
捕获的是 daemon.notice
对应的配置文件: /etc/default/inetd 打开纪录日志的选项,该配置文件在 solaris9 以后增加。
需要修改 ENABLE_CONNECTION_LOGGING=YES
配置文件 /etc/init.d/inetsvc
修改 inetd –s inetd –s –t
表示跟踪所有的 TCP 连接服务,记录客户端 IP 地址, TCP 端口号等等。
配置文件 /etc/syslog.conf ,表示将该进程发送的消息记录到对应得日志文件中
增加 daemon.notice /var/adm/messages
然后重启服务
/etc/init.d/inetsvc stop
/etc/init.d/inetsvc start

7、使用swatch工具监控日志文件:

免费的工具,可以从 internet 上下载。
swatch –c 配置文件 -t 需要监控的日志文件
发现监控的内容后可以执行的行为:
响铃、回写、发 mail 或者执行其他命令等
# cat /etc/swatch.conf
watchfor /REPEATED|FAILURES|Failed/
echo bold
echo inverse
bell 2
# swatch -c /etc/swatch.conf -t /var/adm/authlogs
swatch 的报警不会马上就提示,需要延迟大概 2 分钟左右。

8、进程监控工具

标准的进程监控的工具
who 显示当前谁在系统上
# who
boba pts/1 Jul 19 14:46 (pointdb)
whodo 显示当前谁在系统上做什么操作
# whodo
Tue Jul 19 16:35:45 CST 2005
bj30
pts/1 boba 14:46
pts/1 1623 0:00 sh
pts/1 1721 0:00 sh
pts/1 1734 0:00 whodo
w 显示目前谁在系统上做什么操作
# w
4:35pm up 56 day(s), 3:56, 1 user, load average: 0.02, 0.02, 0.02
User tty login@ idle JCPU PCPU what
boba pts/1 2:46pm 9 1 w
last 显示用户登录和 logout 的信息
# last
boba pts/1 pointdb Tue Jul 19 14:46 still logged in
boba pts/1 pointdb Tue Jul 19 11:39 - 13:47 (02:08)
boba pts/1 pointdb Mon Jul 18 16:56 - 19:52 (02:55)
boba pts/2 pointdb Mon Jul 18 16:43 - 18:51 (02:08)
boba pts/2 pointdb Mon Jul 18 16:40 - 16:43 (00:03)
boba pts/2 pointdb Mon Jul 18 16:35 - 16:37 (00:01)
finger 显示本地和远程用户的信息,对于某些有缺陷的版本,使用 finger 0@hostip 就可以看到某台服务器上的所有帐号。
# finger
Login Name TTY Idle When Where
boba ??? pts/1 Tue 14:46 pointdb
ps 显示进程
prstat 查看 CPU 利用率
prstat 要比 top 更加精确。它还提供了一些很好的选项。
"-a" 可以同时显示进程与用户的信息(默认由 CPU hog 排序)。
"-c" 使其执行很像 vmstat (在前一个报告下面接着显示新的报告)。
"-C" 显示在处理器集中的进程。
"-j" 显示一个 " 工程 " 中的进程。
"-L" 显示每个线程和每个进程的信息。
"-m" "-v" 显示每个进程的很多详细的性能信息(包括 pages traps lock wait CPU wait )。所有输出数据都可以按照在内存中设置的大小、虚拟内存大小、运行时间等等条件来排列。
# prstat
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
1738 root 2712K 2000K cpu1 58 0 0:00.00 0.1% prstat/1
1620 root 3144K 2232K sleep 58 0 0:00.02 0.0% sshd2/1
1456 root 1808K 1216K sleep 0 0 0:00.00 0.0% inetd/1
1721 root 312K 312K sleep 48 0 0:00.00 0.0% sh/1
1623 boba 1056K 904K sleep 58 0 0:00.00 0.0% sh/1
kill 结束异常进程
vmstat < 以秒计频率 > 列出系统负载明细
# vmstat
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s6 s7 s9 -- in sy cs us sy id
0 0 0 2504368 450640 0 0 0 0 0 0 0 0 0 0 0 401 0 16 0 1 99
procs 报表下面三种状态的进程数:
r--
在运行队列中等候运行
b--
被资源阻塞( I/0 ,页面调度,等等 .)
w--
可运行但是被换出的
memory
报告虚拟内存和实存信息:
swap--
以千字节为单位的当前可用交换空间的数量
free--
以千字节为单位的页自由表大小
page
报告每秒页面调度活动数量的信息 :
re-
从自由表回收页
mf--
次要的错误 ; 地址空间或硬件地址转换错误
pi--
页入的千字节数
po -
页出的千字节数
fr-
释放的千字节数
de--
以千字节为单位的可接受的短期内存不足数
sr--
页由时钟算法扫描
disk
可以为四个磁盘报告每秒磁盘 I/O 的数量
faults
报告每秒系统软件中断和硬件中断的速率
in-
设备中断,不包括系统时钟中断
sy-
系统调用
cs-CPU
任务(上下文)交换
cpu-- CPU
故障时间的百分比,在多处理器系统上,这是全部处理器的平均值 :
us-
用户时间
sy--
系统时间
id--
闲置时间
使用solaris 的记帐包进行数据的收集
缺省是未打开的
缺点:
1、 不能对监控的内容进行过滤
2、 数据膨胀迅速
3、 记录要等进程结束后才可以计入数据库,执行过程中不可见。
记帐包对应的程序: /usr/lib/acct
记账包收集的数据:
/var/adm/pacct :包含每次进程结束时候收集的信息。
/var/adm/wtmpx :包含登陆、退出、重启和关机操作。
/var/adm/acct/nite/disktacct dodisk 命令收集的有关硬盘的信息。
记录统计的数据在: /var/adm/acct
统计文件: /etc/adm/acct/sum 日报
/etc/adm/acct/fiscal 月报
建立记帐系统,通过 crontab –l adm 这个用户的 crontab 执行
启动服务 : /etc/init.d/acct start
关闭记帐服务: /usr/lib/acct/shutacct
# cd /etc
# ln init.d/acct rc2.d/S22acct
# ln init.d/acct rc1.d/K22acct
# ln init.d/acct rcS.d/K22acct
# ln init.d/acct rc0.d/K22acct
# /etc/init.d/acct start
Starting process accounting
# crontab -l adm
30 3 * * * /usr/lib/acct/ckpacct 空间检查,避免统计消耗大量 cpu ,在 /var/adm/pacct 文件大于 500K 的时候,就会停下来,直到空间被挪出。
30 4 * * * /usr/lib/acct/runacct 2>/var/adm/acct/nite/fd2log 从白天收集的数据生成日报
30 5 1 * * /usr/lib/monacct 从每天的日报生成月报
另外一个进程用普通用户执行些只有超级用户才能执行的操作:
$ id
uid=103(boba) gid=101(oinstall)
$ cat /etc/shadow
cat: cannot open /etc/shadow
$ /usr/sbin/snoop
snoop: /dev/hme: Permission denied
root 帐号执行 lastcomm 命令,可以检查用户执行的操作,就可以发现用户曾经试图执行有问题的操作:
# lastcomm boba
snoop boba pts/3 0.03 secs Tue Jul 19 17:59
cat boba pts/3 0.00 secs Tue Jul 19 17:59
id boba pts/3 0.02 secs Tue Jul 19 17:59
ls boba pts/3 0.01 secs Tue Jul 19 17:59
这里只能记录用户执行了 cat 操作,但是 cat 的对象和结果都不记录。而且只能记录用户执行了 vi 的操作,但是不能知道用户执行的是标准的 vi 操作,还是经过伪装的***程序。
每次程序退出的时候,记账包都会在 /var/adm/pacct 文件中记录以下的信息:
² UID GID 是用户登录的 ID ,不是 su 操作以后的 ID
² 进程开始和结束的时间
² User kernel cpu 时间
² 使用的内存总数
² 读和写的字符数量
² 命令名

三、BSM,内置的审计工具

可以定义审计的事件内容,是达到C2安全级别的标志, solaris 内置的工具。

1BSM的主要功能

功能:安全审计和设备的分配两个部分
安全审计:
n 用户的识别和认证
n 每个 sesssion 分配一个唯一的审计 ID

第 15 章 管理系统消息

本章介绍 Solaris 操作系统中的系统消息传送功能。

查看系统消息

系统消息显示在控制台设备中。大多数系统消息的文本如下所示:
[ID msgid facility. priority]
例如:

[ID 672855 kern.notice] syncing file systems...
如果消息来自内核,则会显示内核模块名称。例如:

Oct 1 14:07:24 mars ufs: [ID 845546 kern.notice] alloc: /: file system full 
当系统崩溃时,系统控制台可能会显示如下消息:

panic: error message
少数情况下,可能会显示以下消息而非故障消息:

Watchdog reset !
错误日志守护进程 syslogd 可在消息文件中自动记录各种系统警告和错误。缺省情况下,其中许多系统消息都会在系统控制台中显示,并存储在 /var/adm 目录中。通过设置系统消息日志可以指示这些消息的存储位置。有关更多信息,请参见 自定义系统消息日志。这些消息可以提醒您系统出现问题,例如设备将要出现故障。
/var/adm 目录中包含若干个消息文件。最新消息位于 /var/adm/messages 文件中(和 messages.* 中),而最旧的消息位于 messages.3 文件中。经过一段时间后(通常为每隔十天),会创建一个新的 messages 文件。 messages.0 文件被重命名为 messages.1messages.1 被重命名为 messages.2,而 messages.2 被重命名为 messages.3。当前的 /var/adm/messages.3 文件将被删除。
由于 /var/adm 目录存储包含消息、故障转储和其他数据的大型文件,因此该目录可能会占用许多磁盘空间。为防止 /var/adm 目录变得过大,并确保可以保存将来的故障转储,应定期删除不需要的文件。可以使用 crontab 文件自动执行此任务。有关自动执行此任务的更多信息,请参见 如何删除故障转储文件和 第 8 章。

Procedure如何查看系统消息

  1. 使用 dmesg 命令显示由系统崩溃或重新引导生成的最新消息。

    $ dmesg
    或者,使用 more 命令逐屏显示消息。

    $ more /var/adm/messages

示例 15–1 查看系统消息

以下示例显示 dmesg 命令的输出。

$ dmesg
Jan 3 08:44:41 starbug genunix: [ID 540533 kern.notice] SunOS Release 5.10 ...
Jan 3 08:44:41 starbug genunix: [ID 913631 kern.notice] Copyright 1983-2003 ...
Jan 3 08:44:41 starbug genunix: [ID 678236 kern.info] Ethernet address ...
Jan 3 08:44:41 starbug unix: [ID 389951 kern.info] mem = 131072K (0x8000000)
Jan 3 08:44:41 starbug unix: [ID 930857 kern.info] avail mem = 121888768
Jan 3 08:44:41 starbug rootnex: [ID 466748 kern.info] root nexus = Sun Ultra 5/
10 UPA/PCI (UltraSPARC-IIi 333MHz)
Jan 3 08:44:41 starbug rootnex: [ID 349649 kern.info] pcipsy0 at root: UPA 0x1f0x0
Jan 3 08:44:41 starbug genunix: [ID 936769 kern.info] pcipsy0 is /pci@1f,0
Jan 3 08:44:41 starbug pcipsy: [ID 370704 kern.info] PCI-device: pci@1,1, simba0
Jan 3 08:44:41 starbug genunix: [ID 936769 kern.info] simba0 is /pci@1f,0/pci@1,1
Jan 3 08:44:41 starbug pcipsy: [ID 370704 kern.info] PCI-device: pci@1, simba1
Jan 3 08:44:41 starbug genunix: [ID 936769 kern.info] simba1 is /pci@1f,0/pci@1
Jan 3 08:44:57 starbug simba: [ID 370704 kern.info] PCI-device: ide@3, uata0
Jan 3 08:44:57 starbug genunix: [ID 936769 kern.info] uata0 is /pci@1f,0/pci@1,
1/ide@3
Jan 3 08:44:57 starbug uata: [ID 114370 kern.info] dad0 at pci1095,6460
.
.
.

另请参见
有关更多信息,请参见 dmesg(1M) 手册页。

系统日志轮转

使用 root crontab 中的一个项内的 logadm 命令,可以轮转系统日志文件。不再使用 /usr/lib/newsyslog 脚本。
系统日志轮转在 /etc/logadm.conf 文件中定义。此文件包含用于 syslogd 等进程的日志轮转项。例如, /etc/logadm.conf 文件中的一个项指定,除非 /var/log/syslog 文件为空,否则该文件每周轮转一次。最新的 syslog 文件成为 syslog.0,下一个最新的文件成为 syslog.1,依此类推。会保留八个以前的 syslog 日志文件。
/etc/logadm.conf 文件还包含记录最后一次日志轮转发生时间的时间标记。
可以使用 logadm 命令来自定义系统日志,并可根据需要在 /etc/logadm.conf 文件中添加其他日志。
例如,要轮转 Apache 访问和错误日志,请使用以下命令:

# logadm -w /var/apache/logs/access_log -s 100m
# logadm -w /var/apache/logs/error_log -s 10m
在此示例中,Apache access_log 文件会在大小达到 100 MB 时进行轮转,以 .0.1 等作为后缀,并保留旧 access_log 文件的 10 个副本。 error_log 会在大小达到 10 MB 时进行轮转,后缀和副本数与 access_log 文件相同。
用于上述 Apache 日志轮转示例的 /etc/logadm.conf 项与以下示例类似:

# cat /etc/logadm.conf
.
.
.
/var/apache/logs/error_log -s 10m
/var/apache/logs/access_log -s 100m
有关更多信息,请参见 logadm(1M)。
可以超级用户身份或通过承担等效角色(具有日志管理权限)来使用 logadm 命令。通过基于角色的访问控制 (role-based access control, RBAC),您可以通过提供对 logadm 命令的访问来授予非超级用户维护日志文件的权限。
例如,可通过向 /etc/user_attr 文件添加以下项,授予用户 andy 使用 logadm 命令的权限:

andy::::profiles=Log Management
或者,也可以使用 Solaris 管理控制台来设置用于日志管理的角色。有关设置角色的更多信息,请参见 《系统管理指南:安全性服务》中的“基于角色的访问控制(概述)”

自定义系统消息日志

通过修改 /etc/syslog.conf 文件,可以捕获各个系统进程生成的其他错误消息。缺省情况下, /etc/syslog.conf 文件会将许多系统进程消息定向到 /var/adm/messages 文件。崩溃和引导消息也存储在这些文件中。要查看 /var/adm 消息,请参见 如何查看系统消息。
/etc/syslog.conf 文件有两个通过制表符分隔的列:

facility.level ... action
facility.level
消息或情况的 工具或系统源。可能是由逗号分隔的工具列表。 表 15–1 中列出了工具值。 level,表示所记录情况的严重程度或优先级。 表 15–2 中列出了优先级。
如果同一工具的两个项用于不同优先级,则不要将这两个项放在同一行中。在 syslog 文件中放置优先级表示将记录该优先级或更高优先级的所有消息,最后一条消息优先。对于给定的工具和级别, syslogd 将匹配该级别以及所有更高级别的所有消息。
action
操作字段表示将消息转发到的位置。
以下示例显示缺省的 /etc/syslog.conf 文件中的样例行。

user.err                                        /dev/sysmsg
user.err /var/adm/messages
user.alert `root, operator'
user.emerg *
这意味着将自动记录以下用户消息:
  • 将用户错误列显到控制台,同时将其记录到 /var/adm/messages 文件中。
  • 将需要立即操作的用户消息 ( alert) 发送给超级用户和操作员用户。
  • 将用户紧急消息发送给各用户。

注 –
如果在 /etc/syslog.conf 文件中多次指定一个日志目标,则将各项分别放置在不同的行中可能会导致消息的记录顺序混乱。请注意,可在一个行项中指定多个选择器,每个选择器之间用分号分隔。

下表中显示了最常见的错误情况源。 表 15–2 按严重程度显示最常见的优先级。
表 15–1 syslog.conf 消息的源工具

源 
说明 
kern
内核 
auth
验证 
daemon
所有守护进程 
mail
邮件系统 
lp
假脱机系统 
user
用户进程 

注 –
可在 /etc/syslog.conf 文件中激活的 syslog 工具数没有限制。

表 15–2 syslog.conf 消息的优先级

优先级 
说明 
emerg
系统紧急情况 
alert
需要立即更正的错误 
crit
严重错误 
err
其他错误 
info
提示性消息 
debug
用于调试的输出 
none
此设置不记录输出  

Procedure如何自定义系统消息日志

  1. 成为超级用户或承担等效角色。
    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见 《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”
编辑 /etc/syslog.conf 文件,根据 syslog.conf(4) 中介绍的语法添加或更改消息源、优先级和消息位置。
退出文件,保存更改。

示例 15–2 自定义系统消息日志

此样例 /etc/syslog.conf user.emerg 工具可向超级用户 个人用户发送用户紧急消息。

user.emerg                                      `root, *'

启用远程控制台消息传送

以下新增控制台功能可以提高您对远程系统进行故障排除的能力:
  • 利用 consadm 命令,您可以选择串行设备作为 辅助(或远程)控制台。使用 consadm 命令,系统管理员可以配置一个或多个串行端口,以便当系统在不同运行级之间转换时显示重定向的控制台消息,并托管 sulogin 会话。借助此功能,您可用调制解调器拨入并连接到串行端口,以监视控制台消息并参与 init 状态转换。(有关更多信息,请参见 sulogin(1M) 和后面的逐步过程。)
    使用配置为辅助控制台的端口登录系统时,它主要用作输出设备,其中显示的信息也在缺省控制台中显示。如果引导脚本或其他应用程序从缺省控制台中读取 内容或向其中写入内容,则写入输出将在所有辅助控制台上显示,但输入只从缺省控制台中读取。(有关在交互式登录会话过程中使用 consadm 命令的更多信息,请参见 在交互式登录会话期间使用 consadm 命令。)
  • 控制台输出包括内核和写入新的伪设备 /dev/sysmsgsyslog 消息。此外, rc 脚本启动消息也将写入 /dev/msglog。以前,所有这些消息都写入 /dev/console
    如果希望看到显示在辅助控制台中的脚本消息,那么需要把将控制台输出定向到 /dev/console 的脚本更改为 /dev/msglog。如果希望将消息重定向到辅助设备,则应该将引用 /dev/console 的程序显式修改为使用 syslog()strlog()
  • consadm 命令运行守护进程来监视辅助控制台设备。指定为辅助控制台并且已断开、挂起或失去载体的任何显示设备都将从辅助控制台设备列表中删除,并且不再处于活动状态。启用一个或多个辅助控制台不会禁用缺省控制台上的消息显示,消息将继续在 /dev/console 中显示。

在运行级转换期间使用辅助控制台消息传递

在运行级转换期间使用辅助控制台消息传递时,请记住以下几点:
  • 如果在系统引导时运行的 rc 脚本期望用户输入,则输入不能来自辅助控制台。输入必须来自缺省控制台。
  • init 调用以用于在运行级之间转换时提示输入超级用户口令的 sulogin 程序已被修改,除了缺省控制台设备之外,还可以向每个辅助设备发送超级用户口令提示。
  • 当系统处于单用户模式并且使用 consadm 命令启用一个或多个辅助控制台时,将在第一个设备上运行控制台登录会话,以便为 sulogin 提示提供正确的超级用户口令。从控制台设备收到正确口令时, sulogin 将禁用来自所有其他控制台设备的输入。
  • 如果其中一个控制台承担了单用户特权,将在缺省控制台和其他辅助控制台上显示一条消息。此消息指出已通过接受正确的超级用户口令而成为控制台的设备。如果运行单用户 shell 的辅助控制台中丢失载体,则会执行以下两种操作之一:
    • 如果辅助控制台代表一个处于运行级 1 的系统,则系统会继续到缺省运行级。
    • 如果辅助控制台代表一个处于运行级 S 的系统,则系统会显示已通过 Shell 输入 init sshutdown 命令的设备中的 ENTER RUN LEVEL (0-6, s or S): 消息。如果该设备中也没有任何载体,则必须重新建立载体并输入正确的运行级。 initshutdown 命令不再重新显示运行级提示。
  • 如果使用串行端口登录系统,并发出 initshutdown 命令以转换到其他运行级,则无论此设备是否为辅助控制台,登录会话都将丢失。此情况与没有辅助控制台功能的 Solaris 发行版相同。
  • 一旦使用 consadm 命令将设备选作辅助控制台,该设备将一直用作辅助控制台,直到重新引导系统或取消选中辅助控制台。但是, consadm 命令有一个选项,可在系统重新引导期间将设备设置为辅助控制台。(有关逐步说明,请参见以下过程。)

在交互式登录会话期间使用 consadm 命令

如果要通过使用与串行端口连接的终端登录系统,再使用 consadm 命令查看终端的控制台消息的方式来运行交互式登录会话,请注意以下行为。
  • 如果在辅助控制台处于活动状态时将终端用于交互式登录会话,则会向 /dev/sysmsg/dev/msglog 设备发送控制台消息。
  • 在终端发出命令时,输入将转到交互式会话而非缺省控制台 ( /dev/console)。
  • 如果运行 init 命令更改运行级,远程控制台软件将中止交互式会话并运行 sulogin 程序。此时,只接受来自终端的输入,并将其视为来自控制台设备的输入。这样您便可以按 在运行级转换期间使用辅助控制台消息传递中所述为 sulogin 程序输入口令。
    然后,如果您在(辅助)终端中输入正确口令,辅助控制台将运行交互式 sulogin 会话,并锁定缺省控制台和任何竞争性的辅助控制台。这意味着,终端基本上可用作系统控制台。
  • 此时,您可以更改到运行级 3 或转到其他运行级。如果更改运行级, sulogin 将在所有控制台设备中再次运行。如果您退出或指定系统应达到运行级 3,则所有辅助控制台都将丧失提供输入的能力。它们将恢复为控制台消息的显示设备。
    随着系统的提升,您必须为缺省控制台设备中的 rc 脚本提供信息。在系统恢复启动后, login 程序将在串行端口上运行,您可以重新登录到其他交互式会话中。如果已将该设备指定为辅助控制台,您将继续在终端中获得控制台消息,但来自该终端的所有输入都将转至交互式会话。

Procedure如何启用辅助(远程)控制台

在您使用 consadm 命令添加辅助控制台之前, consadm 守护进程不会开始监视端口。作为一种安全功能,在载体脱机或取消选择辅助控制台设备之前,控制台消息只能重定向。这意味着必须在端口中建立载体,才能成功使用 consadm 命令。
有关启用辅助控制台的更多信息,请参见 consadm(1m) 手册页。
以超级用户身份登录系统。
启用辅助控制台。

# consadm -a devicename
验证当前连接是否为辅助控制台。

# consadm

示例 15–3 启用辅助(远程)控制台


# consadm -a /dev/term/a
# consadm
/dev/term/a

Procedure如何显示辅助控制台的列表

以超级用户身份登录系统。
选择以下步骤之一:
显示辅助控制台的列表。

# consadm
/dev/term/a
显示持久性辅助控制台的列表。

# consadm -p
/dev/term/b

Procedure如何在系统重新引导期间启用辅助(远程)控制台

以超级用户身份登录系统。
在系统重新引导期间启用辅助控制台。

# consadm -a -p devicename     
这将会向持久性辅助控制台列表中添加设备。
验证设备是否已添加至持久性辅助控制台的列表中。

# consadm

示例 15–4 在系统重新引导期间启用辅助(远程)控制台


# consadm -a -p /dev/term/a 
# consadm
/dev/term/a

Procedure如何禁用辅助(远程)控制台

以超级用户身份登录系统。
选择以下步骤之一:
禁用辅助控制台。

# consadm -d devicename
禁用辅助控制台并从持久性辅助控制台列表中将其删除。

# consadm -p -d devicename
验证是否已禁用辅助控制台。

# consadm

示例 15–5 禁用辅助(远程)控制台


# consadm -d /dev/term/a
# consadm