JavaScript is required to for searching.
跳过导航链接
退出打印视图
系统管理指南:安全性服务     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

第 2 部分系统、文件和设备安全性

2.  管理计算机安全性(概述)

3.  控制对系统的访问(任务)

4.  控制对设备的访问(任务)

5.  使用基本审计报告工具(任务)

6.  控制对文件的访问(任务)

7.  使用自动安全性增强工具(任务)

第 3 部分角色、权限配置文件和特权

8.  使用角色和特权(概述)

9.  使用基于角色的访问控制(任务)

10.  基于角色的访问控制(参考)

11.  特权(任务)

12.  特权(参考)

第 4 部分加密服务

13.  Oracle Solaris 加密框架(概述)

14.  Oracle Solaris 加密框架(任务)

15.  Oracle Solaris 密钥管理框架

第 5 部分验证服务和安全通信

16.  使用验证服务(任务)

17.  使用 PAM

18.  使用 SASL

19.  使用 Oracle Solaris 安全 Shell(任务)

20.  Oracle Solaris 安全 Shell(参考)

第 6 部分Kerberos 服务

21.  Kerberos 服务介绍

22.  规划 Kerberos 服务

23.  配置 Kerberos 服务(任务)

24.  Kerberos 错误消息和故障排除

25.  管理 Kerberos 主体和策略(任务)

26.  使用 Kerberos 应用程序(任务)

27.  Kerberos 服务(参考)

第 7 部分Oracle Solaris 审计

28.  Oracle Solaris 审计(概述)

29.  规划 Oracle Solaris 审计

30.  管理 Oracle Solaris 审计(任务)

Oracle Solaris 审计(任务列表)

配置审计文件(任务列表)

配置审计文件(任务)

如何修改 audit_control 文件

如何配置 syslog 审计日志

如何更改用户审计特征

如何添加审计类

如何更改审计事件的类成员身份

配置和启用审计服务(任务列表)

配置和启用审计服务(任务)

如何为审计文件创建分区

如何配置 audit_warn 电子邮件别名

如何配置审计策略

如何启用审计服务

如何禁用审计服务

如何更新审计服务

在区域中配置审计服务(任务)

如何配置以相同方式审计所有区域

如何配置每区域审计

管理审计记录(任务列表)

管理审计记录

如何显示审计记录格式

如何合并审计迹中的审计文件

如何从审计迹中选择审计事件

如何查看二进制审计文件的内容

如何清除 not_terminated 审计文件

如何防止审计迹溢出

Oracle Solaris 审计的故障排除(任务)

Oracle Solaris 审计的故障排除(任务列表)

如何确定 Oracle Solaris 正在运行中

如何减少生成的审计记录数目

如何审计用户执行的所有命令

如何找到对特定文件更改的审计记录

如何修改用户的预选掩码

如何阻止审计某些事件

如何限制二进制审计文件的大小

如何审计从其他操作系统的登录

如何审计 FTP 和 SFTP 文件传输

31.  Oracle Solaris 审计(参考)

词汇表

索引

Oracle Solaris 审计的故障排除(任务列表)

以下任务列表列出了 Oracle Solaris 审计的故障排除过程。

问题
解决方案
参考
为何配置了审计,却没有生成审计文件?
对审计守护进程和审计配置文件进行故障排除。
怎样才能减少收集的审计信息量?
只审计您想要审计的事件。
如何对用户在系统上执行的所有操作进行审计?
针对每个命令审计一个或多个用户。
如何更改正在记录的审计事件,并使更改对现有会话产生影响?
更新用户的预选掩码
如何找到对特定文件的修改?
审计文件修改,然后使用 auditreduce 命令找出特定文件。
如何减小审计文件的大小?
限制二进制审计文件的大小。
如何从 audit_event 中删除审计事件?
更新 audit_event 文件。
如何对 Oracle Solaris 系统的所有登录进行审计?
对从任何系统的登录进行审计。
为什么没有为我的 FTP 传输保留审计记录?
对生成自己日志的实用程序使用适当的审计工具。

如何确定 Oracle Solaris 正在运行中

如果您认为审计已被激活,但是主审计目录下没有审计记录,请尝试以下过程。

开始之前

已经在命名服务中正确配置了 hosts 数据库,且工作正常。要调试命名服务问题,请参见以下内容:

  1. 确定审计正在运行中。
    • 确认 c2audit 内核模块已装入。
      # modinfo | grep c2audit

      没有列表显示审计未在运行中。以下列表说明审计正在运行中:

      40  132ce90  14230 186   1  c2audit (C2 system call)
    • 检验守护进程是否正在运行。

      检验 auditd 服务的状态。以下列表说明,审计未在运行中:

      # svcs -x auditd
      svc:/system/auditd:default (Solaris audit daemon)
       State: disabled since Fri Aug 14 19:02:35 2009
      Reason: Disabled by an administrator.
         See: http://sun.com/msg/SMF-8000-05
         See: auditd(1M)
         See: audit(1M)
      Impact: This service is not running.

      以下列表说明,审计服务正在运行中:

      # svcs auditd
      STATE          STIME    FMRI
      online         10:10:10 svc:/system/auditd:default
    • 检验当前审计条件。

      以下列表说明,审计未在运行中:

      # auditconfig -getcond
      auditconfig: auditon(2) failed.
      auditconfig: error = Operation not supported(48)

      以下列表说明审计正在运行中:

      # auditconfig -getcond
      audit condition = auditing

    如果审计服务没有运行,请启用该服务。有关过程,请参见如何启用审计服务

  2. 检查 audit_control 文件的语法是否正确。
    # audit -v /etc/security/audit_control
    audit: audit_control must have either a valid "dir:" entry 
    or a valid "plugin:" entry with "p_dir:" specified.

    更正错误。syntax ok 消息表明,该文件的语法正确。

  3. 检验 audit_control 文件的 flagsnaflags 关键字的值是否有效。
    # grep flags /etc/security/audit_control
    flags:lo
    naflags:na,lp

    如果 audit_control 文件的值无效,请提供有效值。在上面的示例中,lp 是无效的类。

  4. 检验 audit_user 文件对于每个用户是否都包含有效值。
    # tail audit_user
    ...
    # User Level Audit User File
    #
    # File Format
    #
    #    username:always:never
    #
    root:lo:no
    admin:lp:no

    如果 audit_user 文件包含无效值,请提供有效值。在上面的示例中,lp 是无效的类。

  5. 如果创建了定制审计类,请确认已经将事件分配给该类。

    例如,以下 audit_control 文件包含一个 Oracle Solaris 软件未提供的类:

    # grep flags /etc/security/audit_control
    flags:lo,pf
    naflags:na,lo

    有关创建 pf 类的说明,请参见如何添加审计类

    1. 检验是否在 audit_class 文件中定义了该类。

      审计类掩码必须是唯一的。

      # grep pf /etc/security/audit_class
      0x10000000:pf:profile command

      如果没有定义该类,请定义它。否则,从 audit_controlaudit_user 文件中删除该类。

    2. 检验是否已经将事件分配给该类。
      # grep pf /etc/security/audit_event
      6180:AUE_prof_cmd:profile command:ua,as,pf

      如果未将事件分配给该类,请向其分配适当的事件。

  6. 如果前面的步骤仍未找出问题所在,请检查系统日志文件 /var/adm/messages/var/log/syslog
    1. 找出并修复问题。
    2. 如果审计服务正在运行中,请重新启动该服务。
      # audit -s
    3. 如果审计服务没有运行,请启用该服务。

      有关过程,请参见如何启用审计服务

如何减少生成的审计记录数目

确定了要在您的站点上对哪些事件进行审计后,请参考以下建议创建可管理的审计文件。

  1. 使用缺省审计策略。

    具体而言,应避免向审计迹中添加事件和审计标记。以下策略会影响审计迹的大小。

    • arge 策略-向 exec 审计事件添加环境变量。

    • argv 策略-向 exec 审计事件添加命令参数。

    • public 策略-如果正在审计文件事件,每次公共文件发生可审计事件时,都会将一个事件添加到审计迹中。文件类包括 fafcfdfmfr fwcl。有关公共文件的定义,请参见审计术语和概念

    • path 策略-将 path 标记添加到包含可选 path 标志的审计事件。

    • group 策略-将组标记添加到包含可选 newgroups 标记的审计事件。

    • seq 策略-将序列标记添加到每个审计事件。

    • trail 策略-将尾部标记添加到每个审计事件。

    • windata_down 策略-在配置了 Trusted Extensions 的系统上,在有标签窗口中的信息降级时添加事件。

    • windata_up 策略-在配置了 Trusted Extensions 的系统上,在有标签窗口中的信息升级后添加事件。

    • zonename 策略-将区域名称添加到每个审计事件。如果全局区域是配置的唯一区域,将 zone, global 添加到每个审计事件。

    以下审计记录显示了 ls 命令的用法。正在审计 ex 类,且正在使用缺省策略:

    header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00
    path,/usr/bin/ls
    subject,jdoe,root,root,root,root,1401,737,0 0 mach1
    return,success,0

    以下是启用所有策略时的相同记录:

    header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00
    path,/usr/bin/ls
    attribute,100555,root,bin,136,432,0
    exec_args,1,ls
    exec_env,9,HOME=/,HZ=,LANG=C,LOGNAME=root,MAIL=/var/mail/root,PATH=/u
    sr/sbin:/usr/bin,SHELL=/sbin/sh,TERM=xterm,TZ=US/Pacific
    path,/lib/ld.so.1
    attribute,100755,root,bin,136,4289,0
    subject,jdoe,root,root,root,root,1401,737,0 0 mach1
    group,root,other,bin,sys,adm,uucp,mail,tty,lp,nuucp,daemon
    return,success,0
    zone,global
    sequence,313540
    trailer,375
  2. 使用 audit_syslog.so 插件将部分审计事件发送到 syslog

    只有当不要求保留发送到 syslog 日志的审计事件的二进制记录时,才适合使用此方法。通过 auditreduce 命令,可以条带化这些记录的二进制文件,从而减小二进制文件的大小。

  3. 使用 audit_user 文件为特定用户和角色审计事件。

    通过减少 audit_control 文件中审计类的数目,来减少对所有用户的审计量。在 audit_user 文件中,为特定用户和角色添加审计类。

  4. 创建定制审计类。

    可以在您的站点上创建审计类。将需要监视的所有审计事件分配给这些类。有关过程,请参见如何添加审计类


    注 - 如果修改了现有审计类分配,在升级到 Oracle Solaris OS 的新版本时,所做的修改可能会丢失。请认真查看安装日志。


如何审计用户执行的所有命令

作为安全策略的一部分,有些站点会需要 root 用户或管理角色运行的所有命令的审计记录。某些站点还需要用户运行的所有命令的审计记录。

  1. 审计 loex 类。

    ex 类审计对 exec()execve() 函数的所有调用。lo 类审计登录、注销和屏幕锁定。以下输出列出了 exlo 类中的所有事件。

    7:AUE_EXEC:exec(2):ps,ex
    23:AUE_EXECVE:execve(2):ps,ex
    ...
    6152:AUE_login:login - local:lo
    6153:AUE_logout:logout:lo
    6154:AUE_telnet:login - telnet:lo
    6155:AUE_rlogin:login - rlogin:lo
    6158:AUE_rshd:rsh access:lo
    6159:AUE_su:su:lo
    6162:AUE_rexecd:rexecd:lo
    6163:AUE_passwd:passwd:lo
    6164:AUE_rexd:rexd:lo
    6165:AUE_ftpd:ftp access:lo
    6171:AUE_ftpd_logout:ftp logout:lo
    6172:AUE_ssh:login - ssh:lo
    6173:AUE_role_login:role login:lo
    6212:AUE_newgrp_login:newgrp login:lo
    6213:AUE_admin_authenticate:admin login:lo
    6221:AUE_screenlock:screenlock - lock:lo
    6222:AUE_screenunlock:screenlock - unlock:lo
    6227:AUE_zlogin:login - zlogin:lo
    • 要为管理员审计这些类,请修改 audit_user 文件。

      在以下示例中,站点创建了三个角色:sysadmauditadmnetadm。要为 execlo 类审计这些角色和 root 帐户:

      ## audit_user file
      root:lo,ex:no
      sysadm:lo,ex:no
      auditadm:lo,ex:no
      netadm:lo,ex:no
    • 要为无归属事件审计 lo 类,请修改 audit_control 文件。
      ## audit_control file
      ...
      naflags:lo
      ...
    • 要为所有用户审计这些类,请修改 audit_control 文件。
      ## audit_control file
      flags:lo,ex
      naflags:lo
      ...

      输出内容类似如下:

      header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00
      path,/usr/bin/ls
      subject,jdoe,root,root,root,root,1401,737,0 0 mach1
      return,success,0
  2. 要记录命令参数,请设置argv 策略。
    ## audit_startup script
    ...
    auditconfig -setpolicy +argv
    ...

    exec_args 标记用于记录命令参数:

    header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00
    path,/usr/bin/ls
    exec_args,1,ls
    subject,jdoe,root,root,root,root,1401,737,0 0 mach1
    return,success,0
  3. 要记录命令的运行环境,请设置 arge 策略。
    ## audit_startup script
    ...
    auditconfig -setpolicy +arge
    ...

    exec_env 标记用于记录命令环境:

    header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00
    path,/usr/bin/ls
    exec_env,9,HOME=/,HZ=,LANG=C,LOGNAME=root,MAIL=/var/mail/root,
      PATH=/usr/sbin:/usr/bin,SHELL=/sbin/sh,TERM=xterm,TZ=US/Pacific
    subject,jdoe,root,root,root,root,1401,737,0 0 mach1
    return,success,0
  4. 要记录参数和命令环境,请设置上述两个策略。
    ## audit_startup script
    ...
    auditconfig -setpolicy +argv
    auditconfig -setpolicy +arge
    ...

    输出内容类似如下:

    header,375,2,execve(2),,mach1,2009-08-06 11:19:57.388 -07:00
    path,/usr/bin/ls
    exec_args,1,ls
    exec_env,9,HOME=/,HZ=,LANG=C,LOGNAME=root,MAIL=/var/mail/root,
      PATH=/usr/sbin:/usr/bin,SHELL=/sbin/sh,TERM=xterm,TZ=US/Pacific
    subject,jdoe,root,root,root,root,1401,737,0 0 mach1
    return,success,0

如何找到对特定文件更改的审计记录

如果您的目标是记录对有限数目的文件(如 /etc/passwd/etc/default 目录下的文件)的写入情况,请使用 auditreduce 命令找到这些文件。

  1. 审计 fw 类。

    与将该类添加到 audit_control 文件相比,将其添加到 audit_user 文件生成的记录更少。

    • fw 类添加到 audit_user 文件。
      ## audit_user file
      root:fw:no
      sysadm:fw:no
      auditadm:fw:no
      netadm:fw:no
    • fw 类添加到 audit_control 文件。
      ## audit_control file
      flags:lo,fw
      ...
  2. 要找到特定文件的审计记录,请使用 auditreduce 命令。
    # /usr/sbin/auditreduce -o file=/etc/passwd,/etc/default -O filechg

    auditreduce 命令在审计迹中搜索所有 file 参数实例。该命令创建一个后缀为 filechg 的二进制文件,此文件包含了包括相关文件路径名的所有记录。有关 -o file=pathname 选项的语法,请参见 auditreduce(1M) 手册页。

  3. 要读取 filechg 文件,请使用 praudit 命令。
    # /usr/sbin/praudit *filechg

如何修改用户的预选掩码

如果修改了 audit_controlaudit_user 文件,已登录用户的预选掩码不会改变。必须强制执行预选掩码的更改。

开始之前

启用了审计且用户登录后,更改 audit_control 文件中的 flagsnaflags 值。您希望针对这些新选择的审计类对已经登录的用户进行审计。

  1. 更新已登录用户的预选掩码。

    您有两种选择。可以停止现有会话,或使用 auditconfig 命令更新用户的预选掩码。

    • 终止用户的现有会话。

      用户可以注销然后重新登录,也可以由管理员手动终止(中止)活动的会话。新的会话将继承新的预选掩码。但是,终止用户可能不现实。

    • 动态更改每个用户的预选掩码。

      假定将 audit_control 文件中的 flags 属性从 lo 更改为 lo,ex

      1. 确定用户的审计 ID 和审计会话 ID。

        首先,找到所有一般用户。在以下示例中,管理员找出不属于 rootdaemonlp 的所有进程:

        # /usr/bin/pgrep -v -u root,daemon,lp | more 
        ..
        3941
        3948
        3949
        10640 ...

        然后,使用一个用户的进程找到该用户的审计 ID:

        # auditconfig -getpinfo 3941
        audit id = jdoe(1002)
        process preselection mask = lo(0x1000,0x1000)
        terminal id (maj,min,host) = 9426,65559,mach1(192.168.123.234)
        audit session id = 713

        请注意,用户的预选掩码包括 lo 类,不包括新添加的 ex 类。

      该用户的审计 ID 是 1002。该用户的审计会话 ID 是 713

  2. 更改用户的预选掩码

    可以使用以下两种方法之一:

    • 使用用户的审计会话 ID 更改该用户的预选掩码。
      # /usr/sbin/auditconfig -setsmask lo,ex 713
    • 使用用户的审计 ID 更改该用户的预选掩码。
      # /usr/sbin/auditconfig -setumask lo,ex 1002
  3. 确认预选掩码已经更改。
    # auditconfig -getpinfo 3941
    audit id = jdoe(1002)
    process preselection mask = ex,lo(0x40001000,0x40001000) 
    terminal id (maj,min,host) = 9426,65559,mach1(192.168.123.234)
    audit session id = 713

如何阻止审计某些事件

出于维护目的,有时某个站点会希望阻止对审计事件进行审计。

  1. 将相关事件的类更改为 no 类。

    例如,事件 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 命令用来读取二进制审计文件。归档审计文件可能包含该文件中列出的事件。


  2. 要更新用户的预选掩码,请按照如何修改用户的预选掩码中的说明操作。

如何限制二进制审计文件的大小

系统对二进制审计文件的增大没有限制。但为了归档和搜索方便,您可能需要限制其大小。还可以基于原始文件创建较小的二进制文件。

  1. 从 Solaris 10 10/08 发行版开始,可以使用 p_fsize 属性限制单个二进制审计文件的大小。

    audit_binfile.so 插件的 p_fsize 属性可用于限制审计文件的大小。缺省值为零 (0),该值允许文件无限地增大。该值以字节为单位指定(从 512,000 到 2,147,483,647)。达到指定大小时,将会关闭当前的审计文件,并打开一个新文件。

    在以下示例中,将审计文件大小限制在 1M 字节:

    plugin:name=audit_binfile.so; p_dir:/var/audit; p_fsize=1024000
  2. 使用 auditreduce 命令选择记录,并将这些记录写入文件供进一步分析。

    auditreduce -lowercase 选项用于查找特定记录。

    auditreduce -Uppercase 选项用于将您的选择写入文件。有关更多信息,请参见 auditreduce(1M) 手册页。

如何审计从其他操作系统的登录

Oracle Solaris 可以审计所有登录,无论登录源为何。

如何审计 FTP 和 SFTP 文件传输

FTP 服务创建其文件传输的日志。在 SSH 协议下运行的 SFTP 服务可以由 Oracle Solaris 审计功能进行审计。到这两个服务的登录都可以由 Oracle Solaris 审计功能进行审计。

  1. 要记录 FTP 服务的命令和文件传输,请参见 ftpaccess(4) 手册页。

    有关可用的记录选项,请阅读“记录功能”部分。特别是,log commandslog transfers 选项可以提供有用的日志。

  2. 要记录 sftp 文件传输,请执行以下一项或两项操作:
    • 审计文件读取操作。

      通过 SSH 连接进行的文件传输使用 sftp 命令。这些传输可以使用 +fr 审计标志来记录。要审计失败的 sftp 文件传输,请审计 -fr 审计标志。

      以下输出来自成功的 sftp 会话:

      header,138,2,open(2) - read,,ma2,2009-08-25 14:48:58.770 -07:00
      path,/home/jdoe/vpn_connect
      attribute,100644,jdoe,staff,391,437,0
      subject,jdoe,jdoe,staff,jdoe,staff,4444,120289379,8457 65558 ma1
      return,success,6
    • sftp 命令中使用 verbose(详细)选项。

      -v 选项最多可以重复使用三次。

      # sftp -vvv [ other options ] hostname 
  3. 要记录对 FTP 和 SFTP 服务的访问,请审计 lo 类。

    如以下输出所示,登录和注销 ftpd 守护进程都会生成审计记录。

    % bsmrecord -c lo | more
    ...
    in.ftpd
      program     /usr/sbin/in.ftpd    See ftp access
      event ID    6165                 AUE_ftpd
      class       lo                   (0x00001000)
          header
          subject
          [text]                       error message
          return
    
    in.ftpd
      program     /usr/sbin/in.ftpd    See ftp logout
      event ID    6171                 AUE_ftpd_logout
      class       lo                   (0x00001000)
          header
          subject
          return
    ...

    SSH 登录记录了对 sftp 命令的所有访问。

    ...
    /usr/lib/ssh/sshd
      program     /usr/lib/ssh/sshd    See login - ssh
      event ID    6172                 AUE_ssh
      class       lo                   (0x00001000)
          header
          subject
          [text]                       error message
          return