跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 11.1 管理:安全服务 Oracle Solaris 11.1 Information Library (简体中文) |
本节介绍各种审计错误消息、首选项以及其他工具提供的审计。这些过程可以帮助您记录所需的审计事件和调试审计问题。
以下任务列表列出了审计的故障排除过程。
|
缺省情况下启用审计。如果您认为审计尚未禁用,但没有将任何审计记录发送到活动插件,请使用以下过程隔离问题。
开始之前
要修改系统文件,您必须指定有 solaris.admin.edit/path-to-system-file 授权。缺省情况下,root 角色拥有此授权。要配置审计,您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员。
使用以下任一方法:
以下列表说明,审计未在运行中:
# auditconfig -getcond audit condition = noaudit
以下列表说明审计正在运行中:
# auditconfig -getcond audit condition = auditing
以下列表说明,审计未在运行中:
# svcs -x auditd svc:/system/auditd:default (Solaris audit daemon) State: disabled since Sun Oct 10 10:10:10 2010 Reason: Disabled by an administrator. See: http://support.oracle.com/msg/SMF-8000-05 See: auditd(1M) See: audit(1M) See: auditconfig(1M) See: audit_flags(5) See: audit_binfile(5) See: audit_syslog(5) See: audit_remote(5) See: /var/svc/log/system-auditd:default.log Impact: This service is not running.
以下列表说明,审计服务正在运行中:
# svcs auditd STATE STIME FMRI online 10:10:10 svc:/system/auditd:default
如果审计服务没有运行,请启用该服务。有关过程,请参见如何启用审计服务。
# audit -v audit: no active plugin found
如果没有任何插件处于活动状态,则激活一个插件。
# auditconfig -setplugin audit_binfile active # audit -v configuration ok
例如,以下标志列表包含 Oracle Solaris 软件不提供的 pf 类:
# auditconfig -getflags active user default audit flags = pf,lo(0x0100000000000000,00x0100000000001000) configured user default audit flags = pf,lo(0x0100000000000000,00x0100000000001000)
有关创建 pf 类的说明,请参见如何添加审计类。
审计类必须定义,其掩码必须唯一。
# grep pf /etc/security/audit_classVerify class exists 0x0100000000000000:pf:profile # grep 0x0100000000000000 /etc/security/audit_classEnsure mask is unique 0x0100000000000000:pf:profile
替换不唯一的掩码。如果没有定义该类,请定义它。否则,使用有效值运行 auditconfig -setflags 命令以重置当前标志。
使用以下方法之一:
# auditconfig -lsevent | egrep " pf|,pf|pf," AUE_PFEXEC 116 pf execve(2) with pfexec enabled
# auditrecord -c pf List of audit events assigned to pf class
如果未将事件分配给该类,请向其分配适当的事件。
audit_warn 脚本将警报消息发送到 audit_warn 电子邮件别名。如果缺少正确配置的别名,消息将发送到 root 帐户。
svcs -s auditd 命令的输出列出审计服务生成的审计日志的完整路径。有关示例,请参见步骤 1 中的列表。
audit_warn 脚本将 daemon.alert 消息写入 /var/log/syslog 文件。
/var/adm/messages 文件可能会包含信息。
# audit -s
在确定在您的站点中必须审计哪些事件后,请按照以下建议来创建仅包含您所需信息的审计文件。
开始之前
要预选审计类和设置审计策略,您必须指定有 Audit Configuration(审计配置)权限配置文件。要修改系统文件,您必须指定有 solaris.admin.edit/path-to-system-file 授权。缺省情况下,root 角色拥有此授权。要将审计标志指定给用户、角色和权限配置文件,您必须承担 root 角色。
具体而言,应避免向审计迹中添加事件和审计标记。以下策略会增长审计迹的大小。
arge 策略-向 execv 审计事件添加环境变量。虽然审计 execv 事件的开销可能很大,但向审计记录添加变量的开销很小。
argv 策略-向 execv 审计事件添加命令参数。虽然审计 execv 事件的开销可能很大,但向审计记录添加命令参数的开销很小。
public 策略-如果正在审计文件事件,每次public object(公共对象)发生可审计事件时,都会将一个事件添加到审计迹中。文件类包括 fa、fc、fd、fm、fr、 fw 和 cl。有关公共文件的定义,请参见审计术语和概念。
path 策略-将 path 标记添加到包含可选 path 标志的审计事件。
group 策略-将组标记添加到包含可选 newgroups 标记的审计事件。
seq 策略-将序列标记添加到每个审计事件。
trail 策略-将尾部标记添加到每个审计事件。
windata_down 策略-在配置了 Trusted Extensions 的系统上,在有标签窗口中的信息降级时添加事件。
windata_up 策略-在配置了 Trusted Extensions 的系统上,在有标签窗口中的信息升级时添加事件。
zonename 策略-将区域名称添加到每个审计事件。如果全局区域是配置的唯一区域,将字符串 zone, global 添加到每个审计事件。
以下审计记录显示了 ls 命令的用法。正在审计 ex 类,且正在使用缺省策略:
header,129,2,AUE_EXECVE,,mach1,2010-10-14 11:39:22.480 -07:00 path,/usr/bin/ls attribute,100555,root,bin,21,320271,18446744073709551615 subject,jdoe,root,root,root,root,2404,50036632,82 0 mach1 return,success,0
以下是启用所有策略时的相同记录:
header,1578,2,AUE_EXECVE,,mach1,2010-10-14 11:45:46.658 -07:00 path,/usr/bin/ls attribute,100555,root,bin,21,320271,18446744073709551615 exec_args,2,ls,/etc/security exec_env,49,MANPATH=/usr/share/man,USER=jdoe,GDM_KEYBOARD_LAYOUT=us,EDITOR=gedit, LANG=en_US.UTF-8,GDM_LANG=en_US.UTF-8,PS1=#,GDMSESSION=gnome,SESSIONTYPE=1,SHLVL=2, HOME=/home/jdoe,LOGNAME=jdoe,G_FILENAME_ENCODING=@locale,UTF-8, PRINTER=example-dbl, ... path,/lib/ld.so.1 attribute,100755,root,bin,21,393073,18446744073709551615 subject,jdoe,root,root,root,root,2424,50036632,82 0 mach1 group,root,other,bin,sys,adm,uucp,mail,tty,lp,nuucp,daemon return,success,0 zone,global sequence,197 trailer,1578
但不将这些审计事件发送到 audit_binfile 或 audit_remote 插件。只有当不要求保留发送到 syslog 日志的审计事件的二进制记录时,才适合使用此方法。
通过减少系统范围内审计的审计类的数目,来减少对所有用户的审计量。
使用 roleadd、rolemod、useradd 和 usermod 命令的 audit_flags 关键字审计特定用户和角色的事件。有关示例,请参见示例 28-21 和 usermod(1M) 手册页。
使用 profiles 命令的 always_audit 和 never_audit 属性审计特定权限配置文件的事件。有关信息,请参见 profiles(1) 手册页。
可以在您的站点上创建审计类。仅将需要监视的审计事件分配给这些类。有关过程,请参见如何添加审计类。
作为站点安全策略的一部分,有些站点会需要 root 帐户和管理角色运行的所有命令的审计记录。一些站点可能会需要所有用户运行的所有命令的审计记录。此外,站点可能还会要求记录命令参数和环境。
开始之前
要预选审计类和设置审计策略,您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员。要将审计标志指定给用户、角色和权限配置文件,您必须承担 root 角色。
ex 类审计对 exec() 和 execve() 函数的所有调用。
lo 类审计登录、注销和屏幕锁定。以下输出列出了 ex 和 lo 类中的所有事件。
% auditconfig -lsevent | grep " lo " AUE_login 6152 lo login - local AUE_logout 6153 lo logout AUE_telnet 6154 lo login - telnet AUE_rlogin 6155 lo login - rlogin AUE_rshd 6158 lo rsh access AUE_su 6159 lo su AUE_rexecd 6162 lo rexecd AUE_passwd 6163 lo passwd AUE_rexd 6164 lo rexd AUE_ftpd 6165 lo ftp access AUE_ftpd_logout 6171 lo ftp logout AUE_ssh 6172 lo login - ssh AUE_role_login 6173 lo role login AUE_newgrp_login 6212 lo newgrp login AUE_admin_authenticate 6213 lo admin login AUE_screenlock 6221 lo screenlock - lock AUE_screenunlock 6222 lo screenlock - unlock AUE_zlogin 6227 lo login - zlogin AUE_su_logout 6228 lo su logout AUE_role_logout 6229 lo role logout AUE_smbd_session 6244 lo smbd(1m) session setup AUE_smbd_logoff 6245 lo smbd(1m) session logoff AUE_ClientConnect 9101 lo client connection to x server AUE_ClientDisconnect 9102 lo client disconn. from x server % auditconfig -lsevent | egrep " ex |,ex |ex," AUE_EXECVE 23 ex,ps execve(2)
在以下示例中,root 是一个角色。站点已创建 sysadm、auditadm 和 netadm 三个角色。针对 ex 和 lo 类中的成功事件和失败事件审计所有角色。
# rolemod -K audit_flags=lo,ex:no root # rolemod -K audit_flags=lo,ex:no sysadm # rolemod -K audit_flags=lo,ex:no auditadm # rolemod -K audit_flags=lo,ex:no netadm
# auditconfig -setflags lo,ex
输出内容类似如下:
header,129,2,AUE_EXECVE,,mach1,2010-10-14 12:17:12.616 -07:00 path,/usr/bin/ls attribute,100555,root,bin,21,320271,18446744073709551615 subject,jdoe,root,root,root,root,2486,50036632,82 0 mach1 return,success,0
# auditconfig -setpolicy +argv
exec_args 标记用于记录命令参数:
header,151,2,AUE_EXECVE,,mach1,2010-10-14 12:26:17.373 -07:00 path,/usr/bin/ls attribute,100555,root,bin,21,320271,18446744073709551615 exec_args,2,ls,/etc/security subject,jdoe,root,root,root,root,2494,50036632,82 0 mach1 return,success,0
# auditconfig -setpolicy +arge
exec_env 标记用于记录命令环境:
header,1460,2,AUE_EXECVE,,mach1,2010-10-14 12:29:39.679 -07:00 path,/usr/bin/ls attribute,100555,root,bin,21,320271,18446744073709551615 exec_args,2,ls,/etc/security exec_env,49,MANPATH=/usr/share/man,USER=jdoe,GDM_KEYBOARD_LAYOUT=us,EDITOR=gedit, LANG=en_US.UTF-8,GDM_LANG=en_US.UTF-8,PS1=#,GDMSESSION=gnome,SESSIONTYPE=1,SHLVL=2, HOME=/home/jdoe,LOGNAME=jdoe,G_FILENAME_ENCODING=@locale,UTF-8, PRINTER=example-dbl,...,_=/usr/bin/ls subject,jdoe,root,root,root,root,2502,50036632,82 0 mach1 return,success,0
如果您的目标是记录对有限数目的文件(如 /etc/passwd 和 /etc/default 目录下的文件)的写入情况,请使用 auditreduce 命令找到这些文件。
开始之前
root 角色可以执行此过程中的所有任务。
如果您的组织中的管理权限是分散的,请注意以下事项:
具有 Audit Configuration(审计配置)权限配置文件的管理员可以运行 auditconfig 命令。
具有 Audit Review(审计查看)权限配置文件的管理员可以运行 auditreduce 命令。
只有 root 角色可以指定审计标志。
有关更多信息,请参见如何使用指定给您的管理权限。
将类添加到用户或角色的审计标志时生成的记录少于将类添加到系统范围的审计预选掩码时生成的记录。执行下列步骤之一:
# rolemod -K audit_flags=fw:no root # rolemod -K audit_flags=fw:no sysadm # rolemod -K audit_flags=fw:no auditadm # rolemod -K audit_flags=fw:no netadm
# auditconfig -getflags active user default audit flags = lo(0x1000,0x1000) configured user default audit flags = lo(0x1000,0x1000) # auditconfig -setflags lo,fw user default audit flags = lo,fw(0x1002,0x1002)
审计成功事件时生成的记录少于同时审计失败事件和成功事件时生成的记录。执行下列步骤之一:
# rolemod -K audit_flags=+fw:no root # rolemod -K audit_flags=+fw:no sysadm # rolemod -K audit_flags=+fw:no auditadm # rolemod -K audit_flags=+fw:no netadm
# auditconfig -getflags active user default audit flags = lo(0x1000,0x1000) configured user default audit flags = lo(0x1000,0x1000) # auditconfig -setflags lo,+fw user default audit flags = lo,+fw(0x1002,0x1000)
# auditconfig -getflags active user default audit flags = lo,fw(0x1002,0x1002) configured user default audit flags = lo,fw(0x1002,0x1002) # rolemod -K audit_flags=^-fw:no root # rolemod -K audit_flags=^-fw:no sysadm # rolemod -K audit_flags=^-fw:no auditadm # rolemod -K audit_flags=^-fw:no netadm
系统范围的标志仍保持不变,但这四个角色的预选掩码发生了更改。
# auditconfig -getflags active user default audit flags = lo,fw(0x1002,0x1000) configured user default audit flags = lo,fw(0x1002,0x1000)
# auditreduce -o file=/etc/passwd,/etc/default -O filechg
auditreduce 命令在审计迹中搜索所有 file 参数实例。该命令创建一个后缀为 filechg 的二进制文件,此文件包含了包括相关文件路径名的所有记录。有关 -o file=pathname 选项的语法,请参见 auditreduce(1M) 手册页。
# praudit *filechg
您希望审计已登录用户系统范围的审计预选掩码的更改。
开始之前
您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员。要终止用户会话,您必须是指定有 Process Management(进程管理)权限配置文件的管理员。有关更多信息,请参见如何使用指定给您的管理权限。
您有两种选择。可以停止现有会话,或使用 auditconfig 命令更新预选掩码。
用户可以注销后重新登录。或者,角色指定有 Process Management(进程管理)权限配置文件时,您可以手动停止(中止)活动会话。新的会话将继承新的预选掩码。但是,终止用户可能不现实。
在本示例中,假设您将系统范围的审计预选掩码从 lo 更改为 lo,ex。
# auditconfig -setflags lo,ex
# who -a jdoe - vt/2 Jan 25 07:56 4:10 1597 (:0) jdoe + pts/1 Jan 25 10:10 . 1706 (:0.0) ... jdoe + pts/2 Jan 25 11:36 3:41 1706 (:0.0)
# auditconfig -getpinfo 1706 audit id = jdoe(1234) process preselection mask = lo(0x1000,0x1000) terminal id (maj,min,host) = 9426,65559,mach1(192.168.123.234) audit session id = 103203403
# auditconfig -setpmask 1706 lo,ex /* for this process */ # auditconfig -setumask jdoe lo,ex /* for this user */ # auditconfig -setsmask 103203403 lo,ex /* for this session */
例如,检查更改掩码之前存在的进程。
# auditconfig -getpinfo 1706 audit id = jdoe(1234) process preselection mask = ex,lo(0x40001000,0x40001000) terminal id (maj,min,host) = 9426,65559,mach1(192.168.123.234) audit session id = 103203403
出于维护目的,有时某个站点需要阻止对事件进行审计。
开始之前
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
例如,事件 26 和 27 属于 pm 类。
## audit_event file ... 25:AUE_VFORK:vfork(2):ps 26:AUE_SETGROUPS:setgroups(2):pm 27:AUE_SETPGRP:setpgrp(2):pm 28:AUE_SWAPON:swapon(2):no ...
将这些事件更改为 no 类。
## audit_event file ... 25:AUE_VFORK:vfork(2):ps 26:AUE_SETGROUPS:setgroups(2):no 27:AUE_SETPGRP:setpgrp(2):no 28:AUE_SWAPON:swapon(2):no ...
如果当前正在审计 pm 类,现有会话仍将审计事件 26 和 27。要停止审计这些事件,必须遵循如何更新已登录用户的预选掩码中的说明更新用户的预选掩码。
![]() | 注意 - 切勿注释掉 audit_event 中的事件。该文件供 praudit 命令用来读取二进制审计文件。归档审计文件可能包含该文件中列出的事件。 |
# auditconfig -conf Configured 283 kernel events.
系统对二进制审计文件的增大没有限制。但为了归档和搜索方便,您可能需要限制其大小。还可以基于原始文件创建较小的二进制文件。
开始之前
您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员才能设置 p_fsize 属性。您必须是指定有 Audit Review(审计查看)权限配置文件的管理员才能使用 auditreduce 命令。有关更多信息,请参见如何使用指定给您的管理权限。
有关 p_fsize 属性的说明,请参见 audit_binfile(5) 手册页的 OBJECT ATTRIBUTES 部分。
有关示例,请参见示例 28-14。
auditreduce -lowercase 选项用于查找特定记录。
auditreduce -Uppercase 选项用于将您的选择写入文件。有关更多信息,请参见 auditreduce(1M) 手册页。另请参见在本地系统上管理审计记录(任务)。
审计文件可以增大。您可以设置文件大小的上限,如示例 28-14 中所示。在本过程中,使用压缩来减小大小。
开始之前
您必须是指定有 ZFS File System Management(ZFS 文件系统管理)和 ZFS Storage Management(ZFS 存储管理)权限配置文件的管理员。通过后一个配置文件可以创建存储池。有关更多信息,请参见如何使用指定给您的管理权限。
有关过程,请参见如何为审计文件创建 ZFS 文件系统。
使用这两个选项均可压缩审计文件系统。刷新审计服务后,将显示压缩率。
要设置压缩,请使用 zfs set compression=on dataset 命令。在以下示例中,ZFS 池 auditp/auditf 为数据集。
# zfs set compression=on auditp/auditf # audit -s # zfs get compressratio auditp/auditf NAME PROPERTY VALUE SOURCE auditp/auditf compressratio 4.54x -
# zfs set compression=gzip-9 auditp/auditf # zfs get compression auditp/auditf NAME PROPERTY VALUE SOURCE auditp/auditf compression gzip-9 local # audit -s # zfs get compressratio auditp/auditf NAME PROPERTY VALUE SOURCE auditp/auditf compressratio 16.89x -
gzip-9 压缩算法导致文件占用的空间比缺省压缩算法 lzjb 少三分之一。有关更多信息,请参见《Oracle Solaris 11.1 管理:ZFS 文件系统》中的第 5 章 "管理 Oracle Solaris ZFS 文件系统"。
Oracle Solaris OS 可以审计所有登录,无论登录源为何。
开始之前
您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员。有关更多信息,请参见如何使用指定给您的管理权限。
该类审计登录、注销和屏幕锁定。缺省情况下审计这些类。
# auditconfig -getflags active user default audit flags = lo(0x1000,0x1000) configured user default audit flags = lo(0x1000,0x1000) # auditconfig -getnaflags active non-attributable audit flags = lo(0x1000,0x1000) configured non-attributable audit flags = lo(0x1000,0x1000)
# auditconfig -getflags active user default audit flags = as,st(0x20800,0x20800) configured user default audit flags = as,st(0x20800,0x20800) # auditconfig -setflags lo,as,st user default audit flags = as,lo,st(0x21800,0x21800) # auditconfig -getnaflags active non-attributable audit flags = na(0x400,0x400) configured non-attributable audit flags = na(0x400,0x400) # auditconfig -setnaflags lo,na non-attributable audit flags = lo,na(0x1400,0x1400)
注 - 要审计 ssh 登录,您的系统必须正在 Oracle Solaris 中运行 ssh 守护进程。在 Oracle Solaris 系统上,将针对该审计服务修改此守护进程。有关更多信息,请参见安全 Shell 和 OpenSSH 项目。
FTP 服务创建其文件传输的日志。通过预选 ft 审计类可以审计 ssh 协议下运行的 SFTP 服务。可以审计到这两种服务的登录。
开始之前
您必须是指定有 Audit Configuration(审计配置)权限配置文件的管理员。有关更多信息,请参见如何使用指定给您的管理权限。
有关可用的日志记录选项,请阅读 ProFTPD Logging(日志记录)。
ft 类包含以下 SFTP 事务:
% auditrecord -c ft file transfer: chmod ... file transfer: chown ... file transfer: get ... file transfer: mkdir ... file transfer: put ... file transfer: remove ... file transfer: rename ... file transfer: rmdir ... file transfer: session start ... file transfer: session end ... file transfer: symlink ... file transfer: utimes
如以下输出所示,登录和注销 proftpd 守护进程都会生成审计记录。
% auditrecord -c lo | more ... FTP server login program proftpd See in.ftpd(1M) event ID 6165 AUE_ftpd class lo (0x0000000000001000) header subject [text] error message return FTP server logout program proftpd See in.ftpd(1M) event ID 6171 AUE_ftpd_logout class lo (0x0000000000001000) header subject return ...