diff options
author | Xin LI <delphij@FreeBSD.org> | 2005-08-28 17:17:20 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2005-08-28 17:17:20 +0000 |
commit | 85335cc27681d55fdb11413eeefadf6dd046a511 (patch) | |
tree | 0ab1c3135ec01634539ed6e7bd69931de89c36be /zh_CN.GB2312/books/handbook | |
parent | 5efddcf35f4a7be43694afea89b06781427aea48 (diff) |
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook')
-rw-r--r-- | zh_CN.GB2312/books/handbook/security/chapter.sgml | 238 |
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; 5.0 以前的版本上设置 <application>KerberosIV</application>。</para> </listitem> <listitem> - <para>如何在 &os; 5.0 或更高版本上设置 + <para>如何在 &os; 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; 5.0 版开始, S/Key 被功能相同的 OPIE (One-time Passwords In Everything) 取代了。 OPIE 默认使用 MD5 散列。</para> @@ -1185,7 +1185,7 @@ Enter secret pass phrase: <userinput><secret password></userinput> 并给出了更详细的使用这一配置文件时在安全方面需要注意的事项。</para> <para>如果没有 <filename>/etc/skey.access</filename> 这个文件 - (在 &os; 4.X 系统上这是默认的), 那么所有的用户都可以使用 + (在 &os; 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; 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; 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 —。 它可以从 + &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; 4.X 上, + <application>sshd</application> 服务是默认启用的, + 而在 &os; 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; 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> |