实用Unix和互联网安全,第二版

作者:Dan Wilder
Practical Unix and Internet Security, Second Edition
  • 书名:实用Unix与互联网安全,第二版

  • 作者:Simson Garfinkel 和 Gene Spafford

  • 出版社:O'Reilly & Associates, Inc. 1996年

  • ISBN:1-56592-148-8

  • 页数:971

  • 价格:美国 $39.95,加拿大 $56.95

  • 评论者:Dan Wilder

实用Unix与互联网安全 是O'Reilly 著名的 实用Unix安全 的大幅修订和增强的第二版。本书相当于一门概览课程,涵盖了从基础到高级主题的所有内容,并非总是同等深入,但足以让您在需要处理新主题或您有些生疏的主题时,朝着正确的方向开始。您可能需要额外的资源。末尾 47 页注释详尽的参考书目和资源列表应能极大地帮助您进行深入阅读、联系等。

重点在于理解原理。实施适当且精心设计的安全策略留给读者自行练习。这很好,因为不太可能有任何通用性值得一提的现成方法。有用的策略可能因站点而异,也可能因时而异。没有哪本书能够详尽地涵盖所有情况和所有种类的Unix。本书旨在提供开展此类工作所需的广泛背景和视角。我相信作者很好地完成了他们的任务。尽管总体方法非常通用,但还是给出了许多详细的程序示例,以说明和锚定讨论,并为Unix新手提供一个开始处理这个相当复杂的主题的起点。太多关于计算的书籍从未深入到具体的层面,它们的教训可能会让那些最能从中受益的人迷失方向。本书避免了这种缺陷。事实上,经验丰富的读者可能会跳过许多示例,同时欣赏在示例之间发现的见解和兴趣点。本书的开头讨论了Unix基础知识:文件系统、权限、设备、用户和密码。这几章的大部分内容也花在了组织问题上。这是恰当的,因为Unix安全不仅仅是一个技术问题,而且还具有重要的社会维度。因此,此处简要介绍了策略、历史和风险评估。这种常识性方法体现在以下段落中(第44页):

成功进行风险评估的关键是识别系统中所有可能的威胁,但只防御您认为实际存在的威胁。 关于高级主题的章节包括

  • 密码学

  • 电话安全

  • UUCP

  • TCP/IP 网络

  • TCP/IP 服务

  • WWW 安全

  • RPC、NIS、NIS+ 和 Kerberos

  • NFS

  • 防火墙

  • 包装器和代理

  • 安全SUID和网络程序

以及关于处理安全事件的完整章节。附录中有一些非常好的安全检查清单。

我发现提供的大部分信息都是准确和最新的,当然并非总是完整。但也存在一些例外。例如,在关于UUCP的章节中(第421页)

UUCP的设计和优化是为了低速连接。当与能够以 14.4 Kbps 或更快的速率传输的调制解调器一起使用时,协议变得越来越低效。

作者对历史悠久的UUCP的看法或许是正确的,不幸的是,这代表了许多供应商目前正在销售的产品。现代的UUCP,例如大多数Linux发行版中存在的Taylor UUCP,即使在相同的连接上,也能与最快的竞争文件传输方法一较高下。如果不是因为作者在本章中对UUCP采取了负面语气,我会将此归结为只是没有被纳入的信息。在后面的章节中,在提供安装和维护防火墙费用的替代方案时,作者最终触及了UUCP冰山一角(第668页)

使用硬连线的UUCP连接在您的内部网络和Internet之间传输电子邮件。此连接将允许您的员工与其他站点交换与工作相关的电子邮件,但不会将您的网络暴露于基于IP的攻击。

答对了!这是西雅图地区以及毫无疑问的其他地方的许多企业和个人使用UUCP作为部分或全部电子邮件服务的原因之一。可惜的是,当他们劝阻我们甚至不要考虑UUCP时,却没有提及这一点。在第704页,可以找到Linux和GNU实用程序与其他一些实用程序的有趣的比较。作者引用了一项使用名为“fuzz”的程序的研究,该程序在遇到随机输入时会导致Unix实用程序崩溃。超过四分之一的标准Unix实用程序崩溃了,而测试的Linux(主要是GNU)实用程序中崩溃的比例不到十分之一。尽管所有商业供应商都收到了这些测试的结果,但几年后的重新测试给出了类似的结果。虽然十分之一的实用程序仍然相当高,但这证明了自由软件,尤其是GNU,所达到的水平明显低于商业系统。然而,得出的含义并不那么有趣。作者正确地指出,许多会导致程序在随机输入时崩溃的相同问题,将使熟练的攻击者能够利用崩溃的机制(例如缓冲区溢出和数组边界违规)来获得程序作者或安装者未预料到的行为。贯穿本书的是对软件质量的讨论,这是一个我非常关心的问题。Garfinkel和Spafford在引言中提到了这些(第17-18页):@quote:[ ... ] 软件设计人员没有从过去的错误中吸取教训。例如,缓冲区溢出...长期以来一直被认为是Unix的主要问题,但仍然不断发现软件包含此类错误,并且在编写新软件时没有考虑这些过去的问题 [ ... ]

比任何特定缺陷更严重的问题是,很少有(如果有的话)供应商对其提供的软件执行有组织的测试程序... 显然很少有人测试他们的软件,看看它在遇到意外数据或条件时会做什么。

在“编写安全SUID和网络程序”一章中,他们花了更多时间讨论这个主题。在那里可以找到良好、基本、常识性规则的列表,例如“不要使用在操作任意长度的字符串时未能检查缓冲区边界的例程。” 仅违反此规则就导致了多个CERT安全公告,包括,我怀疑,最近关于一个流行的电子邮件传输程序的公告。本章中发现的许多其他指南过去本可以防止许多严重的安全漏洞。例如,“检查系统调用的所有返回代码”和“使用access()函数后跟open()是一种竞争条件,并且几乎总是一个错误。” 也许这些指南中的一条会在不久的将来帮助我。我想我会把这本书放在我的床头柜上,以便在雨季来临时,在晚上享受愉快的深夜学习。

Dan Wilder 在华盛顿州西雅图写作并享受雨天。您可以通过电子邮件 dan@gasboy.com 与他联系。

加载Disqus评论