本书通篇,我们将主要讨论安装和配置问题。然而,管理不仅仅如此——在设置好一项服务后,你还必须保持它的运行。对于大多数服务,只需要少量维护,而有些服务,如邮件和新闻,则需要你执行例行任务以保持系统更新。我们将在后面的章节中讨论这些任务。
维护的绝对最低要求是定期检查系统和每个应用程序的日志文件,以查找错误情况和异常事件。通常,你会希望通过编写一些管理 shell 脚本,并定期从 cron 运行它们来完成此操作。一些主要应用程序(如 inn 或 C News)的源代码发行版包含此类脚本。你只需根据你的需求和偏好定制它们。
任何 cron 作业的输出都应该通过邮件发送到管理帐户。默认情况下,许多应用程序会将错误报告、使用统计信息或日志文件摘要发送到 root 帐户。只有当你经常以 root 身份登录时,这才合理;一个更好的主意是将 root 的邮件转发到你的个人帐户,方法是按照 第 19 章 或 第 18 章 中描述的那样设置邮件别名。
无论你如何仔细地配置你的站点,墨菲定律保证某些问题 终将 浮出水面。因此,维护系统也意味着随时准备处理投诉。通常,人们期望系统管理员至少可以通过电子邮件 root 联系到,但还有其他一些地址通常用于联系负责特定维护方面的人员。例如,关于邮件配置故障的投诉通常会发送到 postmaster,而新闻系统的问题可能会报告给 newsmaster 或 usenet。发送给 hostmaster 的邮件应重定向到负责主机基本网络服务以及 DNS 名称服务(如果你运行名称服务器)的人员。
在网络环境中,系统管理的另一个非常重要的方面是保护你的系统和用户免受入侵者的侵害。管理不善的系统为恶意人员提供了许多目标。攻击范围从密码猜测到以太网嗅探,造成的损害范围可能从伪造的邮件消息到数据丢失或侵犯用户的隐私。在讨论可能发生这些问题的上下文以及针对它们的一些常见防御措施时,我们将提到一些具体问题。
本节将讨论一些示例和处理系统安全的基本技术。当然,所涵盖的主题无法详细处理你可能面临的所有安全问题;它们仅用于说明可能出现的问题。因此,阅读一本关于安全的好书是绝对必要的,尤其是在网络系统中。
系统安全始于良好的系统管理。这包括检查所有重要文件和目录的所有权和权限,以及监视特权帐户的使用情况。例如,COPS 程序将检查你的文件系统和常见配置文件中是否存在异常权限或其他异常情况。明智的做法是使用密码套件,该套件对用户的密码强制执行某些规则,使它们难以猜测。例如,shadow 密码套件要求密码至少包含五个字母,并且包含大小写字母以及非字母字符。
当使一项服务可供网络访问时,请确保赋予它“最小权限”;不要允许它执行与其设计工作无关的事情。例如,你应该仅在必要时才使程序 setuid 为 root 或其他特权帐户。此外,如果你只想将某项服务用于非常有限的应用程序,请毫不犹豫地根据你的特殊应用程序允许的范围对其进行限制性配置。例如,如果你想允许无盘主机从你的机器启动,你必须提供 Trivial File Transfer Protocol (TFTP),以便它们可以从/boot目录下载基本配置文件。但是,当不受限制地使用时,TFTP 允许世界任何地方的用户从你的系统下载任何世界可读的文件。如果这不是你想要的,请将 TFTP 服务限制为/boot目录。[1]
你可能还希望将某些服务限制为来自某些主机(例如来自你的本地网络)的用户。在 第 12 章 中,我们介绍了 tcpd,它可以为各种网络应用程序执行此操作。稍后将在 第 9 章 中探讨更复杂的限制对特定主机或服务的访问的方法。
另一个重点是避免使用“危险”软件。当然,你使用的任何软件都可能是危险的,因为软件可能存在漏洞,聪明的人可能会利用这些漏洞来访问你的系统。这种情况会发生,并且没有完全的保护措施可以防止它。这个问题同样影响自由软件和商业产品。[2] 然而,需要特殊权限的程序本质上比其他程序更危险,因为任何漏洞都可能产生严重后果。[3] 如果你为网络目的安装 setuid 程序,请加倍小心地检查文档,以免因意外而造成安全漏洞。
另一个应该关注的来源是允许使用有限身份验证进行登录或命令执行的程序。rlogin、rsh 和 rexec 命令都非常有用,但对调用方提供的身份验证非常有限。身份验证基于对从名称服务器(我们稍后将讨论这些)获得的调用主机名的信任,而这可能是伪造的。今天,完全禁用 r 命令并用 ssh 工具套件替换它们应该成为标准做法。ssh 工具使用更可靠的身份验证方法,并提供其他服务,例如加密和压缩。
你永远无法排除你的预防措施可能会失败的可能性,无论你多么小心。因此,你应该确保尽早检测到入侵者。检查系统日志文件是一个好的开始,但入侵者可能足够聪明,可以预料到此操作,并将删除他或她留下的任何明显痕迹。但是,有一些工具,如 Gene Kim 和 Gene Spafford 编写的 tripwire,允许你检查重要的系统文件,以查看其内容或权限是否已更改。tripwire 计算这些文件的各种强校验和,并将它们存储在数据库中。在后续运行期间,将重新计算校验和,并将其与存储的校验和进行比较,以检测任何修改。
[1] | 我们将在 第 12 章 中重新讨论这个主题。 |
[2] | 曾经有一些商业 Unix 系统(你必须花很多钱购买),它们附带了一个 setuid-root shell 脚本,该脚本允许用户使用一个简单的标准技巧来获得 root 权限。 |
[3] | 1988 年,RTM 蠕虫使大部分互联网陷入停顿,部分原因是利用了一些程序(包括 sendmail 程序)中的一个巨大的漏洞。这个漏洞早已被修复。 |