aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2005-08-28 17:17:20 +0000
committerXin LI <delphij@FreeBSD.org>2005-08-28 17:17:20 +0000
commit85335cc27681d55fdb11413eeefadf6dd046a511 (patch)
tree0ab1c3135ec01634539ed6e7bd69931de89c36be /zh_CN.GB2312/books/handbook
parent5efddcf35f4a7be43694afea89b06781427aea48 (diff)
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook')
-rw-r--r--zh_CN.GB2312/books/handbook/security/chapter.sgml238
1 files changed, 152 insertions, 86 deletions
diff --git a/zh_CN.GB2312/books/handbook/security/chapter.sgml b/zh_CN.GB2312/books/handbook/security/chapter.sgml
index 7e1baf5111..550194d970 100644
--- a/zh_CN.GB2312/books/handbook/security/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/security/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.266
+ Original Revision: 1.281
$FreeBSD$
-->
@@ -56,12 +56,12 @@
</listitem>
<listitem>
- <para>如何在 &os; 5.0 以前的版本上设置
+ <para>如何在 &os;&nbsp;5.0 以前的版本上设置
<application>KerberosIV</application>。</para>
</listitem>
<listitem>
- <para>如何在 &os; 5.0 或更高版本上设置
+ <para>如何在 &os;&nbsp;5.0 或更高版本上设置
<application>Kerberos5</application>。</para>
</listitem>
@@ -899,7 +899,7 @@
&os; 基本系统的一部分, 包含这一特性的操作系统也日益增多。
S/Key 是 Bell Communications Research, Inc. 的注册商标。</para>
- <para>从 &os; 的 5.0 版开始, S/Key 被功能相同的
+ <para>从 &os;&nbsp;5.0 版开始, S/Key 被功能相同的
OPIE (One-time Passwords In Everything) 取代了。
OPIE 默认使用 MD5 散列。</para>
@@ -1185,7 +1185,7 @@ Enter secret pass phrase: <userinput>&lt;secret password&gt;</userinput>
并给出了更详细的使用这一配置文件时在安全方面需要注意的事项。</para>
<para>如果没有 <filename>/etc/skey.access</filename> 这个文件
- (在 &os; 4.X 系统上这是默认的), 那么所有的用户都可以使用
+ (在 &os;&nbsp;4.X 系统上这是默认的), 那么所有的用户都可以使用
&unix; 口令。 然而如果它存在,
所有的用户将被要求使用 S/Key,
除非明确地在
@@ -1216,7 +1216,7 @@ permit port ttyd0</programlisting>
<para>OPIE 可以像 S/Key 一样对 &unix; 口令的使用进行基于 IP 的登录限制。
对应的文件是 <filename>/etc/opieaccess</filename>, 在
- 在 &os; 5.0 和更高版本的系统中, 默认情况下它就已经存在了。
+ 在 &os;&nbsp;5.0 和更高版本的系统中, 默认情况下它就已经存在了。
请参阅 &man.opieaccess.5; 以了解关于这个文件进一步的情况,
以及安全方面需要进行的一些考虑。</para>
@@ -2050,8 +2050,8 @@ kadmind5_server_enable="YES"
kerberos_stash="YES"</programlisting>
<note>
- <para><option>kerberos_stash</option> 只在
- &os; 4.X 上使用。</para>
+ <para><option>kerberos_stash</option> 只能在
+ &os;&nbsp;4.X 上使用。</para>
</note>
<para>接下来需要修改 <application>Kerberos</application>
@@ -2088,7 +2088,7 @@ kerberos_stash="YES"</programlisting>
_kerberos._tcp IN SRV 01 00 88 kerberos.example.org.
_kpasswd._udp IN SRV 01 00 464 kerberos.example.org.
_kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org.
-_kerberos IN TXT EXAMPLE.ORG.</programlisting></note>
+_kerberos IN TXT EXAMPLE.ORG</programlisting></note>
<note>
<para>要让客户机能够找到
@@ -2730,26 +2730,28 @@ An optional company name []:<userinput><replaceable>Another Name</replaceable></
以及使用的加密算法等等。 这些选项的完整列表,
可以在 &man.openssl.1; 联机手册中找到。</para>
- <para>上述命令执行完之后应该会在当前目录生成一个 <filename>cert.pem</filename>
- 文件。 这就是刚刚生成的证书, 您可以把它发给任意一家
- <acronym>CA</acronym> 进行签署。</para>
+ <para>在您执行前述命令的目录中将生成两个文件。
+ 证书申请, 即 <filename>req.pem</filename>,
+ 可以发给一家发证机构, 它将验证您输入的凭据的真实性,
+ 并对申请进行签名, 再把证书返还给您。
+ 第二个文件的名字将是 <filename>cert.pem</filename>,
+ 它包含了证书的私钥, 应被全力保护;
+ 如果它落入别人手中, 则可以被用来伪造您
+ (或您的服务器)。</para>
<para>如果不需要来自 <acronym>CA</acronym> 的签名,
也可以创建自行签名的证书。 首先,
需要生成 <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 <filename>myRSA.key</filename> 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 <filename>myca.key</filename> <filename>myRSA.key</filename></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 <filename>myca.key</filename> -out <filename>new.crt</filename></userinput></screen>
<para>上述步骤将在当前目录中生成两个新文件:
一个是权威发证机构的签名文件, <filename>myca.key</filename>;
@@ -3153,10 +3155,10 @@ options IPSEC_DEBUG #debug for IP security
<para>对于 gif 设备的支持必须在两台网关机上编译进 &os; 内核。
可以通过添加下面的设置来达到目的:</para>
- <programlisting>pseudo-device gif</programlisting>
-
+ <programlisting>device gif</programlisting>
+
<para>到两边的内核配置文件中, 并重新编译、 安装和启动它们。</para>
-
+
<para>配置隧道可以分为两步来完成。 首先隧道必须被告知外部的
(或公网的) IP 地址, 可以通过 &man.gifconfig.8; 来完成这步。
私网 IP 地址则必须使用 &man.ifconfig.8; 来配置。</para>
@@ -3383,17 +3385,17 @@ options IPSEC_ESP
这一点和 <command>netstat -r</command>
类似。</para>
- <para>FreeBSD 上用于管理安全关联的可供选择的服务程序有很多。
- 这篇文章将介绍如何使用其中的一种, racoon。
- racoon 可以从 FreeBSD ports collection 安装,
- 它位于 security/ 分类下。 安装方法与其他软件无异。</para>
+ <para>在 FreeBSD 上可供选择的用于管理安全关联的服务程序有很多。
+ 这篇文章将介绍其中的一种, racoon&nbsp;&mdash;。 它可以从
+ &os; 的 Ports collection 中的
+ <filename role="package">security/racoon</filename> 安装。</para>
<indexterm>
<primary>racoon</primary>
</indexterm>
- <para>racoon 需要在两台网关机上都运行。
- 需要配置 VPN 另一端的 IP, 以及一个密钥
+ <para><filename role="package">security/racoon</filename> 软件,
+ 必须在两台网关机上都运行。 需要配置 VPN 另一端的 IP, 以及一个密钥
(这个密钥可以任意选择, 但两个网关上的密钥必须一致)。</para>
<para>两端的服务程序将相互通讯, 并确认它们各自的身份 (使用刚刚配置的密钥)
@@ -3401,13 +3403,13 @@ options IPSEC_ESP
它们定期地改变密钥, 因此即使供给者破解了一个密钥 (虽然这在理论上并不十分可行)
他也得不到什么 -- 破解密钥的时候, 已经产生一组新的密钥了。</para>
- <para>racoon 的配置保存在
- <filename>${PREFIX}/etc/racoon</filename> 中。
+ <para>racoon 的配置文件是存放在
+ <filename>${PREFIX}/etc/racoon</filename> 目录中的。
在那里应该能够找到一个配置文件, 不需要修改太多的设置。
raccon 配置的另一部分, 也就是需要修改的内容,
是 <quote>预先配置的共享密钥</quote>。</para>
-
- <para>默认的 racoon 配置文件应该可以在
+
+ <para>默认的 racoon 配置应该可以在
<filename>${PREFIX}/etc/racoon/psk.txt</filename> 这个文件中找到。
需要强调的是, 这个密钥 <emphasis>并非</emphasis> 用于加密 VPN 连接的密钥,
他们只是密钥管理服务程序用以信任对方的一种凭据。</para>
@@ -3518,7 +3520,7 @@ ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
这个包将通过 Internet 传递。</para>
<para>很明显地, 我们希望 VPN 之间的通讯是加密的。
- 用语言来描述大致是:</para>
+ 用于言来描述大致是:</para>
<para><quote>如果包从 <hostid
role="ipaddr">A.B.C.D</hostid> 发出且其目的地是 <hostid
@@ -3775,8 +3777,11 @@ ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D
<secondary>启用</secondary>
</indexterm>
- <para>确信已将下面这行加入了
- <filename>rc.conf</filename> 文件:</para>
+ <para>在 &os;&nbsp;4.X 上,
+ <application>sshd</application> 服务是默认启用的,
+ 而在 &os;&nbsp;5.X 上则是在安装过程中由用户指定。
+ 要查看它是否已被启用,
+ 请检查 <filename>rc.conf</filename> 文件中的:</para>
<screen>sshd_enable="YES"</screen>
<para>将在下次启动系统时加载 <application>OpenSSH</application> 的 &man.sshd.8; 服务程序。
另外, 也可以简单地使用 <command>sshd</command> 来直接启动
@@ -3809,12 +3814,13 @@ user@example.com's password: <userinput>*******</userinput></screen>
指纹保存在 <filename>~/.ssh/known_hosts</filename> 中, 对于 SSH v2 指纹, 则是
<filename>~/.ssh/known_hosts2</filename>。</para>
- <para>默认情况下, <application>OpenSSH</application> 服务器只接受
- SSH v2 连接。 然而, 客户端可以自行选择协议的版本 1 和 2 之一。
- 广为人知的一个事实是, 第 2 版的协议要更加健壮和安全。</para>
-
- <para>通过 <option>-1</option> 或 <option>-2</option> 参数,
- 可以强制 &man.ssh.1; 使用 v1 或 v2 的协议。</para>
+ <para>默认情况下, 较新版本的
+ <application>OpenSSH</application> 只接受 SSH v2
+ 连接。 如果能用版本 2 则客户程序会自动使用,
+ 否则它会返回使用版本 1 的模式。 此外,
+ 也可以通过命令行参数 <option>-1</option> 或
+ <option>-2</option> 来相应地强制使用版本 1 或 2。
+ 保持客户端的版本 1 能力是为了考虑较早版本的兼容性。</para>
</sect2>
<sect2>
@@ -3865,54 +3871,82 @@ COPYRIGHT 100% |*****************************| 4735
选项提供了更多的配置选择。</para>
</sect2>
- <sect2>
+ <sect2 id="security-ssh-keygen">
<title>ssh-keygen</title>
- <para>&man.ssh-keygen.1; 可以被用来生成
- RSA 密钥对来代替使用口令验证用户的身份:</para>
-
- <screen>&prompt.user; <userinput>ssh-keygen -t <replaceable>rsa1</replaceable></userinput>
-Initializing random number generator...
-Generating p: .++ (distance 66)
-Generating q: ..............................++ (distance 498)
-Computing the keys...
-Key generation complete.
-Enter file in which to save the key (/home/user/.ssh/identity):
-Enter passphrase:
-Enter the same passphrase again:
-Your identification has been saved in /home/user/.ssh/identity.
-...</screen>
-
- <para>&man.ssh-keygen.1; 将产生一个公私密钥对来用于验证身份。
- 私钥被保存到
- <filename>~/.ssh/identity</filename>, 而公钥则保存到
- <filename>~/.ssh/identity.pub</filename>。
- 远程机器上的 <filename>~/.ssh/authorized_keys</filename>
- 中必须有对应的公钥, 才能够完成身份验证过程。</para>
-
- <para>这将允许从远程以基于 RSA 的验证来代替口令验证连接到本机上。</para>
-
- <note><para>使用 <option>-t rsa1</option> 这个选项将创建用于 第1版 SSH 协议的
- RSA 密钥对。 如果您希望使用用于 SSH 第2版协议的 RSA密钥对, 则应使用
- <command>ssh-keygen -t rsa</command> 这个命令。</para></note>
+ <para>用于取代口令的一种方法是使用 &man.ssh-keygen.1; 来生成
+ DSA 或 RSA 密钥对用于验证用户的身份:</para>
+
+ <screen>&prompt.user; <userinput>ssh-keygen -t <replaceable>dsa</replaceable></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'.
+Enter passphrase (empty for no passphrase):
+Enter same passphrase again:
+Your identification has been saved in /home/user/.ssh/id_dsa.
+Your public key has been saved in /home/user/.ssh/id_dsa.pub.
+The key fingerprint is:
+bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com
+</screen>
+
+ <para>&man.ssh-keygen.1; 会生成一个包含公私钥对用于验证身份。 私钥将保存到
+ <filename>~/.ssh/id_dsa</filename> 或
+ <filename>~/.ssh/id_rsa</filename>, 而公钥则被存放到
+ <filename>~/.ssh/id_dsa.pub</filename> 或
+ <filename>~/.ssh/id_rsa.pub</filename>, 文件名取决于您选择的 DSA 和
+ RSA 密钥类型。 公钥必须被存放到远程机器上的
+ <filename>~/.ssh/authorized_keys</filename> 才能够使系统正确运转。
+ 类似地, 第 1 版的 RSA 公钥应存放到
+ <filename>~/.ssh/authorized_keys</filename>。</para>
+
+ <para>这将允许从远程连接时以基于
+ SSH 密钥的验证来代替口令验证。</para>
<para>如果在 &man.ssh-keygen.1; 中使用了通行字,
- 则每次使用私钥时都需要输入它。</para>
+ 则每次使用私钥时都需要输入它。 &man.ssh-agent.1;
+ 能够缓解多次输入长通行字的压力, 并将在接下来的
+ <xref linkend="security-ssh-agent"> 予以详述。</para>
+
+ <warning><para>选项和配置文件可能随 <application>OpenSSH</application>
+ 的版本不同而不同; 为了避免出现问题,
+ 您应参考 &man.ssh-keygen.1; 联机手册。</para></warning>
+ </sect2>
+
+ <sect2 id="security-ssh-agent">
+ <title>ssh-agent 和 ssh-add</title>
+
+ <para>&man.ssh-agent.1; 和 &man.ssh-add.1; 这两个工具,
+ 提供了一种将 <application>SSH</application> 秘要加载到内存中以便使用,
+ 而不必每次都输入通行字的方法。</para>
+
+ <para>&man.ssh-agent.1; 工具能够使用加载到其中的私钥来处理验证过程。
+ &man.ssh-agent.1; 应被用于启动另一个应用程序。 最基本的用法是,
+ 使用它来启动 shell, 而高级一些的用法则是用它来启动窗口管理器。<para>
- <para>另外, 还可以使用 <command>ssh-keygen -t dsa</command> 来创建一个用于第2版
- SSH 协议的 DSA 密钥。
- 这将生成一对 DSA 公/私钥, 并且只能用于第2版的 SSH 协议会话。
- 公钥将保存为 <filename>~/.ssh/id_dsa.pub</filename>,
- 而私钥保存为 <filename>~/.ssh/id_dsa</filename>。</para>
+ <para>要在 shell 中使用 &man.ssh-agent.1;, 首先应把 shell
+ 作为参数来启动它。 随后, 应通过 &man.ssh-add.1; 并输入通行字,
+ 来向它提供身份验证信息。 一旦这些步骤都做完了,
+ 用户就应该能够 &man.ssh.1; 到任何一个安装了对应公钥的机器了。
+ 例如:</para>
- <para>DSA 公钥也应该放到远程主机的
- <filename>~/.ssh/authorized_keys</filename> 里面。</para>
+ <screen>&prompt.user; ssh-agent <replaceable>csh</replaceable>
+&prompt.user; ssh-add
+Enter passphrase for /home/user/.ssh/id_dsa:
+Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
+&prompt.user;</screen>
+
+ <para>要在 X11 中使用 &man.ssh-agent.1;, 调用
+ &man.ssh-agent.1; 的过程应置于
+ <filename>~/.xinitrc</filename> 之中。 这将把
+ &man.ssh-agent.1; 服务提供给所有在 X11 中运行的程序。
+ 下面是一个 <filename>~/.xinitrc</filename> 文件的实例:</para>
- <para>&man.ssh-agent.1; 和 &man.ssh-add.1; 是用于管理多个受密码保护的私钥的工具。</para>
+ <programlisting>exec ssh-agent <replaceable>startxfce4</replaceable></programlisting>
- <warning><para>随版本的不同, <application>OpenSSH</application>
- 可能会使用不同的文件和选项。
- 为了避免出现问题, 请参考 &man.ssh-keygen.1; 联机手册。</para></warning>
+ <para>这将启动 &man.ssh-agent.1;, 而后者将在每次 X11
+ 启动时运行 <application>XFCE</application>。
+ 作完这些之后就可以重启 X11 以便使修改生效。
+ 随后您就可以运行 &man.ssh-add.1; 来加载全部 SSH 密钥了。</para>
</sect2>
<sect2 id="security-ssh-tunneling">
@@ -4058,11 +4092,42 @@ user@unfirewalled-system.example.org's password: <userinput>*******</userinput><
</sect2>
<sect2>
+ <title>允许用户登录 <varname>AllowUsers</varname> 选项</title>
+
+ <para>通常限制哪些用户能够登录, 以及从何处登录会是好主意。
+ 采用 <literal>AllowUsers</literal> 选项能够方便地达到这一目的。
+ 例如, 想要只允许 <username>root</username> 用户从
+ <hostid role="ipaddr">192.168.1.32</hostid> 登录, 就可以在
+ <filename>/etc/ssh/sshd_config</filename> 文件中加入下述设置:</para>
+
+ <programlisting>AllowUsers root@192.168.1.32</programlisting>
+
+ <para>要允许用户 <username>admin</username> 从任何地方登录,
+ 则只需列出用户名:</para>
+
+ <programlisting>AllowUsers admin</programlisting>
+
+ <para>可以在同一行指定多个用户, 例如:</para>
+
+ <programlisting>AllowUsers root@192.168.1.32 admin</programlisting>
+
+ <note>
+ <para>列出需要登录机器的用户很重要; 否则他们将被锁在外面。</para>
+ </note>
+
+ <para>在完成对
+ <filename>/etc/ssh/sshd_config</filename> 的修改之后您必须告诉
+ &man.sshd.8; 重新加载其配置文件, 方法是执行:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/sshd reload</userinput></screen>
+ </sect2>
+
+ <sect2>
<title>进一步的资料</title>
<para><ulink url="http://www.openssh.com/">OpenSSH</ulink></para>
- <para>&man.ssh.1; &man.scp.1; &man.ssh-keygen.1;
- &man.ssh-agent.1; &man.ssh-add.1;</para>
- <para>&man.sshd.8; &man.sftp-server.8;</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>
@@ -4081,7 +4146,7 @@ user@unfirewalled-system.example.org's password: <userinput>*******</userinput><
</indexterm>
<title>文件系统访问控制表</title>
- <para>与文件系统在其他方面的加强, 如快照等一道, FreeBSD 5.0
+ <para>与文件系统在其他方面的加强, 如快照等一道, &os;&nbsp;5.0
及更高版本提供了通过文件系统访问控制表
(<acronym>ACLs</acronym>) 实现的安全机制。</para>
@@ -4229,7 +4294,8 @@ drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html</programlisting>
<para>在安装过程中,
&man.periodic.8; 的配置文件将被修改, 以便让
<application>Portaudit</application> 能够在每天的安全审计过程中运行。
- 不需要进行更多的配置了。</para>
+ 一定要保证发到 <username>root</username> 帐号的每日安全审计邮件确实有人在读。
+ 除此之外不需要进行更多的配置了。</para>
<para>安装完成之后, 管理员必须通过运行下面的命令,
来更新保存在本地
@@ -4465,7 +4531,7 @@ VII. References<co id="co-ref"></programlisting>
<sect2>
<title>启用并利用进程记帐</title>
- <para>在使用进程记帐之前, 管理员必须启用它。
+ <para>在使用进程记帐之前, 必须先启用它。
要完成这项工作, 需要运行下面的命令:</para>
<screen>&prompt.root; <userinput>touch <filename>/var/account/acct</filename></userinput>