diff options
Diffstat (limited to 'zh_CN.GB2312/books/handbook/security/chapter.xml')
-rw-r--r-- | zh_CN.GB2312/books/handbook/security/chapter.xml | 621 |
1 files changed, 274 insertions, 347 deletions
diff --git a/zh_CN.GB2312/books/handbook/security/chapter.xml b/zh_CN.GB2312/books/handbook/security/chapter.xml index 2775406861..442af760fd 100644 --- a/zh_CN.GB2312/books/handbook/security/chapter.xml +++ b/zh_CN.GB2312/books/handbook/security/chapter.xml @@ -6,22 +6,17 @@ Original Revision: 1.340 $FreeBSD$ --> - -<chapter id="security"> - <chapterinfo> +<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="security"> + <info><title>安全</title> <authorgroup> - <author> - <firstname>Matthew</firstname> - <surname>Dillon</surname> - <contrib>这一章的许多内容来自 security(7) 联机手册,其作者是 </contrib> - </author> + <author><personname><firstname>Matthew</firstname><surname>Dillon</surname></personname><contrib>这一章的许多内容来自 security(7) 联机手册,其作者是 </contrib></author> </authorgroup> - </chapterinfo> + </info> - <title>安全</title> + <indexterm><primary>security</primary></indexterm> - <sect1 id="security-synopsis"> + <sect1 xml:id="security-synopsis"> <title>概述</title> <para>这一章将对系统安全的基本概念进行介绍, 除此之外, 还将介绍一些好的习惯, 以及 @@ -97,12 +92,10 @@ </itemizedlist> <para>其他安全方面的话题, 则贯穿本书的始终。 - 例如, 强制性访问控制 (MAC) 在 <xref - linkend="mac"/> 中进行了介绍, 而 Internet 防火墙则在 <xref - linkend="firewalls"/> 中进行了讨论。</para> + 例如, 强制性访问控制 (MAC) 在 <xref linkend="mac"/> 中进行了介绍, 而 Internet 防火墙则在 <xref linkend="firewalls"/> 中进行了讨论。</para> </sect1> - <sect1 id="security-intro"> + <sect1 xml:id="security-intro"> <title>介绍</title> <para>安全是系统管理员自始至终的基本要求。 由于所有的 BSD &unix; @@ -120,7 +113,7 @@ <para>系统的安全也应能够应付各种形式的攻击, 这也包括那些使系统崩溃, 或阻止其正常运转, 并不仅限于试图窃取 - <username>root</username> 帐号 (<quote>破译 root</quote>) + <systemitem class="username">root</systemitem> 帐号 (<quote>破译 root</quote>) 的攻击形式。 安全问题大体可分为以下几类:</para> <orderedlist> @@ -183,11 +176,11 @@ <para>通常必须假定,如果一个入侵者已经访问到了一个用户的帐户, - 那么它就可能使自己成为 <username>root</username>。 然而, + 那么它就可能使自己成为 <systemitem class="username">root</systemitem>。 然而, 事实是在一个安全和维护做得很好的系统中, - 访问用户的帐户不一定会让入侵者成为 <username>root</username>。 + 访问用户的帐户不一定会让入侵者成为 <systemitem class="username">root</systemitem>。 这个差别是很重要的,因为没有成为 - <username>root</username> 则入侵者通常是无法隐藏它的轨迹的, 而且, + <systemitem class="username">root</systemitem> 则入侵者通常是无法隐藏它的轨迹的, 而且, 如果走运的话, 除了让用户的文件乱掉和系统崩溃之外, 它不能做什么别的事情。 窃取用户帐户是很普遍的事情, 因为用户往往不会对系统管理员的警告采取措施。</para> @@ -198,18 +191,18 @@ </indexterm> <para>系统管理员必须牢牢记住,可能有许多潜在的方法会使他们机器上的 - <username>root</username> 用户受到威胁。入侵者可能知道 - <username>root</username> 的口令,而如果在以 - <username>root</username> 权限运行的服务器上找到一个缺陷 (bug), + <systemitem class="username">root</systemitem> 用户受到威胁。入侵者可能知道 + <systemitem class="username">root</systemitem> 的口令,而如果在以 + <systemitem class="username">root</systemitem> 权限运行的服务器上找到一个缺陷 (bug), 就可以通过网络连接到那台服务器上达到目的;另外, 一旦入侵者已经侵入了一个用户的帐户, 可以在自己的机器上运行一个 suid-root 程序来发现服务器的漏洞, - 从而让他侵入到服务器并获取 <username>root</username>。 - 攻击者找到了入侵一台机器上 <username>root</username> 的途径之后, - 他们就不再需要安装后门了。许多 <username>root</username> + 从而让他侵入到服务器并获取 <systemitem class="username">root</systemitem>。 + 攻击者找到了入侵一台机器上 <systemitem class="username">root</systemitem> 的途径之后, + 他们就不再需要安装后门了。许多 <systemitem class="username">root</systemitem> 漏洞被发现并修正之后, 入侵者会想尽办法去删除日志来消除自己的访问痕迹, 所以他们会安装后门。 - 后门能给入侵者提供一个简单的方法来重新获取访问系统的 <username>root</username> + 后门能给入侵者提供一个简单的方法来重新获取访问系统的 <systemitem class="username">root</systemitem> 权限, 但它也会给聪明的系统管理员一个检测入侵的简便方法。 让入侵者无法安装后门事实上对您的系统安全是有害的, 因为这样并不会修复那些侵入系统的入侵者所发现的新漏洞。</para> @@ -220,11 +213,11 @@ <orderedlist> <listitem> - <para>确保 <username>root</username> 和维护人员帐户的安全。</para> + <para>确保 <systemitem class="username">root</systemitem> 和维护人员帐户的安全。</para> </listitem> <listitem> - <para>确保 <username>root</username> – 以root用户权限运行的服务器和suid/sgid可执行程序的安全。</para> + <para>确保 <systemitem class="username">root</systemitem> – 以root用户权限运行的服务器和suid/sgid可执行程序的安全。</para> </listitem> <listitem> @@ -251,7 +244,7 @@ <para>这一章的下一节将比较深入地讲述上面提到的每一个条目。</para> </sect1> - <sect1 id="securing-freebsd"> + <sect1 xml:id="securing-freebsd"> <title>确保 &os; 的安全</title> <indexterm> <primary>security</primary> @@ -267,19 +260,18 @@ 因为它既可以表示命令,又可以表示协议。</para> </note> - <para>接下来的几节中, 将介绍在这一章中 <link - linkend="security-intro">前一节</link> 中所介绍的那些加强 + <para>接下来的几节中, 将介绍在这一章中 <link linkend="security-intro">前一节</link> 中所介绍的那些加强 &os; 系统安全性的手段。</para> - <sect2 id="securing-root-and-staff"> - <title>确保 <username>root</username> 和维护人员帐户的安全 </title> + <sect2 xml:id="securing-root-and-staff"> + <title>确保 <systemitem class="username">root</systemitem> 和维护人员帐户的安全 </title> <indexterm> <primary><command>su</command></primary> </indexterm> - <para>首先,如果您没有确保 <username>root</username> 帐户的安全, + <para>首先,如果您没有确保 <systemitem class="username">root</systemitem> 帐户的安全, 就没必要先劳神确保用户帐户的安全了。绝大多数系统都会指派一个口令给 - <username>root</username> 帐户。 我们的第一个假定是,口令 + <systemitem class="username">root</systemitem> 帐户。 我们的第一个假定是,口令 <emphasis>总是</emphasis> 不安全的。 这并不意味着您要把口令删掉。 口令通常对访问机器的控制台来说是必须的。 也就是说, 您应该避免允许在控制台以外的地方使用口令, @@ -287,45 +279,45 @@ 例如,确信您的 pty 终端在 <filename>/etc/ttys</filename> 文件中被指定为 insecure (不安全),这将使直接通过 <command>telnet</command> 或 <command>rlogin</command> 登录 - <username>root</username> 会不被接受。 如果使用如 + <systemitem class="username">root</systemitem> 会不被接受。 如果使用如 <application>sshd</application> 这样的其他登录服务, 也要确认直接登录 root 是关闭的。您可以通过编辑 <filename>/etc/ssh/sshd_config</filename> 文件来做到这一点,确信 <literal>PermitRootLogin</literal> 被设置成 <literal>no</literal>。 考虑到每一种访问方法 — 如FTP这样的服务, 以免因为它们而导致安全性的损失。 - 直接登录 <username>root</username> 只有通过系统控制台才被允许。</para> + 直接登录 <systemitem class="username">root</systemitem> 只有通过系统控制台才被允许。</para> <indexterm> - <primary><groupname>wheel</groupname></primary> + <primary><systemitem class="groupname">wheel</systemitem></primary> </indexterm> <para>当然, 作为一个系统管理员, 您应当获得 - <username>root</username>身份, 因此, 我们开了一些后门来允许自己进入。 + <systemitem class="username">root</systemitem>身份, 因此, 我们开了一些后门来允许自己进入。 但这些后门只有在经过了额外的口令确认之后才能使用。 - 一种让 <username>root</username> + 一种让 <systemitem class="username">root</systemitem> 可访问的方法是增加适当的用户帐户到 - <groupname>wheel</groupname> 组 (在 - <filename>/etc/group</filename> 中)。<groupname>wheel</groupname> + <systemitem class="groupname">wheel</systemitem> 组 (在 + <filename>/etc/group</filename> 中)。<systemitem class="groupname">wheel</systemitem> 组中的用户成员可以使用 <command>su</command> - 命令来成为 <username>root</username>。 + 命令来成为 <systemitem class="username">root</systemitem>。 绝对不应该通过在口令项中进行设置来赋予维护人员天然的 - <groupname>wheel</groupname> 组成员身份。 维护人员应被放置在 - <groupname>staff</groupname> 组中,然后通过 - <filename>/etc/group</filename> 文件加入到 <groupname>wheel</groupname> - 组。事实上,只有那些需要以 <username>root</username> 身份进行操作的用户才需要放进 - <groupname>wheel</groupname> 组中。 当然,也可以通过 - 某种其它的验证手段,例如 Kerberos,可以通过 <username>root</username> + <systemitem class="groupname">wheel</systemitem> 组成员身份。 维护人员应被放置在 + <systemitem class="groupname">staff</systemitem> 组中,然后通过 + <filename>/etc/group</filename> 文件加入到 <systemitem class="groupname">wheel</systemitem> + 组。事实上,只有那些需要以 <systemitem class="username">root</systemitem> 身份进行操作的用户才需要放进 + <systemitem class="groupname">wheel</systemitem> 组中。 当然,也可以通过 + 某种其它的验证手段,例如 Kerberos,可以通过 <systemitem class="username">root</systemitem> 帐户中的 <filename>.k5login</filename> 文件来允许执行 - &man.ksu.1; 成为 <username>root</username> ,而不必把它们放进 - <groupname>wheel</groupname> 组。 这可能是一种更好的解决方案, - 因为 <groupname>wheel</groupname> 机制仍然可能导致入侵者获得 - <username>root</username> ,如果他拿到了口令文件,并能够进入职员的帐户。 - 尽管有 <groupname>wheel</groupname> 比什么都没有要强一些, + &man.ksu.1; 成为 <systemitem class="username">root</systemitem> ,而不必把它们放进 + <systemitem class="groupname">wheel</systemitem> 组。 这可能是一种更好的解决方案, + 因为 <systemitem class="groupname">wheel</systemitem> 机制仍然可能导致入侵者获得 + <systemitem class="username">root</systemitem> ,如果他拿到了口令文件,并能够进入职员的帐户。 + 尽管有 <systemitem class="groupname">wheel</systemitem> 比什么都没有要强一些, 但它并不是一种绝对安全的办法。</para> <para>可以使用 &man.pw.8; 命令来完全禁止某一个帐号:</para> - <screen>&prompt.root;<userinput>pw lock <replaceable>staff</replaceable></userinput></screen> + <screen>&prompt.root;<userinput>pw lock staff</userinput></screen> <para>这将阻止用户使用任何方法登录,包括 &man.ssh.1;。</para> @@ -340,7 +332,7 @@ <programlisting>foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh</programlisting> - <para>这会阻止用户 <username>foobar</username> 使用传统的方式登录。 + <para>这会阻止用户 <systemitem class="username">foobar</systemitem> 使用传统的方式登录。 但是对于使用了 <application>Kerberos</application> 或者配置了 &man.ssh.1; 公钥/密钥对的情况下,用户依然可以访问。</para> @@ -394,9 +386,9 @@ 要当心第三方的服务程序很可能有更多的问题。 例如, 运行旧版的 <application>imapd</application> 或 <application>popper</application> 无异于将 - <username>root</username> 令牌拱手送给全世界的攻击者。 + <systemitem class="username">root</systemitem> 令牌拱手送给全世界的攻击者。 永远不要运行那些您没有仔细检查过的服务程序, 另外也要知道, - 许多服务程序并不需要以 <username>root</username> 的身份运行。 + 许多服务程序并不需要以 <systemitem class="username">root</systemitem> 的身份运行。 例如, <application>ntalk</application>、 <application>comsat</application>, 以及 <application>finger</application> 这些服务, @@ -405,7 +397,7 @@ 但洋葱式安全规则仍然成立: 如果有人设法攻破了在沙盒中运行的程序, 那么在做更多坏事之前, 他们还必须想办法攻破沙盒本身的限制。 攻击者需要攻破的层次越多, 他们成功的可能性就越小。 - 过去, 破解 root 的漏洞几乎在所有以 <username>root</username> + 过去, 破解 root 的漏洞几乎在所有以 <systemitem class="username">root</systemitem> 身份运行的服务上都发现过, 包括那些基本的系统服务。 如果您的机器只打算向外界提供 <application>sshd</application> 登录, 而用户不会使用 @@ -431,20 +423,17 @@ <application>popper</application>, <application>imapd</application>, <application>ftpd</application>, 以及一些其他的服务。当然,它们有一些替代品,但安装那些服务可能需要做更多额外的工作。 - 可能必须以 <username>root</username> 身份运行这些程序, + 可能必须以 <systemitem class="username">root</systemitem> 身份运行这些程序, 并通过其他机制来检测入侵。</para> - <para>系统中另一个比较大的 <username>root</username> 漏洞 + <para>系统中另一个比较大的 <systemitem class="username">root</systemitem> 漏洞 是安装在其中的 suid-root 和 sgid 的可执行文件。 绝大多数这类程序, 例如 <application>rlogin</application> - 会放在 <filename class="directory">/bin</filename>、 <filename - class="directory">/sbin</filename>、 <filename - class="directory">/usr/bin</filename>, 或 <filename - class="directory">/usr/sbin</filename> 目录中。 + 会放在 <filename>/bin</filename>、 <filename>/sbin</filename>、 <filename>/usr/bin</filename>, 或 <filename>/usr/sbin</filename> 目录中。 尽管并没有 100% 的安全保证,但系统默认的 suid 和 sgid 可执行文件通常是相对安全的。 当然,偶尔也会发现一些存在于这些可执行文件中的 - <username>root</username> 漏洞。1998年,<literal>Xlib</literal> - 中发现了一处 <username>root</username> 漏洞,这使得 + <systemitem class="username">root</systemitem> 漏洞。1998年,<literal>Xlib</literal> + 中发现了一处 <systemitem class="username">root</systemitem> 漏洞,这使得 <application>xterm</application> (通常是做了suid的) 变得可以入侵。 做得安全些, 总比出现问题再后悔要强。 因此,谨慎的管理员通常会限制 suid 可执行文件, @@ -456,12 +445,12 @@ <filename>/dev/kmem</filename> 并进而读取经过加密的口令文件, 从而窃取任何包含口令的帐号。另外,攻破了 <literal>kmem</literal> 的入侵者能够监视通过 pty 传送的按键序列,即使用户使用的是安全的登录方式。 - 攻破了 <groupname>tty</groupname> 组的用户则能够向几乎所有用户的 + 攻破了 <systemitem class="groupname">tty</systemitem> 组的用户则能够向几乎所有用户的 tty 写入数据。如果用户正在运行一个终端程序,或包含了键盘模拟功能的终端仿真程序, 那么,入侵者能够以那个用户的身份执行任何命令。</para> </sect2> - <sect2 id="secure-users"> + <sect2 xml:id="secure-users"> <title>确保用户帐户的安全</title> <para>用户帐号的安全通常是最难保证的。虽然您可以为您的员工设置严苛的登录限制, @@ -478,42 +467,41 @@ <para>能够确保起作用的唯一一种方法, 是将口令文件中尽可能多的口令用星号代替, 并通过 ssh 或 Kerberos 来使用这些账号。 即使只有 - <username>root</username> 用户能够读取加密过的口令文件 (<filename>/etc/spwd.db</filename>), + <systemitem class="username">root</systemitem> 用户能够读取加密过的口令文件 (<filename>/etc/spwd.db</filename>), 入侵者仍然可能设法读到它的内容, 即使他暂时还无法写入这个文件。</para> - <para>您的安全脚本应该经常检查并报告口令文件的异动 (参见后面的 <link - linkend="security-integrity">检查文件完整性</link> 一节)。</para> + <para>您的安全脚本应该经常检查并报告口令文件的异动 (参见后面的 <link linkend="security-integrity">检查文件完整性</link> 一节)。</para> </sect2> <sect2> <title>确保内核中内核设备、直接访问设备和文件系统的安全</title> - <para>如果攻击者已经拿到了 <username>root</username> 那么他就有能力作任何事情, + <para>如果攻击者已经拿到了 <systemitem class="username">root</systemitem> 那么他就有能力作任何事情, 当然, 有一些事情是他们比较喜欢干的。 例如, 绝大多数现代的内核都包括一个内建的听包设备。 在 &os; 中,这个设备被称作 - <devicename>bpf</devicename> 。攻击者通常会尝试在攻克的系统上运行它。 - 如果您不需要 <devicename>bpf</devicename> 设备提供的功能,那么,就不要把它编入内核。</para> + <filename>bpf</filename> 。攻击者通常会尝试在攻克的系统上运行它。 + 如果您不需要 <filename>bpf</filename> 设备提供的功能,那么,就不要把它编入内核。</para> <indexterm> <primary><command>sysctl</command></primary> </indexterm> - <para>但是, 即使您关闭了 <devicename>bpf</devicename> + <para>但是, 即使您关闭了 <filename>bpf</filename> 设备, 仍需要关注 <filename>/dev/mem</filename> 和 <filename>/dev/kmem</filename>。 就事论事地说, 入侵者仍然能通过直接访问的方式写入磁盘设备。 另外, 还有一个称作模块加载器的内核机制, &man.kldload.8;。 有进取心的入侵者, 可以经由这一机制, - 在正在运行的内核中通过 KLD 模块来安装自己的 <devicename>bpf</devicename>, + 在正在运行的内核中通过 KLD 模块来安装自己的 <filename>bpf</filename>, 或其它听包设备。 为了避免这些问题, 您必须将内核的安全级别提高到至少 1。</para> <para>内核的安全级别可以通过多种方式来设置。 最简单的设置正在运行的内核安全级的方法, 是使用 <command>sysctl</command> 来设置内核变量 <varname>kern.securelevel</varname>:</para> - <screen>&prompt.root; <userinput>sysctl kern.securelevel=<replaceable>1</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>sysctl kern.securelevel=1</userinput></screen> <para>默认情况下, &os; 内核启动时的安全级别是 -1。 除非管理员或 &man.init.8; 由于启动脚本加以改变, 安全级别会继续保持为 -1。 @@ -535,7 +523,7 @@ <note> <para>将安全级别调整到 1 或更高可能会导致 X11 (访问 <filename>/dev/io</filename> 会被阻止), 或从源代码联编 &os; - (这一过程中的 <maketarget>installworld</maketarget> + (这一过程中的 <buildtarget>installworld</buildtarget> 部分需要临时取消一些文件上的只允许追加和不可修改标记) 出现一些问题, 并导致一些其他小问题。 有些时候, 例如 X11 的情况, 可以通过在引导过程中较早的阶段启动 &man.xdm.1; @@ -552,18 +540,17 @@ 然而, 这样做也可能有些过火, 而由于系统运行于较高的安全级别, 升级系统也会变得困难的多。 作为妥协, 可以让系统以较高的安全级别运行, 但并不将所有的启动文件都配置 <literal>schg</literal> 标记。 - 另一种方法是将 <filename class="directory">/</filename> 和 <filename - class="directory">/usr</filename> 以只读模式挂载。 + 另一种方法是将 <filename>/</filename> 和 <filename>/usr</filename> 以只读模式挂载。 请注意, 过分严苛的安全配置很可能限制您检测入侵的能力。</para> </sect2> - <sect2 id="security-integrity"> + <sect2 xml:id="security-integrity"> <title>检查文件完整性: 可执行文件,配置文件和其他文件</title> <para>当实施严格的限制时,往往会在使用的方便性上付出代价。例如,使用 <command>chflags</command> 来把 <literal>schg</literal> 标记 - 应用到 <filename class="directory">/</filename> 和 - <filename class="directory">/usr</filename> 中的绝大多数文件上可能会起到反作用, + 应用到 <filename>/</filename> 和 + <filename>/usr</filename> 中的绝大多数文件上可能会起到反作用, 因为尽管它能够保护那些文件, 但同时也使入侵检测无法进行。 层次化安全的最后一层可能也是最重要的 — 检测。 如果无法检测出潜在的入侵行为, @@ -587,11 +574,11 @@ 就应该为实际的监控撰写脚本。以 NFS 挂接为例,可以用类似 &man.find.1; 和 &man.md5.1; 这样的命令为基础来完成我们所需的工作。 最好能够每天对被控机的所有执行文件计算一遍 md5,同时,还应以更高的频率测试那些 - <filename class="directory">/etc</filename> 和 - <filename class="directory">/usr/local/etc</filename> + <filename>/etc</filename> 和 + <filename>/usr/local/etc</filename> 中的控制文件。一旦发现了不匹配的情形,监控机应立即通知系统管理员。 好的安全脚本也应该检查在系统分区,如 <filename>/</filename> 和 - <filename class="directory">/usr</filename> + <filename>/usr</filename> 中是否有新增或删除的可执行文件,以及不适宜的 suid 。</para> <para>如果打算使用 ssh 来代替 NFS,那么撰写安全脚本将变得困难许多。 @@ -699,7 +686,7 @@ <para>此外, 将内部服务保护起来, 阻止来自其他主机的访问也十分重要, 这些工作可以通过设置边界路由器来完成。 主要的想法, 是阻止来自您的 LAN 以外的访问, 这有助于避免 - <username>root</username> 受到攻击。 + <systemitem class="username">root</systemitem> 受到攻击。 尽可能配置排他式的防火墙, 例如, <quote>用防火墙阻止所有的网络流量 <emphasis>除了</emphasis> 端口 A、B、 C、D,以及 M-Z</quote>。 通过采用这种方法, 您可以很容易地将低端口的访问阻止在外, @@ -793,7 +780,7 @@ 而您连到了一台不安全的机器上, 则您的密钥可能被别人获得。 尽管实际的密钥并没有被泄漏, 但由于 ssh 会在您登录的过程中启用一个转发端口, 如果攻击者拿到那台不安全的机器上的 - <username>root</username> 那么他将能够利用那个端口来使用您的密钥, + <systemitem class="username">root</systemitem> 那么他将能够利用那个端口来使用您的密钥, 从而访问您能够访问的那些机器。</para> <para>我们建议您在使用 ssh 时配合 @@ -807,19 +794,15 @@ </sect2> </sect1> - <sect1 id="crypt"> - <sect1info> + <sect1 xml:id="crypt"> + <info><title>DES、 Blowfish、 MD5, 以及 Crypt</title> <authorgroup> - <author> - <firstname>Bill</firstname> - <surname>Swingle</surname> - <contrib>部分重写、更新来自 </contrib> - </author> + <author><personname><firstname>Bill</firstname><surname>Swingle</surname></personname><contrib>部分重写、更新来自 </contrib></author> </authorgroup> - <!-- 21 Mar 2000 --> - </sect1info> + + </info> - <title>DES、 Blowfish、 MD5, 以及 Crypt</title> + <indexterm> <primary>安全</primary> <secondary>密码</secondary> @@ -877,7 +860,7 @@ </sect2> </sect1> - <sect1 id="one-time-passwords"> + <sect1 xml:id="one-time-passwords"> <title>一次性口令</title> <indexterm><primary>一次性口令</primary></indexterm> <indexterm> @@ -1098,18 +1081,14 @@ Enter secret pass phrase: <userinput><secret password></userinput> </sect2> </sect1> - <sect1 id="tcpwrappers"> - <sect1info> + <sect1 xml:id="tcpwrappers"> + <info><title>TCP Wrappers</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>作者</contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>作者</contrib></author> </authorgroup> - </sect1info> + </info> - <title>TCP Wrappers</title> + <indexterm><primary>TCP Wrappers</primary></indexterm> @@ -1189,7 +1168,7 @@ Enter secret pass phrase: <userinput><secret password></userinput> <para>另外也有许多其他选项, 这些将在后面介绍。 简单的配置行从上面这些描述之中可以很容易得出。 例如, 允许 <acronym>POP</acronym>3 连接通过 - <filename role="package">mail/qpopper</filename> 服务, + <package>mail/qpopper</package> 服务, 应把下面的行添加到 <filename>hosts.allow</filename>:</para> @@ -1259,7 +1238,7 @@ ALL : .example.com \ : deny</programlisting> <para>这将拒绝来自 - <hostid role="fqdn">*.example.com</hostid> 域的所有连接; + <systemitem class="fqdomainname">*.example.com</systemitem> 域的所有连接; 同时还将记录主机名, <acronym>IP</acronym> 地址, 以及对方所尝试连接的服务名字到 <filename>/var/log/connections.log</filename> 文件中。</para> @@ -1307,25 +1286,17 @@ sendmail : PARANOID : deny</programlisting> </sect2> </sect1> - <sect1 id="kerberos5"> - <sect1info> + <sect1 xml:id="kerberos5"> + <info><title><application>Kerberos5</application></title> <authorgroup> - <author> - <firstname>Tillman</firstname> - <surname>Hodgson</surname> - <contrib>撰写者 </contrib> - </author> + <author><personname><firstname>Tillman</firstname><surname>Hodgson</surname></personname><contrib>撰写者 </contrib></author> </authorgroup> <authorgroup> - <author> - <firstname>Mark</firstname> - <surname>Murray</surname> - <contrib>原文来自 </contrib> - </author> + <author><personname><firstname>Mark</firstname><surname>Murray</surname></personname><contrib>原文来自 </contrib></author> </authorgroup> - </sect1info> + </info> - <title><application>Kerberos5</application></title> + <para><application>Kerberos</application> 是一组附加的网络系统/协议, 用以让用户通过一台安全服务器提供的服务来验证身份。 @@ -1396,7 +1367,7 @@ sendmail : PARANOID : deny</programlisting> 软件包。 在 <acronym>US</acronym> 它被作为一种加密产品使用, 因而历史上曾经受到 <acronym>US</acronym> 出口管制。 <acronym>MIT</acronym> <application>Kerberos</application> - 可以通过 port (<filename role="package">security/krb5</filename>) + 可以通过 port (<package>security/krb5</package>) 来安装和使用。 Heimdal <application>Kerberos</application> 是另一种第 5 版实现, 并且明确地在 @@ -1404,7 +1375,7 @@ sendmail : PARANOID : deny</programlisting> (因此在许多非商业的类 &unix; 系统中非常常用。 Heimdal <application>Kerberos</application> 软件包可以通过 port - (<filename role="package">security/heimdal</filename>) 安装, + (<package>security/heimdal</package>) 安装, 最新的 &os; 的最小安装也会包含它。</para> <para>为使尽可能多的读者从中受益, 这份说明以 &os; 附带的 @@ -1452,7 +1423,7 @@ kadmind5_server_enable="YES"</programlisting> <para>请注意这个 <filename>/etc/krb5.conf</filename> 文件假定您的 <acronym>KDC</acronym> 有一个完整的主机名, - 即 <hostid role="fqdn">kerberos.example.org</hostid>。 + 即 <systemitem class="fqdomainname">kerberos.example.org</systemitem>。 如果您的 <acronym>KDC</acronym> 主机名与它不同, 则应添加一条 CNAME (别名) 项到 zone 中去。</para> @@ -1465,7 +1436,7 @@ kadmind5_server_enable="YES"</programlisting> default_realm = EXAMPLE.ORG</programlisting> <para>将下面的内容加入到 - <hostid role="fqdn">example.org</hostid> zone 数据文件中:</para> + <systemitem class="fqdomainname">example.org</systemitem> zone 数据文件中:</para> <programlisting>_kerberos._udp IN SRV 01 00 88 kerberos.example.org. _kerberos._tcp IN SRV 01 00 88 kerberos.example.org. @@ -1509,9 +1480,9 @@ Master key: <userinput>xxxxxxxx</userinput> Verifying password - Master key: <userinput>xxxxxxxx</userinput> &prompt.root; <userinput>kadmin -l</userinput> -kadmin> <userinput>init EXAMPLE.ORG</userinput> +kadmin> <userinput>init EXAMPLE.ORG</userinput> Realm max ticket life [unlimited]: -kadmin> <userinput>add tillman</userinput> +kadmin> <userinput>add tillman</userinput> Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: @@ -1526,7 +1497,7 @@ Verifying password - Password: <userinput>xxxxxxxx</userinput></screen> <acronym>KDC</acronym> 确实在正常工作, 使用 <acronym>KDC</acronym> 本身的功能:</para> - <screen>&prompt.user; <userinput>kinit <replaceable>tillman</replaceable></userinput> + <screen>&prompt.user; <userinput>kinit tillman</userinput> tillman@EXAMPLE.ORG's Password: &prompt.user; <userinput>klist</userinput> @@ -1590,12 +1561,12 @@ Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG</screen> keytab 中。 例如:</para> <screen>&prompt.root; <userinput>kadmin</userinput> -kadmin><userinput> add --random-key host/myserver.example.org</userinput> +kadmin><userinput> add --random-key host/myserver.example.org</userinput> Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: -kadmin><userinput> ext host/myserver.example.org</userinput> -kadmin><userinput> exit</userinput></screen> +kadmin><userinput> ext host/myserver.example.org</userinput> +kadmin><userinput> exit</userinput></screen> <para>注意 <command>ext</command> 命令 (这是 <quote>extract</quote> 的简写) 默认会把导出的密钥放到 @@ -1605,13 +1576,13 @@ kadmin><userinput> exit</userinput></screen> <command>kadmind</command> (例如基于安全理由) 因而无法远程地使用 <command>kadmin</command> 您可以直接在 <acronym>KDC</acronym> 上添加主机 principal - (<username>host/myserver.EXAMPLE.ORG</username>) 随后将其导出到一个临时文件中 + (<systemitem class="username">host/myserver.EXAMPLE.ORG</systemitem>) 随后将其导出到一个临时文件中 (以免覆盖 <acronym>KDC</acronym> 上的 <filename>/etc/krb5.keytab</filename>), 方法是使用下面的命令:</para> <screen>&prompt.root; <userinput>kadmin</userinput> -kadmin><userinput> ext --keytab=/tmp/example.keytab host/myserver.example.org</userinput> -kadmin><userinput> exit</userinput></screen> +kadmin><userinput> ext --keytab=/tmp/example.keytab host/myserver.example.org</userinput> +kadmin><userinput> exit</userinput></screen> <para>随后需要把 keytab 复制到服务器上 (例如使用 <command>scp</command> 或软盘)。 @@ -1693,15 +1664,15 @@ kadmin><userinput> exit</userinput></screen> <para>在某个领域中的用户往往都有自己的 <application>Kerberos</application> principal (例如 - <username>tillman@EXAMPLE.ORG</username>) 并映射到本机用户帐户 - (例如本机上名为 <username>tillman</username> 的帐户)。 + <systemitem class="username">tillman@EXAMPLE.ORG</systemitem>) 并映射到本机用户帐户 + (例如本机上名为 <systemitem class="username">tillman</systemitem> 的帐户)。 客户端应用程序, 如 <command>telnet</command> 通常并不需要用户名或 principal。</para> <para>不过, 有时您可能会需要赋予某些没有匹配 <application>Kerberos</application> principal 的人使用本地用户帐户的权限。 例如 - <username>tillman@EXAMPLE.ORG</username> 可能需要访问本地的 - <username>webdevelopers</username> 用户帐号。 其它 + <systemitem class="username">tillman@EXAMPLE.ORG</systemitem> 可能需要访问本地的 + <systemitem class="username">webdevelopers</systemitem> 用户帐号。 其它 principal 可能也会需要访问这个本地帐号。</para> <para>用户 home 目录中的 <filename>.k5login</filename> 和 @@ -1714,7 +1685,7 @@ kadmin><userinput> exit</userinput></screen> jdoe@example.org</screen> <para>并放到了本地用户 - <username>webdevelopers</username> 的 home 目录中, 则列出的两个 principals + <systemitem class="username">webdevelopers</systemitem> 的 home 目录中, 则列出的两个 principals 都可以使用那个帐号, 而无须共享口令。</para> <para>建议您在开始实施之前首先阅读这些命令的联机帮助。 @@ -1753,9 +1724,9 @@ jdoe@example.org</screen> <listitem> <para>如果您改变了主机名, 您还需要修改您的 - <username>host/</username> principal 并更新 keytab。 - 这一规律也适用于类似 Apache 的 <filename role="package">www/mod_auth_kerb</filename> - 所使用的 <username>www/</username> principal 这样的特殊 + <systemitem class="username">host/</systemitem> principal 并更新 keytab。 + 这一规律也适用于类似 Apache 的 <package>www/mod_auth_kerb</package> + 所使用的 <systemitem class="username">www/</systemitem> principal 这样的特殊 keytab 项。</para> </listitem> @@ -1773,7 +1744,7 @@ jdoe@example.org</screen> <listitem> <para>某些作为客户使用您的 <acronym>KDC</acronym> 的操作系统可能没有将 <command>ksu</command> 设置为 setuid - <username>root</username> 的权限。 这意味着 + <systemitem class="username">root</systemitem> 的权限。 这意味着 <command>ksu</command> 将不能够正常工作, 从安全角度说这是一个不错的主意, 但可能令人烦恼。 @@ -1786,7 +1757,7 @@ jdoe@example.org</screen> <application>Kerberos</application> 时, 如果希望允许一个 principal 拥有超过默认的十小时有效期的 ticket 则必须使用 <command>kadmin</command> 中的 <command>modify_principal</command> - 来修改 principal 本身以及 <username>krbtgt</username> + 来修改 principal 本身以及 <systemitem class="username">krbtgt</systemitem> 的 maxlife(最大有效期)。 此后, principal 可以使用 <command>kinit</command> 的 <literal>-l</literal> 参数来请求一个有更长有效期的 ticket。</para> @@ -1858,16 +1829,16 @@ jdoe@example.org</screen> <para>完成同样工作的命令可能会有些许的不同。 推荐按照 <acronym>MIT</acronym> <application>Kerberos</application> 的网站 - (<ulink url="http://web.mit.edu/Kerberos/www/"></ulink>) + (<uri xlink:href="http://web.mit.edu/Kerberos/www/">http://web.mit.edu/Kerberos/www/</uri>) 上的说明来操作。 请小心关于路径的问题, <acronym>MIT</acronym> port 会默认安装到 - <filename class="directory">/usr/local/</filename>, 您因此可能会执行 + <filename>/usr/local/</filename>, 您因此可能会执行 <quote>普通的</quote> 系统应用程序而非 <acronym>MIT</acronym>, 如果您的 <envar>PATH</envar> 环境变量把 把系统目录放在前面的话。</para> <note><para>如果使用 &os; 提供的 <acronym>MIT</acronym> - <filename role="package">security/krb5</filename> port, + <package>security/krb5</package> port, 一定要仔细阅读 port 所安装的 <filename>/usr/local/share/doc/krb5/README.FreeBSD</filename>, 如果您想知道为什么通过 @@ -1886,7 +1857,7 @@ kadmind5_server_enable="YES"</programlisting> <para>这样做的原因是, <acronym>MIT</acronym> kerberos 会将可执行文件装到 - <filename class="directory">/usr/local</filename> + <filename>/usr/local</filename> 之下。</para> </sect2> @@ -1918,8 +1889,7 @@ kadmind5_server_enable="YES"</programlisting> <para>在多用户环境中 <application>Kerberos</application> 的安全性会被削弱。 - 这是因为它把 ticket 保存到 <filename - class="directory">/tmp</filename> 目录中, 而这个目录可以被任何用户读取。 + 这是因为它把 ticket 保存到 <filename>/tmp</filename> 目录中, 而这个目录可以被任何用户读取。 如果有用户与其它人同时共享一台计算机 (也就是 multi-user), 则这个用户的 ticket 就可能被其它用户窃取 (复制)。</para> @@ -1966,7 +1936,7 @@ kadmind5_server_enable="YES"</programlisting> 这意味着种过木马的程序,例如 <command>kinit</command> 有可能记录用户所有的用户名和密码。 尽管如此, 可以用类似 - <filename role="package">security/tripwire</filename> + <package>security/tripwire</package> 这样的文件系统完整性检查工具来避免此类情况的发生。</para> </sect3> @@ -1982,47 +1952,42 @@ kadmind5_server_enable="YES"</programlisting> <itemizedlist> <listitem> - <para><ulink - url="http://www.faqs.org/faqs/Kerberos-faq/general/preamble.html"> - The <application>Kerberos</application> FAQ</ulink></para> + <para><link xlink:href="http://www.faqs.org/faqs/Kerberos-faq/general/preamble.html"> + The <application>Kerberos</application> FAQ</link></para> </listitem> <listitem> - <para><ulink url="http://web.mit.edu/Kerberos/www/dialogue.html">Designing - an Authentication System: a Dialog in Four Scenes</ulink></para> + <para><link xlink:href="http://web.mit.edu/Kerberos/www/dialogue.html">Designing + an Authentication System: a Dialog in Four Scenes</link></para> </listitem> <listitem> - <para><ulink url="http://www.ietf.org/rfc/rfc1510.txt?number=1510">RFC 1510, + <para><link xlink:href="http://www.ietf.org/rfc/rfc1510.txt?number=1510">RFC 1510, The <application>Kerberos</application> Network Authentication Service - (V5)</ulink></para> + (V5)</link></para> </listitem> <listitem> - <para><ulink url="http://web.mit.edu/Kerberos/www/"><acronym>MIT</acronym> - <application>Kerberos</application> home page</ulink></para> + <para><link xlink:href="http://web.mit.edu/Kerberos/www/"><acronym>MIT</acronym> + <application>Kerberos</application> home page</link></para> </listitem> <listitem> - <para><ulink url="http://www.pdc.kth.se/heimdal/">Heimdal - <application>Kerberos</application> home page</ulink></para> + <para><link xlink:href="http://www.pdc.kth.se/heimdal/">Heimdal + <application>Kerberos</application> home page</link></para> </listitem> </itemizedlist> </sect2> </sect1> - <sect1 id="openssl"> - <sect1info> + <sect1 xml:id="openssl"> + <info><title>OpenSSL</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>作者 </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>作者 </contrib></author> </authorgroup> - </sect1info> - <title>OpenSSL</title> + </info> + <indexterm> <primary>安全</primary> <secondary>OpenSSL</secondary> @@ -2035,15 +2000,15 @@ kadmind5_server_enable="YES"</programlisting> <para>对 <application>OpenSSL</application> 的一些常见用法包括加密邮件客户的身份验证过程, 基于 Web 的交易如信用卡等等。 许多 ports 如 - <filename role="package">www/apache13-ssl</filename>, 以及 - <filename role="package">mail/claws-mail</filename> + <package>www/apache13-ssl</package>, 以及 + <package>mail/claws-mail</package> 等等都提供了编译进 <application>OpenSSL</application> 支持的方法。</para> <note> <para>绝大多数情况下 Ports Collection 会试图使用 - <filename role="package">security/openssl</filename> - 除非明确地将 <makevar>WITH_OPENSSL_BASE</makevar> make + <package>security/openssl</package> + 除非明确地将 <varname>WITH_OPENSSL_BASE</varname> make 变量设置为 <quote>yes</quote>。</para> </note> @@ -2057,7 +2022,7 @@ kadmind5_server_enable="YES"</programlisting> 它在默认情况下是不编译的。 如果想使用它, 请查阅相应的授权, 如果认为授权可以接受, 则可以在 <filename>make.conf</filename> 中设置 - <makevar>MAKE_IDEA</makevar>。</para> + <varname>MAKE_IDEA</varname>。</para> </note> <para>为应用软件提供证书是 @@ -2066,7 +2031,7 @@ kadmind5_server_enable="YES"</programlisting> 如果证书没有被众多 <quote>权威发证机构</quote>, 或 <acronym>CA</acronym> 中的某一个确认, 则会产生一个警告。 权威发证机构通常是一家公司, - 例如 <ulink url="http://www.verisign.com">VeriSign</ulink>, + 例如 <link xlink:href="http://www.verisign.com">VeriSign</link>, 它能够通过签署来证明个人或公司证书的有效性。 这个过程是需要付费的, 当然, 这不是使用证书的必要条件; 然而, 这样做会让那些比较偏执的用户感到轻松。</para> @@ -2094,18 +2059,18 @@ There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- -Country Name (2 letter code) [AU]:<userinput><replaceable>US</replaceable></userinput> -State or Province Name (full name) [Some-State]:<userinput><replaceable>PA</replaceable></userinput> -Locality Name (eg, city) []:<userinput><replaceable>Pittsburgh</replaceable></userinput> -Organization Name (eg, company) [Internet Widgits Pty Ltd]:<userinput><replaceable>My Company</replaceable></userinput> -Organizational Unit Name (eg, section) []:<userinput><replaceable>Systems Administrator</replaceable></userinput> -Common Name (eg, YOUR name) []:<userinput><replaceable>localhost.example.org</replaceable></userinput> -Email Address []:<userinput><replaceable>trhodes@FreeBSD.org</replaceable></userinput> +Country Name (2 letter code) [AU]:<userinput>US</userinput> +State or Province Name (full name) [Some-State]:<userinput>PA</userinput> +Locality Name (eg, city) []:<userinput>Pittsburgh</userinput> +Organization Name (eg, company) [Internet Widgits Pty Ltd]:<userinput>My Company</userinput> +Organizational Unit Name (eg, section) []:<userinput>Systems Administrator</userinput> +Common Name (eg, YOUR name) []:<userinput>localhost.example.org</userinput> +Email Address []:<userinput>trhodes@FreeBSD.org</userinput> Please enter the following 'extra' attributes to be sent with your certificate request -A challenge password []:<userinput><replaceable>SOME PASSWORD</replaceable></userinput> -An optional company name []:<userinput><replaceable>Another Name</replaceable></userinput></screen> +A challenge password []:<userinput>SOME PASSWORD</userinput> +An optional company name []:<userinput>Another Name</userinput></screen> <para>请注意, 在 <quote>Common Name</quote> 提示后面我们输入的是一个域名。 @@ -2129,22 +2094,22 @@ An optional company name []:<userinput><replaceable>Another Name</replaceable></ 也可以创建自行签名的证书。 首先, 需要生成 <acronym>RSA</acronym> 密钥:</para> - <screen>&prompt.root; <userinput>openssl dsaparam -rand -genkey -out <filename>myRSA.key</filename> 1024</userinput></screen> + <screen>&prompt.root; <userinput>openssl dsaparam -rand -genkey -out myRSA.key 1024</userinput></screen> <para>接下来, 生成 <acronym>CA</acronym> 密钥:</para> - <screen>&prompt.root; <userinput>openssl gendsa -des3 -out <filename>myca.key</filename> <filename>myRSA.key</filename></userinput></screen> + <screen>&prompt.root; <userinput>openssl gendsa -des3 -out myca.key myRSA.key</userinput></screen> <para>然后用这个密钥来创建证书:</para> - <screen>&prompt.root; <userinput>openssl req -new -x509 -days 365 -key <filename>myca.key</filename> -out <filename>new.crt</filename></userinput></screen> + <screen>&prompt.root; <userinput>openssl req -new -x509 -days 365 -key myca.key -out new.crt</userinput></screen> <para>上述步骤将在当前目录中生成两个新文件: 一个是权威发证机构的签名文件, <filename>myca.key</filename>; 另一个是证书本身, <filename>new.crt</filename>。 这些文件应该放到同一个目录中, 一般而言, 推荐放到 - <filename class="directory">/etc</filename>, - 并且只允许 <username>root</username> 读取。 + <filename>/etc</filename>, + 并且只允许 <systemitem class="username">root</systemitem> 读取。 建议把权限设置为 0700, 这可以通过 <command>chmod</command> 工具来完成。</para> </sect2> @@ -2173,14 +2138,14 @@ define(`confSERVER_CERT',`/etc/certs/new.crt')dnl define(`confSERVER_KEY',`/etc/certs/myca.key')dnl define(`confTLS_SRV_OPTIONS', `V')dnl</programlisting> - <para>这里, <filename class="directory">/etc/certs/</filename> + <para>这里, <filename>/etc/certs/</filename> 是准备用来在本地保存证书和密钥的位置。 最后, 需要重新生成本地的 <filename>.cf</filename> 文件。 这一工作可以简单地通过在 目录中执行 <command>make</command> - <maketarget>install</maketarget> 来完成。 + <buildtarget>install</buildtarget> 来完成。 接下来, 可以使用 <command>make</command> - <maketarget>restart</maketarget> 来重新启动 + <buildtarget>restart</buildtarget> 来重新启动 <application>Sendmail</application> 服务程序。</para> <para>如果一切正常的话, 在 @@ -2189,12 +2154,12 @@ define(`confTLS_SRV_OPTIONS', `V')dnl</programlisting> <para>做一个简单的测试, 使用 &man.telnet.1; 来连接邮件服务器:</para> - <screen>&prompt.root; <userinput>telnet <replaceable>example.com</replaceable> 25</userinput> + <screen>&prompt.root; <userinput>telnet example.com 25</userinput> Trying 192.0.34.166... -Connected to <hostid role="fqdn">example.com</hostid>. +Connected to <systemitem class="fqdomainname">example.com</systemitem>. Escape character is '^]'. -220 <hostid role="fqdn">example.com</hostid> ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) -<userinput>ehlo <replaceable>example.com</replaceable></userinput> +220 <systemitem class="fqdomainname">example.com</systemitem> ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) +<userinput>ehlo example.com</userinput> 250-example.com Hello example.com [192.0.34.166], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING @@ -2207,28 +2172,23 @@ Escape character is '^]'. 250-DELIVERBY 250 HELP <userinput>quit</userinput> -221 2.0.0 <hostid role="fqdn">example.com</hostid> closing connection +221 2.0.0 <systemitem class="fqdomainname">example.com</systemitem> closing connection Connection closed by foreign host.</screen> <para>如果输出中出现了 <quote>STARTTLS</quote> 则说明一切正常。</para> </sect2> </sect1> - <sect1 id="ipsec"> - <sect1info> + <sect1 xml:id="ipsec"> + <info><title>IPsec 上的 VPN</title> <authorgroup> - <author> - <firstname>Nik</firstname> - <surname>Clayton</surname> - <affiliation> + <author><personname><firstname>Nik</firstname><surname>Clayton</surname></personname><affiliation> <address><email>nik@FreeBSD.org</email></address> - </affiliation> - <contrib>撰写者 </contrib> - </author> + </affiliation><contrib>撰写者 </contrib></author> </authorgroup> - </sect1info> + </info> - <title>IPsec 上的 VPN</title> + <indexterm> <primary>IPsec</primary> @@ -2237,20 +2197,15 @@ Connection closed by foreign host.</screen> <para>使用 FreeBSD 网关在两个被 Internet 分开的网络之间架设 VPN。</para> <sect2> - <sect2info> + <info><title>理解 IPsec</title> <authorgroup> - <author> - <firstname>Hiten M.</firstname> - <surname>Pandya</surname> - <affiliation> + <author><personname><firstname>Hiten M.</firstname><surname>Pandya</surname></personname><affiliation> <address><email>hmp@FreeBSD.org</email></address> - </affiliation> - <contrib>撰写者 </contrib> - </author> + </affiliation><contrib>撰写者 </contrib></author> </authorgroup> - </sect2info> + </info> - <title>理解 IPsec</title> + <para>这一节将指导您完成架设 IPsec。为了配置 IPsec, 您应当熟悉如何编译一个定制的内核的一些概念 @@ -2261,7 +2216,7 @@ Connection closed by foreign host.</screen> 协议 (IP) 层之上的协议。 它能够让两个或更多主机以安全的方式来通讯 (并因此而得名)。 FreeBSD IPsec <quote>网络协议栈</quote> 基于 - <ulink url="http://www.kame.net/">KAME</ulink> 的实现, + <link xlink:href="http://www.kame.net/">KAME</link> 的实现, 它支持两种协议族, IPv4 和 IPv6。</para> <indexterm> @@ -2372,53 +2327,48 @@ options IPSEC_DEBUG #debug for IP security <listitem> <para>网络的内部地址可以是公网或私有的 IP 地址, 这并不是问题。它们并不冲突,比如它们不同时使用 - <hostid role="ipaddr">192.168.1.x</hostid> + <systemitem class="ipaddress">192.168.1.x</systemitem> 这样的地址。</para> </listitem> </itemizedlist> </sect2> <sect2> - <sect2info> + <info><title>在 &os; 上配置 IPsec</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <affiliation> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><affiliation> <address><email>trhodes@FreeBSD.org</email></address> - </affiliation> - <contrib>作者</contrib> - </author> + </affiliation><contrib>作者</contrib></author> </authorgroup> - </sect2info> + </info> - <title>在 &os; 上配置 IPsec</title> + <para>开始需先从 Ports Collection 安装 - <filename role="package">security/ipsec-tools</filename>。 + <package>security/ipsec-tools</package>。 这个第三方软件提供了一些能够帮助配置的应用程序。</para> <para>下一步是创建两个 &man.gif.4; 伪设备用来在两个网络间传输数据包的 <quote>隧道</quote>。 - 使用 <username>root</username> 身份运行以下命令, + 使用 <systemitem class="username">root</systemitem> 身份运行以下命令, 并用真实的内部外部网关替换命令中的 <replaceable>internal</replaceable> 和 <replaceable>external</replaceable> 项:</para> <screen>&prompt.root; <userinput>ifconfig gif0 create</userinput></screen> - <screen>&prompt.root; <userinput>ifconfig gif0 <replaceable>internal1 internal2</replaceable></userinput></screen> - <screen>&prompt.root; <userinput>ifconfig gif0 tunnel <replaceable>external1 external2</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>ifconfig gif0 internal1 internal2</userinput></screen> + <screen>&prompt.root; <userinput>ifconfig gif0 tunnel external1 external2</userinput></screen> <para>比如,公司 <acronym>LAN</acronym> 对外的 <acronym>IP</acronym> 地址是 - <hostid role="ipaddr">172.16.5.4</hostid>, + <systemitem class="ipaddress">172.16.5.4</systemitem>, 内部的 <acronym>IP</acronym> 地址为 - <hostid role="ipaddr">10.246.38.1</hostid>。 + <systemitem class="ipaddress">10.246.38.1</systemitem>。 家庭 <acronym>LAN</acronym> 对外的 <acronym>IP</acronym> 地址是 - <hostid role="ipaddr">192.168.1.12</hostid>, + <systemitem class="ipaddress">192.168.1.12</systemitem>, 内部的 <acronym>IP</acronym> 地址为 - <hostid role="ipaddr">10.0.0.5</hostid>。</para> + <systemitem class="ipaddress">10.0.0.5</systemitem>。</para> <para>这看起来可能有些混乱,所以我们通过 &man.ifconfig.8; 命令输出再回顾一下:</para> @@ -2466,11 +2416,11 @@ round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms</programlisting> 两个网关都必须配置路由规则以正确传输两边的网络流量。 下面的命令可以实现这个:</para> - <screen>&prompt.root; <userinput>corp-net# route add <replaceable>10.0.0.0 10.0.0.5 255.255.255.0</replaceable></userinput></screen> - <screen>&prompt.root; <userinput>corp-net# route add net <replaceable>10.0.0.0: gateway 10.0.0.5</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0</userinput></screen> + <screen>&prompt.root; <userinput>corp-net# route add net 10.0.0.0: gateway 10.0.0.5</userinput></screen> - <screen>&prompt.root; <userinput>priv-net# route add <replaceable>10.246.38.0 10.246.38.1 255.255.255.0</replaceable></userinput></screen> - <screen>&prompt.root; <userinput>priv-net# route add host <replaceable>10.246.38.0: gateway 10.246.38.1</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0</userinput></screen> + <screen>&prompt.root; <userinput>priv-net# route add host 10.246.38.0: gateway 10.246.38.1</userinput></screen> <para>此刻,不论从网关还是网关后的机器都能访问内部的网络。 这很容易通过以下的例子确认:</para> @@ -2608,7 +2558,7 @@ Foreground mode. 命令查看网络流量。根据需要替换掉下面的 <literal>em0</literal> 网卡界面。</para> - <screen>&prompt.root; <userinput>tcpdump -i em0 host <replaceable>172.16.5.4 and dst 192.168.1.12</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12</userinput></screen> <para>控制台上能看到如下类似的输出。如果不是这样的话, 可能就有些问题了,调试的话需要用到返回的数据。</para> @@ -2657,19 +2607,15 @@ racoon_enable="yes"</programlisting> </sect2> </sect1> - <sect1 id="openssh"> - <sect1info> + <sect1 xml:id="openssh"> + <info><title>OpenSSH</title> <authorgroup> - <author> - <firstname>Chern</firstname> - <surname>Lee</surname> - <contrib>原著 </contrib> - </author> + <author><personname><firstname>Chern</firstname><surname>Lee</surname></personname><contrib>原著 </contrib></author> <!-- 21 April 2001 --> </authorgroup> - </sect1info> + </info> - <title>OpenSSH</title> + <indexterm><primary>OpenSSH</primary></indexterm> <indexterm> <primary>安全</primary> @@ -2728,7 +2674,7 @@ racoon_enable="yes"</programlisting> <para>&man.ssh.1; 的工作方式和 &man.rlogin.1; 非常类似。</para> - <screen>&prompt.root; <userinput>ssh <replaceable>user@example.com</replaceable></userinput> + <screen>&prompt.root; <userinput>ssh user@example.com</userinput> Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? <userinput>yes</userinput> Host 'example.com' added to the list of known hosts. @@ -2765,7 +2711,7 @@ user@example.com's password: <userinput>*******</userinput></screen> &man.rcp.1;; 的用法类似, 它用于将文件复制到远程的机器上, 或复制过来, 区别是它是安全的。</para> - <screen>&prompt.root; <userinput> scp <replaceable>user@example.com:/COPYRIGHT COPYRIGHT</replaceable></userinput> + <screen>&prompt.root; <userinput> scp user@example.com:/COPYRIGHT COPYRIGHT</userinput> user@example.com's password: <userinput>*******</userinput> COPYRIGHT 100% |*****************************| 4735 00:00 @@ -2789,7 +2735,7 @@ COPYRIGHT 100% |*****************************| 4735 </indexterm> <para>针对 <application>OpenSSH</application> 服务程序和客户端的系统级配置文件在 - <filename class="directory">/etc/ssh</filename> + <filename>/etc/ssh</filename> 目录中。</para> <para><filename>ssh_config</filename> 用于配置客户端的设定, @@ -2801,13 +2747,13 @@ COPYRIGHT 100% |*****************************| 4735 选项提供了更多的配置选择。</para> </sect2> - <sect2 id="security-ssh-keygen"> + <sect2 xml:id="security-ssh-keygen"> <title>ssh-keygen</title> <para>用于取代口令的一种方法是使用 &man.ssh-keygen.1; 来生成 DSA 或 RSA 密钥对用于验证用户的身份:</para> - <screen>&prompt.user; <userinput>ssh-keygen -t <replaceable>dsa</replaceable></userinput> + <screen>&prompt.user; <userinput>ssh-keygen -t dsa</userinput> Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): Created directory '/home/user/.ssh'. @@ -2854,7 +2800,7 @@ bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com 你需要参阅 &man.ssh-keygen.1; 联机手册。</para></warning> </sect2> - <sect2 id="security-ssh-agent"> + <sect2 xml:id="security-ssh-agent"> <title>ssh-agent 和 ssh-add</title> <para>&man.ssh-agent.1; 和 &man.ssh-add.1; 这两个工具, @@ -2891,7 +2837,7 @@ Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) 随后您就可以运行 &man.ssh-add.1; 来加载全部 SSH 密钥了。</para> </sect2> - <sect2 id="security-ssh-tunneling"> + <sect2 xml:id="security-ssh-tunneling"> <title>SSH 隧道</title> <indexterm> <primary>OpenSSH</primary> @@ -2902,7 +2848,7 @@ Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) <para>下面的命令告诉 &man.ssh.1; 为 <application>telnet</application> 创建一个隧道:</para> - <screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>5023:localhost:23 user@foo.example.com</replaceable></userinput> + <screen>&prompt.user; <userinput>ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com</userinput> &prompt.user;</screen> <para>上述 <command>ssh</command> 命令使用了下面这些选项:</para> @@ -2955,11 +2901,11 @@ Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) <para>SSH 隧道通过监听 - <hostid>localhost</hostid> 上面指定端口来完成工作。 + <systemitem>localhost</systemitem> 上面指定端口来完成工作。 它将把本机主机/端口上接收到的连接通过 SSH 连接转发到远程主机/端口。</para> - <para>本例中, 位于 <hostid>localhost</hostid> 的 <replaceable>5023</replaceable> 端口 - 被用于转发 <hostid>localhost</hostid> 的连接到远程主机的 + <para>本例中, 位于 <systemitem>localhost</systemitem> 的 <replaceable>5023</replaceable> 端口 + 被用于转发 <systemitem>localhost</systemitem> 的连接到远程主机的 <replaceable>23</replaceable> 端口。 由于 <replaceable>23</replaceable> 是 <application>telnet</application> 使用的, 因此它将通过 SSH 隧道完成 <application>telnet</application> 会话。</para> @@ -2970,7 +2916,7 @@ Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) <example> <title>使用 SSH 为 SMTP 创建安全隧道</title> - <screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>5025:localhost:25 user@mailserver.example.com</replaceable></userinput> + <screen>&prompt.user; <userinput>ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com</userinput> user@mailserver.example.com's password: <userinput>*****</userinput> &prompt.user; <userinput>telnet localhost 5025</userinput> Trying 127.0.0.1... @@ -2997,13 +2943,13 @@ Escape character is '^]'. 解决方法是创建一个到办公室 SSH 服务器的连接, 并通过这个连接来访问 POP3 服务:</para> - <screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>2110:mail.example.com:110 user@ssh-server.example.com</replaceable></userinput> + <screen>&prompt.user; <userinput>ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com</userinput> user@ssh-server.example.com's password: <userinput>******</userinput></screen> <para>当这个通道连上时, 您可以把 POP3 请求发到 - <hostid>localhost</hostid> 端口 2110。 + <systemitem>localhost</systemitem> 端口 2110。 这个连接将通过通道安全地转发到 - <hostid>mail.example.com</hostid>。</para> + <systemitem>mail.example.com</systemitem>。</para> </sect4> <sect4> @@ -3022,12 +2968,12 @@ user@ssh-server.example.com's password: <userinput>******</userinput></screen> <para>解决方法是建立一个到您的网络的防火墙之外的网络上的 SSH 服务器, 并通过它提供的通道连接到 Ogg Vorbis 服务器上。</para> - <screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>8888:music.example.com:8000 user@unfirewalled-system.example.org</replaceable></userinput> + <screen>&prompt.user; <userinput>ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org</userinput> user@unfirewalled-system.example.org's password: <userinput>*******</userinput></screen> <para>现在您可以把客户程序指定到 - <hostid>localhost</hostid> 的 8888 端口, 它将把请求转发给 - <hostid>music.example.com</hostid> 的 8000 + <systemitem>localhost</systemitem> 的 8888 端口, 它将把请求转发给 + <systemitem>music.example.com</systemitem> 的 8000 端口, 从而绕过防火墙。</para> </sect4> </sect3> @@ -3038,13 +2984,13 @@ user@unfirewalled-system.example.org's password: <userinput>*******</userinput>< <para>通常限制哪些用户能够登录, 以及从何处登录会是好主意。 采用 <literal>AllowUsers</literal> 选项能够方便地达到这一目的。 - 例如, 想要只允许 <username>root</username> 用户从 - <hostid role="ipaddr">192.168.1.32</hostid> 登录, 就可以在 + 例如, 想要只允许 <systemitem class="username">root</systemitem> 用户从 + <systemitem class="ipaddress">192.168.1.32</systemitem> 登录, 就可以在 <filename>/etc/ssh/sshd_config</filename> 文件中加入下述设置:</para> <programlisting>AllowUsers root@192.168.1.32</programlisting> - <para>要允许用户 <username>admin</username> 从任何地方登录, + <para>要允许用户 <systemitem class="username">admin</systemitem> 从任何地方登录, 则只需列出用户名:</para> <programlisting>AllowUsers admin</programlisting> @@ -3066,25 +3012,21 @@ user@unfirewalled-system.example.org's password: <userinput>*******</userinput>< <sect2> <title>进一步的资料</title> - <para><ulink url="http://www.openssh.com/">OpenSSH</ulink></para> + <para><link xlink:href="http://www.openssh.com/">OpenSSH</link></para> <para>&man.ssh.1; &man.scp.1; &man.ssh-keygen.1; &man.ssh-agent.1; &man.ssh-add.1; &man.ssh.config.5;</para> <para>&man.sshd.8; &man.sftp-server.8; &man.sshd.config.5;</para> </sect2> </sect1> - <sect1 id="fs-acl"> - <sect1info> + <sect1 xml:id="fs-acl"> + <info><title>文件系统访问控制表</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>作者 </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>作者 </contrib></author> </authorgroup> - </sect1info> + </info> - <title>文件系统访问控制表</title> + <indexterm> <primary>ACL</primary> @@ -3158,10 +3100,7 @@ drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> - <para>这里我们看到了 <filename - class="directory">directory1</filename>、 <filename - class="directory">directory2</filename>, 以及 <filename - class="directory">directory3</filename> + <para>这里我们看到了 <filename>directory1</filename>、 <filename>directory2</filename>, 以及 <filename>directory3</filename> 目录使用了 <acronym>ACL</acronym>。 而 <filename>public_html</filename> 则没有。</para> @@ -3172,7 +3111,7 @@ drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> &man.getfacl.1; 工具来查看。 例如, 如果想查看 <filename>test</filename> 的 <acronym>ACL</acronym> 设置, 所用的命令是:</para> - <screen>&prompt.user; <userinput>getfacl <filename>test</filename></userinput> + <screen>&prompt.user; <userinput>getfacl test</userinput> #file: #owner:1001 #group:1001 @@ -3183,36 +3122,32 @@ drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> <para>要修改这个文件上的 <acronym>ACL</acronym> 设置, 则需要使用 &man.setfacl.1; 工具。 例如:</para> - <screen>&prompt.user; <userinput>setfacl -k <filename>test</filename></userinput></screen> + <screen>&prompt.user; <userinput>setfacl -k test</userinput></screen> <para><option>-k</option> 参数将把所有当前定义的 <acronym>ACL</acronym> 从文件或文件系统中删除。 一般来说应该使用 <option>-b</option> 因为它会保持让 <acronym>ACL</acronym> 正常工作的那些项不变。</para> - <screen>&prompt.user; <userinput>setfacl -m u:trhodes:rwx,group:web:r--,o::--- <filename>test</filename></userinput></screen> + <screen>&prompt.user; <userinput>setfacl -m u:trhodes:rwx,group:web:r--,o::--- test</userinput></screen> <para>在前面的命令中, <literal>-m</literal> 选项被用来修改默认的 <acronym>ACL</acronym> 项。由于已经被先前的命令 删除,因此没有预先定义的项,于是默认的选项被恢复,并附加上指定的选项。 请小心地检查,如果您加入了一个不存在的用户或组,那么将会在 - <devicename>stdout</devicename> 得到一条 <errorname>Invalid argument</errorname> + <filename>stdout</filename> 得到一条 <errorname>Invalid argument</errorname> 的错误提示。</para> </sect2> </sect1> - <sect1 id="security-portaudit"> - <sect1info> + <sect1 xml:id="security-portaudit"> + <info><title>监视第三方安全问题</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Contributed by </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Contributed by </contrib></author> </authorgroup> - </sect1info> + </info> - <title>监视第三方安全问题</title> + <indexterm> <primary>Portaudit</primary> @@ -3229,7 +3164,7 @@ drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> 并警告管理员存在已知的安全问题的方法也就应运而生。 名为 <application>Portaudit</application> 的 &os; 附加工具能够帮助您达成这一目的。</para> - <para><filename role="package">ports-mgmt/portaudit</filename> port + <para><package>ports-mgmt/portaudit</package> port 会下载一个数据库, 这一数据库是由 &os; Security Team 和 ports 开发人员维护的, 其中包含了已知的安全问题。</para> @@ -3241,7 +3176,7 @@ drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting> <para>在安装过程中, &man.periodic.8; 的配置文件将被修改, 以便让 <application>Portaudit</application> 能够在每天的安全审计过程中运行。 - 一定要保证发到 <username>root</username> 帐号的每日安全审计邮件确实有人在读。 + 一定要保证发到 <systemitem class="username">root</systemitem> 帐号的每日安全审计邮件确实有人在读。 除此之外不需要进行更多的配置了。</para> <para>安装完成之后, 管理员可以通过下面的命令来更新数据库, @@ -3282,18 +3217,14 @@ You are advised to update or deinstall the affected package(s) immediately.</pro 来非常有效地工作。</para> </sect1> - <sect1 id="security-advisories"> - <sect1info> + <sect1 xml:id="security-advisories"> + <info><title>&os; 安全公告</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>作者 </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>作者 </contrib></author> </authorgroup> - </sect1info> + </info> - <title>&os; 安全公告</title> + <indexterm> <primary>FreeBSD 安全公告</primary> @@ -3314,13 +3245,13 @@ You are advised to update or deinstall the affected package(s) immediately.</pro FreeBSD-SA-XX:XX.UTIL Security Advisory The FreeBSD Project -Topic: denial of service due to some problem<co id="co-topic"/> +Topic: denial of service due to some problem<co xml:id="co-topic"/> -Category: core<co id="co-category"/> -Module: sys<co id="co-module"/> -Announced: 2003-09-23<co id="co-announce"/> -Credits: Person<co id="co-credit"/> -Affects: All releases of &os;<co id="co-affects"/> +Category: core<co xml:id="co-category"/> +Module: sys<co xml:id="co-module"/> +Announced: 2003-09-23<co xml:id="co-announce"/> +Credits: Person<co xml:id="co-credit"/> +Affects: All releases of &os;<co xml:id="co-affects"/> &os; 4-STABLE prior to the correction date Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE) 2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6) @@ -3330,33 +3261,33 @@ Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE) 2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21) 2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33) 2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43) - 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39)<co id="co-corrected"/> -<acronym>CVE</acronym> Name: CVE-XXXX-XXXX<co id="co-cve"/> + 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39)<co xml:id="co-corrected"/> +<acronym>CVE</acronym> Name: CVE-XXXX-XXXX<co xml:id="co-cve"/> For general information regarding FreeBSD Security Advisories, including descriptions of the fields above, security branches, and the following sections, please visit http://www.FreeBSD.org/security/. -I. Background<co id="co-backround"/> +I. Background<co xml:id="co-backround"/> -II. Problem Description<co id="co-descript"/> +II. Problem Description<co xml:id="co-descript"/> -III. Impact<co id="co-impact"/> +III. Impact<co xml:id="co-impact"/> -IV. Workaround<co id="co-workaround"/> +IV. Workaround<co xml:id="co-workaround"/> -V. Solution<co id="co-solution"/> +V. Solution<co xml:id="co-solution"/> -VI. Correction details<co id="co-details"/> +VI. Correction details<co xml:id="co-details"/> -VII. References<co id="co-ref"/></programlisting> +VII. References<co xml:id="co-ref"/></programlisting> <calloutlist> @@ -3397,7 +3328,7 @@ VII. References<co id="co-ref"/></programlisting> <callout arearefs="co-affects"> <para>The <literal>Affects</literal>(影响范围) 一栏给出了 &os; 的哪些版本存在这个漏洞。 对于内核来说, 检视受影响的文件上执行的 <command>ident</command> 输出可以帮助确认文件版本。 - 对于 ports, 版本号在 <filename class="directory">/var/db/pkg</filename> + 对于 ports, 版本号在 <filename>/var/db/pkg</filename> 里面的 port 的名字后面列出。 如果系统没有与 &os; <acronym>CVS</acronym> 代码库同步并每日构建, 它很可能是有问题的。</para> @@ -3454,18 +3385,14 @@ VII. References<co id="co-ref"/></programlisting> </sect2> </sect1> - <sect1 id="security-accounting"> - <sect1info> + <sect1 xml:id="security-accounting"> + <info><title>进程记帐</title> <authorgroup> - <author> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - <contrib>Contributed by </contrib> - </author> + <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Contributed by </contrib></author> </authorgroup> - </sect1info> + </info> - <title>进程记帐</title> + <indexterm> <primary>进程记帐</primary> @@ -3486,11 +3413,11 @@ VII. References<co id="co-ref"/></programlisting> <para>在使用进程记帐之前, 必须先启用它。 要完成这项工作, 需要运行下面的命令:</para> - <screen>&prompt.root; <userinput>touch <filename>/var/account/acct</filename></userinput> + <screen>&prompt.root; <userinput>touch /var/account/acct</userinput> -&prompt.root; <userinput>accton <filename>/var/account/acct</filename></userinput> +&prompt.root; <userinput>accton /var/account/acct</userinput> -&prompt.root; <userinput>echo 'accounting_enable="YES"' >> <filename>/etc/rc.conf</filename></userinput></screen> +&prompt.root; <userinput>echo 'accounting_enable="YES"' >> /etc/rc.conf</userinput></screen> <para>一旦启用之后, 记帐就会开始跟踪 <acronym>CPU</acronym> 统计数据、 命令, 等等。 @@ -3506,9 +3433,9 @@ VII. References<co id="co-ref"/></programlisting> 上的用户信息, 例如:</para> <screen>&prompt.root; <userinput>lastcomm ls - <username>trhodes</username> ttyp1</userinput></screen> + trhodes ttyp1</userinput></screen> - <para>将会显示出所有已知的 <username>trhodes</username> + <para>将会显示出所有已知的 <systemitem class="username">trhodes</systemitem> 在 <literal>ttyp1</literal> 终端上执行 <command>ls</command> 的情况。</para> <para>更多的可用选项在联机手册 |