aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook/audit/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'zh_CN.GB2312/books/handbook/audit/chapter.sgml')
-rw-r--r--zh_CN.GB2312/books/handbook/audit/chapter.sgml467
1 files changed, 467 insertions, 0 deletions
diff --git a/zh_CN.GB2312/books/handbook/audit/chapter.sgml b/zh_CN.GB2312/books/handbook/audit/chapter.sgml
new file mode 100644
index 0000000000..af283e8a07
--- /dev/null
+++ b/zh_CN.GB2312/books/handbook/audit/chapter.sgml
@@ -0,0 +1,467 @@
+<!--
+ The FreeBSD Documentation Project
+ The FreeBSD Simplified Chinese Project
+
+ Original Revision: 1.5
+ $FreeBSD$
+-->
+
+<!--
+This version of the document assumes that the Audit system needs to be
+installed as part of the trustedbsd/audit project. When/if audit becomes
+part of FreeBSD proper, then these sections should be removed, or at least
+reworded. The sections in question are marked with 'PROTOTYPE' labels in
+commentary.
+-->
+
+<!-- Need more documenation on praudit, audtreduce, etc. Plus more info
+on the triggers from the kernel (log rotation, out of space, etc).
+And the /dev/audit special file if we choose to support that. Could use
+some coverage of integrating MAC with Event auditing and perhaps discussion
+on how some companies or organizations handle auditing and auditing
+requirements. -->
+
+<chapter id="audit">
+ <chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>原作 </contrib>
+ </author>
+ </authorgroup>
+ </chapterinfo>
+
+ <title>内核事件审计</title>
+
+ <sect1 id="audit-synopsis">
+ <title>概述</title>
+
+ <indexterm><primary>AUDIT</primary></indexterm>
+ <indexterm>
+ <primary>内核事件审计</primary>
+ <see>MAC</see>
+ </indexterm>
+
+ <para>在 &os;&nbsp;6.0 操作系统的发行版本中, 包含了基于 &posix;.1e 草案,
+ 以及 &sun; <acronym>BSM</acronym> 实现的事件审计机制。
+ 事件审计功能使得选择性地记录与安全有关的系统事件成为可能,
+ 而这些日志可以帮助人们完成系统分析、 监视, 以及安全评估等工作。</para>
+
+ <para>这一章将主要关注与安装和配置事件审计机制。
+ 同时, 为了方便读者, 也介绍了审计策略,
+ 并给出了一个实例加以说明。</para>
+
+ <para>读完这章, 您将了解:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>事件审计是什么, 以及它如何工作。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何在 &os; 上为用户和进程配置事件审计。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>阅读这章之前, 您应该:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>理解 &unix; 和 &os; 的基础知识
+ (<xref linkend="basics">)。</para>
+ </listitem>
+
+ <listitem>
+ <para>熟悉关于内核配置和编译的基本方法
+ (<xref linkend="kernelconfig">)。</para>
+ </listitem>
+
+ <listitem>
+ <para>熟悉安全知识以及如何在 &os; 运用它们 (<xref linkend="security">)。</para>
+ </listitem>
+ </itemizedlist>
+
+ <warning>
+ <para>事件审计可能会产生大量的日志文件数据, 在某些配置中,
+ 可能每周都会产生超过数 GB 的数据。 管理员应完整地阅读完这一章的内容,
+ 以避免由于不当配置产生的自作自受型 <acronym>DoS</acronym>。</para>
+ </warning>
+
+ <para>在 &os; 中的事件审计机制, 与 &sun; 的基本安全模块,
+ 即 <acronym>BSM</acronym> 库类似。 因此, 这些配置与 &solaris;
+ 和 Darwin 操作系统之间可以完全互换。</para>
+ </sect1>
+
+ <sect1 id="audit-inline-glossary">
+ <title>您需要了解的一些关键术语</title>
+
+ <para>在开始阅读这章之前, 首先需要解释一些关键的术语。
+ 这是为了清除一些由于引入新术语而带来的困惑和阅读障碍。</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis>类</emphasis>(class): 类用于区分系统中不同的动作类型。
+ 例如, 使用 &man.login.1; 这一行为就可以放在一个类里。</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>事件</emphasis>(event): 可以把事件理解为发生在系统中的动作。
+ 例如, 创建文件就是一个事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>记录</emphasis>(record): 记录是关于某一特定动作的日志内容。</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>前缀</emphasis>(prefix): 前缀指用于切换成功和失败审计事件的配置单元。</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="audit-install">
+ <title>安装审计支持</title>
+
+ <para>对于事件审计的支持, 已经随标准的 <maketarget>installworld</maketarget>
+ 过程完成。 管理员可以通过查看
+ <filename role="directory">/etc/security</filename> 的内容来确认这一点。
+ 您应能看到一些名字以 <emphasis>audit</emphasis> 开头的文件,
+ 例如 <filename>audit_event</filename>。</para>
+
+ <para>此外, 还必须加入内核部分的支持。
+ 这可以通过在本地的内核配置文件中加入下面一行来实现:</para>
+
+ <programlisting>options AUDIT</programlisting>
+
+ <para>接下来, 您应按照
+ <xref linkend="kernelconfig"> 中所介绍的步骤来完成一次内核的编译和安装。</para>
+
+ <para>一旦完成, 可以通过下列 &man.rc.conf.5; 配置来启动审计服务:</para>
+
+ <programlisting>auditd_enable="YES"</programlisting>
+
+ <para>默认不启用的那些功能可以在此处以 <option>auditd_flags</option> 选项来增加。</para>
+ </sect1>
+
+ <sect1 id="audit-config">
+ <title>对审计进行配置</title>
+
+ <para>默认情况下, 所有配置都可以通过
+ <filename role="directory">/etc/security</filename> 下的文件来完成。
+ 要启动审计服务, 下面这些文件必须存在:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>audit_class</filename> - 包含对于审计类的定义。</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>audit_control</filename> - 控制审计子系统的特性,
+ 例如默认审计类、 在审计日志所在的卷上保留的最小空间, 等等。</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>audit_event</filename> - 定义内核审计事件。
+ 它们多数都对应于某些系统调用。</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>audit_user</filename> - 针对特定用户进行的事件审计。
+ 用户名在这里并不必须出现。</para>
+ </listitem>
+
+ <listitem>
+ <para><filename>audit_warn</filename> - 用于 auditd 生成警告信息的
+ shell 脚本。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>如果由于某些原因这些文件并不存在,
+ 则可以很容易地用下列命令来安装:</para>
+
+ <screen>&prompt.root; <userinput>cd /usr/src/contrib/bsm/etc &amp;&amp; make install</userinput></screen>
+
+ <sect2>
+ <title>审计文件的语法</title>
+
+ <para>配置文件的语法看上去可能有点怪异, 尽管用起来会很容易。
+ 管理员必须非常谨慎的一件事是改变系统的默认值,
+ 因为这样做可能会造成潜在的无法正确收集审计数据的问题。</para>
+
+ <para>审计子系统能够同时接受配置语法中的长短名字。 接下来,
+ 我们将给出语法表。</para>
+
+ <para>下面是所支持的全部审计类:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><option>all</option> - <literal>all</literal> -
+ 设置全部审计标志。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>ad</option> - <literal>administrative</literal>
+ - 所有在系统上所进行的管理性操作。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>ap</option> - <literal>application</literal> -
+ 应用程序定义的动作。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>cl</option> - <literal>file_close</literal> -
+ 审计对 <function>close</function> 系统调用的操作。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>ex</option> - <literal>exec</literal> -
+ 审计程序或实用工具的执行。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>fa</option> - <literal>file_attr_acc</literal>
+ - 审计访问对象属性, 例如
+ &man.stat.1;、 &man.pathconf.2; 以及类似事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>fc</option> - <literal>file_creation</literal>
+ - 审计创建了文件的事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>fd</option> - <literal>file_deletion</literal>
+ - 审计所发生的文件删除事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>fm</option> - <literal>file_attr_mod</literal>
+ - 审计文件属性发生变化的事件,
+ 例如 &man.chown.8;、 &man.chflags.1;、 &man.flock.2;,
+ 等等。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>fr</option> - <literal>file_read</literal>
+ - 审计读取数据、 文件以读方式打开等事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>fw</option> - <literal>file_write</literal> -
+ 审计写入数据、 文件以写方式打开等事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>io</option> - <literal>ioctl</literal> -
+ 审计对 &man.ioctl.2; 系统调用的使用。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>ip</option> - <literal>ipc</literal> - 审计
+ System V <acronym>IPC</acronym> 操作。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>lo</option> - <literal>login_logout</literal> -
+ 审计系统中发生的 &man.login.1; 和 &man.logout.1; 事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>na</option> - <literal>non_attrib</literal> -
+ 审计无法归类的事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>no</option> - <literal>no_class</literal> -
+ 空类, 用于禁用事件审计。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>nt</option> - <literal>network</literal> -
+ 与网络操作有关的事件, 例如
+ &man.connect.2; 和 &man.accept.2;。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>ot</option> - <literal>other</literal> -
+ 审计各类杂项事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>pc</option> - <literal>process</literal> -
+ 审计进程操作, 例如 &man.exec.3; 和
+ &man.exit.3;。</para>
+ </listitem>
+
+ <listitem>
+ <para><option>tf</option> - <literal>tfm</literal> -
+ I HAVE NO CLUE!</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>下面是全部支持的审计前缀:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>none</literal> - 同时审计事件的成功和失败。
+ 例如, 秩序列出一个事件类就可以同时审计其成功或失败。</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>+</literal> - 只审计成功事件。</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>-</literal> - 只审计失败事件。</para>
+ </listitem>
+ </itemizedlist>
+
+ <warning>
+ <para>使用 <option>all</option> 类, 无论是正还是负号作为前缀,
+ 都会以极快的速度产生大量的数据。</para>
+ </warning>
+
+ <para>其他用于改变默认配置值得前缀:</para>
+<!-- XXX: Perhaps a variable listing here. -->
+ <itemizedlist>
+ <listitem>
+ <para>^- - 禁用对于失败事件的审计。</para>
+ </listitem>
+
+ <listitem>
+ <para>^+ - 启用对于成功事件的审计。</para>
+ </listitem>
+
+ <listitem>
+ <para>^ - 同时禁用成功和失败事件的审计。</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>配置文件</title>
+
+ <para>配置是在两个文件中进行设置的。 第一个文件是
+ <filename>audit_control</filename> 而第二个是
+ <filename>audit_user</filename>。 第一个文件是系统级的,
+ 用于控制系统中的所有事件统计。 而后一个则可以实现细粒度的用户级审计。</para>
+
+ <sect3 id="audit-auditcontrol">
+ <title>传说中的 <filename>audit_control</filename> 文件</title>
+
+ <para><filename>audit_control</filename> 文件包含了一些基本的默认值,
+ 管理员通常会希望加以修改, 有时甚至是设置一些新的配置。
+ 察看这个文件的内容, 我们会发现:</para>
+
+ <programlisting>dir:/var/audit
+flags:lo,ad,-all,^-fa,^-fc,^-cl
+minfree:20
+naflags:lo</programlisting>
+
+ <para>这里的 <option>dir</option> 表示默认存放审计日志的目录。</para>
+
+ <para><option>flags</option> 则用来设置系统级的默认。
+ 目前的设置, 即
+ <option>lo,ad,-all,^-fa,^-fc,^-cl</option> 表示审计所有的系统
+ &man.login.1; 和 &man.logout.1; 动作、 所有管理动作,
+ 以及所有系统中失败的动作, 但最后禁用对 <option>fa</option>、
+ <option>fc</option>, 以及 <option>cl</option> 的失败常是。
+ 尽管 <option>-all</option> 会打开所有事件的失败常是,
+ 但之后的选项中的 <option>^-</option> 前缀则会改变相应的设置。</para>
+
+ <para>请注意前一节也说明了配置是从左到右读取的。 同样地,
+ 较为靠右的值可以替代靠左的值所设定的默认。</para>
+
+ <para><option>minfree</option> 参数定义了用于审计的文件系统上,
+ 剩余空间的最小值。 这一百分比值是相对于保存审计日志的文件系统来计算的。
+ 例如, 如果 <option>dir</option> 指定了
+ <filename role="directory">/var/audit</filename> 而
+ <option>minfree</option> 设为两成 (20), 则当
+ <filename role="directory">/var</filename> 文件系统有八成
+ (80) 空间被填满时将会给出警告消息。</para>
+
+ <para><option>naflags</option> 参数用于指定不可归类的审计标志;
+ 比如说, 无法归类于系统上某一特定用户的事件类。 这可以通过在
+ <filename>audit_user</filename> 配置文件中的设置来改变。</para>
+ </sect3>
+
+ <sect3 id="audit-audituser">
+ <title><filename>audit_user</filename> 文件</title>
+
+ <para><filename>audit_user</filename> 允许管理员将某些事件直接映射到特定用户。
+ 这提供了针对所有系统用户的精细控制机制。</para>
+
+ <para>下面是 <filename>audit_user</filename> 文件中的一些默认值:</para>
+
+ <programlisting>root:lo:no
+audit:fc:no</programlisting>
+
+ <para>注意默认值将审计所有的
+ <command>login</command>/<command>logout</command>
+ 事件, 而禁止审计所有其他由
+ <username>root</username> 完成的动作。
+ 这一配置也会审计所有文件创建操作,
+ 并禁止所有其他由 <username>audit</username>
+ 用户完成的操作。 尽管事件审计并不依赖特殊的用户才能正常工作,
+ 某些配置, 特别是使用了 <acronym>MAC</acronym> 的环境中,
+ 却可能需要这个用户存在。</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="audit-administration">
+ <title>管理事件审计</title>
+
+ <para>来自 <command>auditd</command> 服务的数据,
+ 并不能以普通的文本形式进行修改或阅读。 数据以类似 &man.ktrace.1;
+ 和 &man.kdump.1 的形式存储, 也就是说, 只能通过
+ <command>praudit</command> 或 <command>auditreduce</command>
+ 工具来查看它们。</para>
+
+ <para>所提供的两个工具是为了不同的用途而准备的。
+ 例如, <command>praudit</command> 将转存整个事件日志的内容,
+ 并保存成普通的文本文件。 要将整个审计日志转存, 可使用:</para>
+
+ <screen>&prompt.root; <userinput>praudit /var/audit/AUDITFILE</userinput></screen>
+
+ <para>这里 <replaceable>AUDITFILE</replaceable> 是希望查看的审计日志。
+ 由于审计日志可能包含大量的数据,
+ 管理员可能更希望选择某一特定用户的相关事件。
+ 要达到这个目的, 可以使用下面的命令,
+ 这里我们选择的用户是 <username>trhodes</username>:</para>
+
+ <screen>&prompt.root; <userinput>auditreduce -e trhodes /var/audit/AUDITFILE</userinput></screen>
+
+ <para>这将选择保存在 <replaceable>AUDITFILE</replaceable> 中的所有由
+ <username>trhodes</username> 产生的审计日志。</para>
+
+ <para>还有许多其他选项可以在阅读审计记录时使用。 请参见前述命令的联机书册,
+ 以获得进一步的解释。</para>
+
+ <sect2>
+ <title>审计日志文件的轮转</title>
+
+ <para>手工轮转日志文件将给系统造成混乱。 因此, 在
+ &man.newsyslog.conf.5; 中加入一行配置是不起作用的。
+ 那么如何让日志轮转呢? 这可以通过给
+ <command>audit</command> 适当的参数来关闭事件审计,
+ 并安全地完成轮转操作。 下面的命令将为管理员完成全部所需的操作:</para>
+
+ <screen>&prompt.root; <userinput>audit -n</userinput></screen>
+
+ <warning>
+ <para>如果 <command>auditd</command> 服务程序没有在运行,
+ 则前述命令将失败并给出错误提示。</para>
+ </warning>
+
+ <para>在 <filename>/etc/crontab</filename> 加入如下设置,
+ 将使 &man.cron.8; 每十二小时将日志轮转一次。</para>
+
+ <programlisting>* */12 * * * root /usr/sbin/audit -n</programlisting>
+
+ <para>这些修改会在您保存 <filename>/etc/crontab</filename> 后生效。</para>
+ </sect2>
+ </sect1>
+</chapter>