Debian7-系统管理最佳实践-全-

Debian7 系统管理最佳实践(全)

原文:annas-archive.org/md5/367ae3430a5c565a10203c33a3fd8fba

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

Debian Linux 发行版是目前最稳定的发行版,并且在互联网上使用的 Web 服务器中,其使用量超过任何其他操作系统。尽管有许多关于 Linux,特别是 Debian Linux 的教程网页和手册,但新用户和经验丰富的管理员常常容易陷入细节中。本书提供了一个广泛的概述,更多的是关于 Debian Linux 管理的“要做什么”而不是“如何做”。各章旨在涵盖管理员必须处理的主题,并包括背景信息、建议和技巧、以及基本知识和管理技术。书中还包含了参考资料,详细讲解了各个主题,远超本书篇幅所能覆盖的内容。

虽然本书主要针对当前的 Debian 稳定发行版,但书中涉及的主题对于任何 Linux 管理员都非常有用。至于缺少大量详细示例,我深感抱歉。在这本书的篇幅内,无法深入到我原本希望的细节层面。幸运的是,Debian 项目提供了优秀的指南和参考资料,以及文中指出的在线网页,帮助读者更深入了解。

本书内容概述

第一章, Debian 基础知识 for 管理员, 介绍了 Debian 与其他 Linux 发行版的区别,并深入探讨了 Debian 项目和自由软件的一般背景。

第二章, 文件系统布局, 讲解了用于启动 Intel 32 位和 64 位系统的两种主要方法,Linux 的各种文件系统格式、磁盘分区,以及如何通过磁盘、分区和目录加密来保护数据。

第三章, 软件包管理, 介绍了 Debian 软件包管理的基础知识,包括管理工具和如何更新系统。

第四章, 基本软件包配置, 介绍了常见的软件配置技巧,包括文件和文档的存放位置,以及 Debian 配置中的趋势。

第五章, 系统管理, 涵盖了重要的系统管理主题,包括启动和关闭、网络配置、文件系统维护和显示管理器。

第六章, 基本系统安全, 涵盖了系统安全的重要问题,包括可用来帮助安装额外安全软件的特定软件包、防火墙工具和入侵检测。

第七章, 高级系统管理, 简要涵盖了高级管理主题,包括远程备份、分布式配置管理和集群管理。它还包括对 Webmin 的介绍,Webmin 是一个几乎兼容所有 Linux 系统的基于 Web 的管理工具。

本书所需内容

虽然本书不要求安装特定软件,但它涵盖了 Debian 7 Linux 发行版。本书中提到的所有软件,除了 Webmin 之外,都可以在 Debian 稳定版中找到,并可以从 Debian 项目官网(www.debian.org/)下载。它也可以通过该网站上提到的供应商,获得 CD、DVD 和蓝光光盘。Webmin 软件可以从其官网(www.webmin.com/)下载。

如果你打算下载软件,或希望查阅书中提到的各种参考资料和其他文档,则需要访问互联网。特别是,建议初学者熟悉 Debian 安装指南(www.debian.org/releases/stable/installmanual)和参考手册(www.debian.org/doc/manuals/debian-reference/),它们也可以作为文档包在 Debian 发行版中获取。

本书适合的读者

本书适合那些刚接触 Debian 的用户和管理员,或者那些从其他 Linux 发行版切换到 Debian 的资深管理员。本书假设读者具备基本的 Linux 或 Unix 系统知识。由于本书是一本高阶指南,更多的是关于“做什么”而不是“如何做”,因此读者应该愿意查阅参考资料,获取进一步的详细信息和实际例子。

约定

在本书中,你会看到几种不同风格的文本,用于区分不同类型的信息。以下是这些风格的一些示例,并解释其含义。

文本中的代码词汇如下所示:“通常,这会被添加到/etc/apt/sources.list.d目录下的一个单独的webmin.list文件中。”

任何命令行输入或输出都按如下方式显示:

# deb cdrom:[Debian GNU/Linux 7.0.0 "Wheezy" - Official amd64 \ NETINST Binary-1 20130504-14:43]/ stable main

新术语重要词汇以粗体显示。你在屏幕上看到的文字,如菜单或对话框中的内容,通常以这种方式出现在文本中:“通常,这仅仅是提供一个标准配置,比如 Apache 的简单它工作!页面。”

注意事项

警告或重要提示会以类似这样的框显示。

提示

提示和技巧通常如下所示。

读者反馈

我们欢迎读者提供反馈。让我们知道你对本书的看法——你喜欢什么,或者有什么不喜欢的地方。读者反馈对我们来说非常重要,帮助我们开发出你真正能从中获得最大收益的书籍。

要向我们提供一般反馈,只需发送电子邮件至<feedback@packtpub.com>,并在邮件主题中提及书籍标题。

如果你在某个领域有专长,并且有兴趣撰写或参与书籍的编写, 请查看我们在www.packtpub.com/authors上的作者指南。

客户支持

现在,作为一本 Packt 书籍的骄傲拥有者,我们为您提供了一些帮助,以便您从购买中获得最大收益。

勘误

尽管我们已经尽最大努力确保内容的准确性,但错误仍然会发生。如果您在我们的书籍中发现错误——可能是文本或代码的错误——我们将非常感激您能报告给我们。通过这样做,您可以帮助其他读者避免困惑,并帮助我们改进书籍的后续版本。如果您发现任何勘误,请通过访问www.packtpub.com/submit-errata报告,选择您的书籍,点击勘误提交表单链接,并填写勘误的详细信息。您的勘误一旦被验证,您的提交将被接受,勘误将上传到我们的网站,或添加到该书籍的现有勘误列表中,出现在该书籍的勘误部分。您可以通过www.packtpub.com/support选择您的书名查看任何现有的勘误。

盗版

网络上的版权盗版问题在所有媒体中普遍存在。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到我们作品的任何非法副本,无论以何种形式,请立即向我们提供其位置地址或网站名称,以便我们采取措施。

如果您发现疑似盗版材料,请通过<copyright@packtpub.com>与我们联系,并提供相关链接。

我们感谢您在保护我们的作者和我们为您提供有价值内容方面的帮助。

问题

如果您在使用本书的任何方面遇到问题,可以通过<questions@packtpub.com>与我们联系,我们将尽力解决问题。

第一章:Debian 管理员基础

“什么是最适合我需求的发行版?我需要了解什么才能管理 Debian 系统?Debian 有什么不同?在 Debian 中处理特定问题的最佳方式是什么?我在互联网上搜索了这些问题,得到了几百万个结果。现在我该怎么做?有人能帮助我吗?”

对于最后一个问题,答案是肯定的。回答其他问题则需要一些背景知识。本讨论面向那些刚接触 Debian 的人。在这里,我们将讨论 Debian 在各种 Linux 发行版中的位置、项目组织(以及这如何影响管理)以及许可问题。已经熟悉 Debian 的人可以跳到下一章。

Linux 发行版

Debian 只是众多 Linux 发行版之一。选择哪个发行版最适合你的部署可能是一个相当艰巨的任务。发行版之所以如此多样,是因为每个开发者或赞助商对于默认安装的软件、特定任务的适用软件以及如何最佳管理系统有不同的看法。这意味着,选择一个符合你目标和偏好的发行版将使安装和管理更加容易。

注意

任何发行版都可以通过安装非默认软件,或者在某些情况下安装非发行版原生的软件,并使用非默认配置来反映管理员的偏好。然而,选择一个合适的发行版意味着为了满足管理员的需求,所需的工作量会减少。

三个分支

Linux 发行版可以分为三个分支,分别根据其原始发行版或包管理器命名:SLS、RPM 和 DPKG。

SLS

Softlanding Linux System (SLS) 发行版,后来发展为 Slackware 发行版,是最古老的发行版之一。该分支中的发行版通常在包含原始软件包之前,几乎没有或根本没有对其进行修改。使用这种格式的发行版通常不提供本地软件管理,而是依赖第三方工具进行包管理和管理。这些工具通常是现成可用的,且常常包括在内,因此这不一定是一个缺点。

注意

这些发行版也被称为 Sorcerer/Lunar-Linux/Source Mage (SLS) 发行版,是最常见的采用这种格式的发行版。

这些发行版大多已经过时,不常见了。然而,这种包格式仍被许多软件项目使用。

RPM

Red Hat 包管理器 (RPM) 是由 Red Hat 开发的,旨在为软件管理提供一些结构。它提供了所有常见的软件管理功能,具体如下:

  • 软件安装,包括在安装过程中解析软件依赖关系

  • 已安装软件的各种报告

  • 软件验证和控制

  • 用户能够打包自己的软件,以便也能进行管理

大多数基于 RPM 的发行版由公司赞助,这些公司还销售增强版的发行版并提供广泛的付费支持。这也意味着统一的管理工具可用,至少在付费版本中是这样,免费版本中通常会有功能稍微简化的版本。许多管理员更倾向于这种方法,它使得大多数常见的管理任务可以通过一个起始点完成。

使用这种格式的最常见发行版是 Red Hat(及其付费版 Red Hat Enterprise LinuxRHEL)和 SuSE(免费版为 OpenSuSE,付费版通常称为 SuSE Linux Enterprise ServerSLES)。

DPKG 或 DEB

Debian 打包系统DPKG/DEB)大约在与 RPM 同一时期开发,具备相同的功能,尽管它们的实现方式不同。DPKG 指的是最初的软件打包工具。它已被更灵活且用户友好的工具所取代,因此该分支通常通过软件包文件的扩展名来称呼:DEB(.deb)。该分支中的一些发行版得到了公司资助(Ubuntu 是最著名的),因此拥有统一的管理工具,类似于 SuSE 的 YaST 等。其他发行版,如 Debian,则依赖于第三方软件来实现这一功能。

该分支中最常见的发行版是 Debian 和 Ubuntu。该分支中的其他大多数发行版,如 Mint 和 BackTrack,都源自其中之一。

其他差异

在我们深入细节之前,管理员应该了解一些关于 Debian 与其他发行版差异的其他事项。

需要注意的一点是,发行版的“家园”可能会影响其特性。例如,Red Hat 最初在美国开发,因此反映了美国管理员的常见使用习惯和偏好。而 SuSE 则源自德国,体现了欧洲的做法。一个具体的例子是,Red Hat 偏好使用 GNOME 窗口管理器,而 SuSE 更倾向于 KDE 桌面管理器,尽管两个窗口管理器以及其他窗口管理器在这两个发行版中都可用。主要的问题是,匹配你偏好的发行版将需要更少的配置更改或软件包安装,以便更好地匹配你的管理风格。关于发行版的历史和预期目的,可以在发行版的主页以及常见的 Wikipedia 条目中找到相关信息。

Debian 项目起源于美国,但从一开始就招募了全球开发者。因此,默认设置和配置尽可能反映全球最常见的最佳实践,每个软件包则反映了其开发者的独特经验。

最佳实践是选择一个最符合你偏好的发行版。这样,默认配置将更接近你的需求,并且需要较少的调整来匹配你的管理风格。

接下来,发行版大致分为两大类:有公司赞助的和没有公司赞助的。公司赞助通常意味着付费支持是可用的,同时也有带有额外功能的付费版本。并不意味着没有公司赞助的发行版无法获得这些,只是需要寻找第三方提供这些服务,而不是集中在一个地方。

Debian 不接受或没有公司赞助,尽管它确实接受并获得了大量来自硬件、开发者支持和捐赠的企业支持。其理念是,Debian 由其社会契约和开发者指导,而不是由特定的企业赞助商推动。付费支持可以通过多个来源获得(其中许多也有贡献),而来自开发者和用户社区的免费支持则通过许多支持页面和论坛以及官方的错误报告和跟踪网站提供。

另一点是,缺乏公司赞助可能意味着缺乏结构或方向,但这对 Debian 并不成立。事实上,Debian 有着非常强大的结构,支持过程和行政责任引导着 Debian 的开发和发布。其主要影响更为微妙——Debian 由社会契约引导,且由一群致力于质量、自由软件理念的开发者组成,确保软件在尽可能多的环境中运行得尽可能无故障,且广泛可用。

现在,让我们来看看 Debian 项目本身。

Debian 项目

Debian 本质上是一个完全自由、由志愿者支持的发行版。与 Ubuntu、Red Hat 或 SuSE 不同,它并不接受任何公司赞助。这并不意味着它的组织不严密。事实上,Debian 项目组织良好,拥有明确的治理结构、详细的标准和指南,以及为软件发布、维护和支持制定的特定流程。

注意

名称Debian来源于项目创始人 Ian Murdock 和他的妻子 Debra 的名字。

社会契约

最重要的是,Debian 开发者相信自由软件,正如自由软件基金会所定义的那样。从本质上讲,这一定义确保用户拥有以下自由:

  • 为任何目的运行该程序

  • 学习程序如何工作并进行修改

  • 重新分发副本

  • 分发修改版本的副本

所有这些都体现在 Debian 社会契约中,以及Debian 自由软件准则DFSG)中,二者都可以在www.debian.org/social_contract找到。所有 Debian 开发者都承诺遵守这一社会契约,它阐明了 Debian 项目的指导原则,并影响所有关于什么应该包含在发行版中、如何分发和维护的决策。特别值得注意的是有关非自由软件的条款,以及对多种不同计算环境的支持。

非自由条款不仅允许此类软件在 Debian 系统上运行,还为这些软件提供了特殊的 Debian 仓库,可以在不支付费用的情况下发布。这些软件实际上是由 Debian 开发者打包和支持的。主要区别在于,由于许可限制,它不属于官方 Debian 发行版。当然,必须付费的软件也可以在 Debian 发行版上运行,只是不能包含在 Debian 仓库中。

宪法

实现 Debian 社会契约目标的手段在 Debian 宪法中有所阐明。它概述了正式的结构和决策过程。该项目有一个完整的组织结构,涵盖了官员、发行版、宣传、支持和基础设施等部门,并为每个部门设有具体的职位和职责。虽然 Debian 是一个全员志愿者组织,但它的组织性不亚于任何大型企业实体。

政策

除了组织结构外,还有非常全面的政策手册,指导开发和发布的各个方面,包括仓库和存档的结构,以及一系列相关的标准文档。所有相关信息可以在www.debian.org/devel/找到。

这些政策及其背后的组织带来的最重要影响之一,就是 Debian 发行版的稳定性。在任何时候,Debian 都有三个主要版本可用:稳定版、测试版和不稳定版。此外,还有实验版和回溯版,但它们并不是完整的发行版。

注意

实验版本包含不完整且尚未准备好被纳入不稳定版本的包。回溯包包含专为当前 Debian 稳定版编译的较新包。

不稳定版本是活跃开发的场所。一旦一个包没有“发布关键”缺陷并且在所有支持的架构上都能正常工作,它会被移至测试版本,进行额外的测试。某个时刻,测试内容会被冻结,为新的稳定版本做准备。经过稳定性验证且所有包满足 Debian 发布要求后,测试版成为新的稳定版本,之后循环继续。

稳定版的要求相当严格。实际上,测试版的要求也非常严格,正如一些人所评论的那样,测试版甚至比许多公司发布的稳定版还要稳定。因此,在 Debian 中,稳定版就是意味着稳定。Debian 的稳定发布是极其可靠的,拥有发布安全性和紧急更新的系统,保证了其稳定性。它为服务器和开发系统提供了关键任务级别的生产质量软件。这也是 Debian 被用于更多生产服务器的主要原因之一(根据 W3Tech 数据,截止到 2012 年 1 月)。

和任何优势一样,也存在相应的劣势。Debian 稳定版并不总是包含最新的前沿软件。这是为了确保该发行版尽可能成熟并且没有崩溃。当然,用户可以在 Debian 上安装更新的软件及其所需的依赖项。事实上,backports 存储库包含了这样的软件,特别为 Debian 稳定版预编译。这些软件包,但并不保证其稳定性与官方稳定版相同。

许可证

正如在社会契约部分提到的,许可证是 Debian 的核心问题之一。官方 Debian 发行版中的所有软件都采用了几种自由软件许可证之一,通常是某个版本的 GNU 通用公共许可证GPL)、伯克利 BSD 风格的许可证,或 Perl 开发者使用的某种艺术许可证。

对管理员来说,这意味着他们可以在任意数量的不同系统上运行 Debian,而无需支付许可证费用,并且可以将其提供给其他人而没有任何限制(严格来说,的确存在一些限制,但这些大多数是为了保持软件自由的要求,符合自由软件基金会的定义精神)。

这种自由并不妨碍管理员在 Debian 上运行专有软件。事实上,这种自由是社会契约的一部分。唯一的限制就是该软件许可证中所规定的内容。

Firefox 发生了什么?

Debian 在处理许可证问题时非常谨慎,Mozilla 软件套件就是最好的例子,其中包括 Thunderbird 邮件阅读器和流行的 Firefox 浏览器。关于争议和相关问题,可以写出一整章。然而,基本问题是 Mozilla 的艺术作品并不符合 Debian 指南定义的自由许可证标准。曾经一段时间,Debian 被允许使用其他艺术作品,但最终 Mozilla 公司撤回了这一许可。变化的原因之一是 Debian 开发者为遵守政策和社会契约的方式对软件进行了编译。

经过长时间的争论,Debian 项目决定采取最好的方式——根据 Mozilla 许可证重命名软件,以便保持与 DFSG 的兼容性。Debian 中的 Thunderbird 现在被称为 Iceowl,Firefox 被称为 Iceweasel。

注释

这些名称源自早期讨论,当时 Iceweasel 被用来描述一个假设的重新命名版本。这个名字被沿用了。其他 Mozilla 软件也以类似的方式进行了重命名。

管理员的优势包括以下几点:

  • Debian 版本没有受到非免费许可证的限制。

  • Debian 维护者通常会更快地修复漏洞。这些补丁会传递给 Mozilla 维护者。这实际上是 Debian 开发者根据政策对任何软件补丁的要求。

  • 更新是通过 Debian 打包框架进行管理的,而不需要单独的专有更新程序。

  • 该软件使用标准的 Debian 系统库,而不是安装 Mozilla 的独立库。

  • 该软件可以在各种 Debian 支持的非 Intel 架构上运行。例如,你有一台旧的 IBM z 系列服务器吗?Debian Iceweasel 可以在上面运行。那一台老旧的 SG 或 Sparc 工作站呢?同样的情况,Debian Iceweasel 可以顺利运行。

尽管如此,Debian Iceweasel 在实际操作中就是 Firefox。它提供相同的界面和体验,使用相同的插件,并且会向服务器报告自己是兼容 Firefox 的。其他重新命名的 Mozilla 软件也是如此。

注释

在 Debian 中,插件搜索功能已修改为仅搜索免费的插件,但我从未觉得这有问题。非免费插件仍然可以根据用户的选择安装,并且可以正常使用。

软件仓库

Debian 许可政策的另一个结果是存在三个不同的软件仓库:

  • main: 这些是许可证符合 DFSG 的包。

  • contrib: 这些包的许可证也符合 DFSG,但依赖于其他不符合 DFSG 的包或库。

  • non-free: 这些是许可证不符合 DFSG,但被允许与 Debian 一起分发的包。

用户可以自由选择是否允许安装来自 contrib 和 non-free 类别的软件。如果安装了这些软件,用户需自行了解并遵守相应的许可证。

还有其他非官方的软件仓库,它们托管那些由于某种原因未包含在官方 Debian 仓库中的软件。

Debian 环境

Debian 包含尽可能广泛的软件种类。截至目前,Debian 稳定版包含超过 48,000 个预编译软件包,是最新稳定版本。根据一些统计数据,这是所有 Linux 发行版中最多的。公平地说,其中许多是小众应用程序,并没有广泛的用户基础。但软件包的数量只是故事的一部分。

支持多种不同环境也是 Debian 发行版的一个显著特点,可能也是最令人吃惊的地方。实际上,Debian 在支持的不同处理器数量上是独一无二的。写作时,它支持包括 32 位和 64 位的 Intel 和 AMD 处理器、ARM(EABI 或小端版本)、Intel Itanium、MIPS(包括大端和小端)、PowerPC(是的,这意味着它可以在 IBM 服务器上运行!)、System/390(旧的 IBM 架构)和 SPARC。此外,Alpha 架构在 Debian 6.0 之前得到支持,还有不官方的移植版本支持其他 ARM 架构,以及 Amtel 的 RISC 芯片(AVR32)、HP 的 PA-RISC 芯片(直到 Debian 6.0)、摩托罗拉 68000、IBM System Z 和日立 SuperH 处理器。还支持将 FreeBSD 作为主要操作系统而非 Linux,在 Intel 32 位和 64 位架构上运行,同时还有其他非官方或实验性的非 Linux 基础的 Debian 发行版,适用于 GNU Hurd 操作系统。

这种承诺导致了一个非常灵活的发行版,可以用于多种环境。因此,Debian 开发者选择不设计一个适合大多数用户的默认安装包。默认的 Debian 安装(未选择任何可选软件)仅包括基础内容。管理员需要选择作为选项的软件,或稍后安装适当的软件。这并不困难,因为基础系统已经包括了安装额外软件所需的所有必要工具。

这与基于 Debian 的 Ubuntu Linux 相对立。基本的 Ubuntu 安装旨在即插即用,适用于大多数用户。因此,它包含更多的软件,使其成为适合新 Linux 用户的发行版,尤其是对于那些不了解可用软件或没有探索需求的用户,与其在可选安装的软件包中挑选,还不如直接使用已有的软件。然而,这也可能导致安装包含不必要的组件。当然,这些组件可以轻松卸载,但这又是一个选择合适发行版的例子,从而减少管理员的工作负担。

这也是 Debian 成为商业服务器领域主要玩家之一的原因之一,因为只有必要的软件和服务会被安装,这通常会带来更好的性能和更简化的系统管理。这也意味着 Debian 可以在较旧、性能较差的设备上正常运行。请注意,尽管如此,在安装过程中或安装后,仍然可以安装各种软件,这将使 Debian 系统能够满足即使是最难以满足的开发者的需求。

对管理员的影响

现在我们已经了解了 Debian 的组织和开发背景,接下来的问题是:“这如何影响管理员?”

管理员需要注意的三个主要领域如下:

  • 支持的可用性

  • 专有功能的可用性

  • 许可证问题

Debian 支持

Debian 项目有一个庞大且结构明确的支持体系,包括大量的文档、Wiki、邮件列表和新闻组、网站和论坛。通过 IRC 提供实时帮助,并且有一个功能完善且有效的 bug 跟踪系统,任何人都可以使用。也可以直接联系 Debian 开发人员和包维护者,这是其他发行版中并不总能做到的。这些及其他可用的支持资源可以在 www.debian.org/support 上找到。

需要记住的一点是,这些都是志愿者(其中一些实际上是由那些正式捐赠时间给 Debian 项目的公司支付的)。每大约两年会发布一次主要版本,并提供三年的更新支持,或者是下一个主要版本发布后一年的支持。根据我的经验,对于 bug 报告和支持请求的响应相当不错,有时甚至比付费支持更快。当然,像论坛这样的地方提供的建议质量,取决于提供建议的人的经验。尽管如此,对于大多数用户来说,这种方式效果非常好。Debian 版本本身极其稳定,这也是一个有利因素。

对于那些更愿意支付支持费用的人,有许多公司和个人提供此类服务。事实上,Debian 网站有一页列出了世界各地的此类顾问。

类似地,尽管 Debian 可以通过从众多 Debian 服务器和镜像站点下载并自行刻录安装 CD、DVD 或蓝光光盘来免费获得,但也可以从第三方供应商处购买现成的安装媒体。

专有功能

简单来说,Debian 并没有付费版本,也没有额外功能。

这其中的一个副作用是没有官方的 Debian 统一管理工具。例如,SuSE 提供 YaST,Ubuntu 提供 UCC。然而,发行版中有许多配置和管理工具,诸如 GNOME 和 KDE 等窗口管理器会将它们的管理菜单项集中在一个地方,方便使用。同样,也有一些第三方应用程序能够在 Debian 上很好地运行,它们将大多数(如果不是全部)常见任务集中在一个地方,提供统一且用户友好的界面。

管理员可能遇到的最重要问题是受支持硬件的问题。虽然 Debian 尽力支持尽可能多种类的硬件,但一些制造商并没有提供关于其专有硬件的信息。没有这些信息(编写驱动程序所必需的),如果制造商不提供 Linux 驱动程序,它就无法在 Debian 中得到支持。

注意

存在一些特殊情况。如果某些 Windows XP 驱动程序可用,Linux 可以使用它们,但需要额外的步骤来安装和激活它们。

实际上,这并不是 Debian 的问题,而是 Linux 的问题。一些提供付费版本的发行版可能会在增强版本中包含专有驱动程序。然而,一般来说,如果你的硬件受 Linux 支持,它将与 Debian 一起工作。Debian Wiki 上以及其他网站上有许多页面解释如何让 Linux 和 Debian 在许多具有特殊硬件的系统上运行。此外,随着 Linux 的普及,许多制造商正在提供必要的驱动程序,尽管这些驱动程序可能没有免费提供并且没有许可协议允许它们包含在基本发行版中,但至少它们可以以可以安装并与 Debian 一起使用的格式提供。

提示

最佳实践:在购买硬件或安装任何发行版之前,检查硬件支持列表和 Linux 兼容性网站。

寻找安装帮助和信息的地方

那么,如果你的硬件在 Debian 安装过程中不被支持,应该如何查找支持的硬件或解决方案呢?最好的起点可能是当前的 Debian 安装指南。支持所有架构版本的不同语言版本可以在 www.debian.org/releases/stable/installmanual 获取,并且内容非常详尽。第 2.1 节涵盖了支持的硬件,并提供了链接到更一般的 Linux 硬件兼容性网站。该章节还链接到了同一手册的第 6.4 节,介绍了在安装过程中如何提供缺失的固件。一些架构特定的手册提到了 Linux 硬件兼容性 HOWTO,但有些没有。你可以在 www.tldp.org/HOWTO/Hardware-HOWTO/ 找到它。最后,你还可以在 www.debian.org/releases/stable/releasenotes 查找与当前 Debian 版本相关的每个支持架构的附加信息。

总结

Debian 是一个极其稳定的 Linux 发行版,包含多种在不同环境和多种 CPU 架构上运行的软件。它是免费的,符合自由软件基金会的定义,因此可以在任何数量的系统上自由运行,管理员可以不受限制地使用,也没有许可费用。它可以自由复制、修改和重新分发。Debian 可通过许多官方 Debian 服务器和镜像下载,并且得到了官方且定义明确的志愿者组织的良好支持,该组织通过多个渠道提供支持。付费的安装介质和支持也可以从许多第三方处获得。

Debian 安装通常只安装必要的最小服务,管理员需要在初始安装后添加任何其他需要的服务。这使得系统更加安全,运行更快且没有多余的服务,并且允许 Debian 在较旧的、性能较低的系统上正常运行。

现在我们已经介绍了 Debian 的基础知识,接下来是磁盘布局的基础知识,包括用于启动的结构以及如何确定分区布局。

第二章:文件系统布局

在安装 Debian 之前,首先需要做出的一些决定包括如何为安装格式化存储空间。这包括选择使用哪种类型的文件系统,如何分区以获得最佳效果,以及是否加密和加密哪些内容以保证安全。分区和引导代码放置的实际工作由 Debian 安装程序处理,之后可以使用标准的 Linux 引导加载程序和分区工具进行修改。安装过程及相关工具在上一章中提到的 Debian 安装指南中有详细介绍,GRUB2、fdisk 和 GNU Parted 的文档也随相应软件包提供。

本章是关于引导加载和磁盘分区概念的基础介绍,同时也提供了一些在安装 Debian 或更新引导或分区方案时需要注意的指导原则。如果你在首次安装 Debian 时还不确定什么方案最适合你的情况,不必担心。正如我们将看到的,默认设置对于大多数情况来说已经足够,而且对于初学者来说,在不确定的情况下使用默认设置通常不会出错。

分区表

每种架构都有其独特的磁盘分区方法,并将引导代码放置在适当的位置。对于大多数架构来说,这是非常直接的。然而,英特尔架构正在经历一些变化,需要了解引导过程和磁盘布局。

单引导还是多重引导

安装任何 Linux 发行版时,首先需要做出的选择之一是系统是单引导还是多重引导。通常,许多开发者会在同一台机器上同时运行 Windows 和 Linux。在某些情况下,由于许可证限制或个人偏好,他们希望使用电脑自带的 Windows 安装并根据需要引导进入其中一个操作系统。这是完全可以接受的,大多数引导加载程序会识别两种操作系统,并提供菜单项以引导所需的操作系统。另一种选择是使用 Xen 或类似的虚拟化软件同时引导两者。第三种选择是通过 QEMU 或 KVM 软件在 Linux 虚拟机 (VM) 中运行 Windows。在 QEMU、KVM、Xen 或任何其他虚拟化软件(如 VMware)下创建虚拟机,将是一本完整的书。就我们的目的而言,我们将虚拟机视为与实际硬件系统基本等效,因为虚拟机创建之外的问题是相同的。

提示

最佳实践,如果这是单一操作系统的服务器环境,应该选择单引导系统。如果这是一个开发者系统,可能需要引导进入其他操作系统,则可以使用双引导。虚拟机(VM)通常不需要双引导。

BIOS 与 UEFI

直到 1990 年代末,基本输入输出系统BIOS)是所有基于 Intel 的系统启动的方式。它的磁盘分区信息存储在 主引导记录MBR)中,并且每个可启动分区的第一个扇区还包含额外的代码。随着微软推出的安全启动功能以及与之相关的启动机制 统一可扩展固件接口UEFI)的出现,出现了新的分区布局和额外的考虑事项。

BIOS 下的启动代码

BIOS 是传统的启动方式,并且得到了 Debian 的良好支持。启动代码的放置位置有多个选择。常见做法是将其放置在启动磁盘的 MBR 开头。然而,如果已经安装了多个操作系统(特别是 Microsoft Windows),这会将已安装的启动程序替换为 Linux 通用的启动程序。通常这不是问题,因为安装和更新过程会搜索其他操作系统,并且能够将它们作为启动菜单中的替代项。

注意事项

当前在 Intel 上用于 Debian 的启动程序是 GRUB2,尽管还有其他较旧的启动程序,可能也会被安装作为替代。

然而,在某些情况下,原始的非 Linux 启动程序是首选。例如,一些 Windows 安装如果安装了非 Windows 启动程序,可能无法正确更新。在这种情况下,Linux 启动代码可以放在 Linux 启动分区的开头,而不是硬盘的 MBR(主引导记录)处,这样非 Linux 启动程序通常可以找到它,并将其作为启动菜单中的一种选择。

在使用 Linux GRUB2 启动程序时,Windows 更新的问题相当复杂。这个问题似乎主要发生在 Internet Explorer 的重大版本升级时,原因仍然不清楚,至少在我能找到的任何讨论和错误报告中都没有明确提到。更复杂的是,偶尔会出现 Windows 启动程序无法一致地识别 Linux 启动分区的报告。似乎没有明确的指导方针来确定哪些 Windows 安装会遇到问题,哪些则不会。唯一确定的方式就是亲自尝试,而这需要耐心、良好的备份和在失败时愿意重新开始的决心。

因此,如果你计划使用包含 Windows 的双系统或多系统启动布局,并且没有时间、耐心和决心去尝试所有的替代方案,那么答案就取决于以下一些实际的考虑因素:

  • 你能没有 Internet Explorer 的重大版本升级而生活吗?

  • 你能否将 Windows 作为虚拟机运行,而不是作为双系统或多系统的一部分?

  • 你的 Windows 启动程序能否识别 Linux 启动分区?

许多用户从不升级 Internet Explorer 的主版本,并且对当前版本的安全性和功能更新感到完全满意。如果这种做法对你有效,那么可以继续使用 MBR 中的默认位置。如果你绝对需要能够升级主版本的 Internet Explorer,考虑将 Windows 作为虚拟机运行,而不是作为双启动或多重启动系统的一部分。如果你不想这样做(通常是因为虚拟硬件兼容性或许可问题),那么就将 Linux 引导加载程序安装在 Linux 分区的开头。自 Vista 以来,Windows 的最新版本通常能够很好地识别 Linux 启动分区,并将其添加到启动菜单中。

提示

最佳做法是使用 MBR 中的默认位置。只有在你确实需要原始引导加载程序时,才将 Linux 启动代码放在 Linux 启动分区的开头,并且如果需要,配置非 Linux 引导加载程序将其包括在启动菜单中,前提是它没有自动这样做。

在 UEFI 下的启动代码

UEFI 是由英特尔和微软最近开发的一种支持所谓安全启动(Secure Boot)的技术,要求所有加载的固件必须被签名,否则将无法加载。这对 Linux 是一个问题,因为根据当前的 GPL,签名所需的密钥必须公开。这显然会破坏安全启动的目的。有几种解决方法,包括红帽、SuSE 和 Ubuntu 所采用的一些方法,这些方法正在由 Debian 开发者讨论,并可能在将来的某个更新中包含。目前,UEFI 规范允许禁用安全启动,这是安装 Debian 并使其在 UEFI 下启动的推荐方式。在大多数 UEFI 实现中,也可以开启传统模式,这样就可以使用旧的 MBR 方法。

在 UEFI 下,启动代码被放置在一个特殊分区中的子目录中。通常,这将是磁盘上第一个分区中的 /EFI 子目录(格式化为 FAT32 文件系统)。通常,启动模块和配置文件会被放置在 UEFI 分区中的 /EFI/grub 目录下。将默认的 EFI 模块(通常是 /EFI/Boot/bootx64.efi)替换为 grubx64.efi 模块(如过去某些人推荐的那样)并不是一个好主意。Debian 安装程序通常会处理将 GRUB 加载程序作为启动选项之一,如果它不是默认选项,启动设置菜单应当用于将其设置为默认选项。如果安装程序没有为你完成这一步,也可以用它将 GRUB 添加为启动选项。

注意

进入 UEFI 启动设置菜单通常需要在启动计算机时按住某些键,这与旧 BIOS 菜单的调用方式非常相似。每个计算机型号的具体方法不同。

UEFI 对 Debian 7 来说是新的。

文件系统类型

选择文件系统格式是安装 Debian 之前的下一个重要决策。适合 Linux 安装的支持格式包括 ext2、ext3、ext4、JFS、XFS、ReiserFS 和 Btrfs。前面三个实际上是为 Linux 特别开发的 扩展文件系统ext)的逐步改进版本。

ext2、ext3 和 ext4

ext 文件系统最初是为了解决 MINIX 文件系统的局限性而开发的。

注意

MINIX 是 Linus Torvalds 开发 Linux 的灵感来源。

第二扩展文件系统ext2)在此基础上进行了改进,而 第三扩展文件系统ext3)则添加了日志记录功能以及性能改进。第四扩展文件系统ext4)则增加了更多功能和性能提升。

注意

禁用日志功能是 ext2 有时比 ext3 在闪存驱动器上使用的原因之一,目的是减少写入周期。

日志文件系统

由 IBM 为其类 Unix 的 AIX 操作系统开发,并作为替代 ext 和 ext2 文件系统的选项通过 GPL 许可证发布的 日志文件系统JFS),是当前 ext4 的一种替代方案。它使用较少的资源,同时保持较高的稳定性和韧性。它包含了许多 Btrfs 的功能,是 CPU 性能有限或需要同步写入以应对硬件故障的数据库系统的一个不错选择。

SGI 的 XFS 文件系统

XFS 是另一个替代方案,由硅谷图形公司(Silicon Graphics)于 1993 年开发。它是一个高速的 JFS,重点强调并行 输入/输出I/O)。美国国家航空航天局高级超级计算部在其 300 多 TB 的 Altix 存储服务器上使用此格式。尽管 Red Hat 对其做了一些改进,XFS 的元数据操作比其他格式稍慢,但这在一定程度上得到了改善。在元数据变动较小(如文件或目录创建、移动或删除操作较少)且 I/O 性能至关重要的情况下,这是一个不错的选择。

Reiser 文件系统

Reiser 文件系统ReiserFS)旨在取代 ext3,成为 Linux 选择的文件系统,提供更好的性能。曾有一段时间,ReiserFS 3 版是 SuSE Linux 的默认格式。版本 4 已发布,但随着公司倒闭,开发进度放缓,最终 SuSE 决定回归使用 ext3 作为默认格式。

ReiserFS 相较于当时存在的格式提供了一些优势,但在某些性能领域已落后。它支持动态调整大小,而其他文件系统则必须离线调整,或者使用逻辑卷管理器来提供虚拟调整大小支持。

B-树文件系统

B-Tree 文件系统Btrfs)是下一个 Linux 文件系统格式。它专注于容错、修复和简易管理,并具有扩展到更大存储配置的能力。基于 ext 的系统可以轻松转换为 Btrfs。目前,Btrfs 仍在积极开发中,虽然预计只会有向前兼容的格式变化。Debian 7 已允许使用它,但目前不推荐用于生产系统。

集群格式

对于集群系统,支持多种格式,包括 AFS 和 GFS2。一般来说,它们不用于启动所需的基础系统文件,而更适合用于共享数据。虽然可以设置这样的系统进行启动,但这超出了本讨论的范围。如果你有兴趣,关于 Linux 集群有很多相关出版物。一份好的起点可能是维基百科上关于集群文件系统的文章,链接为 en.wikipedia.org/wiki/Clustered_file_system

非 Linux 格式

Linux 内核支持许多额外的格式,例如微软的 NTFS、各种 FAT 格式、老旧的 OS/2 HPFS 以及苹果的 HFS。这些格式不支持 Linux 系统所需的属性,因此不适合用作根文件系统。若有必要,它们可以用于其他数据。请注意,这些格式缺少基本的 Linux 安全属性,尽管它们在某些情况下有一定的机制可以将现有属性转换为大致相应的 Linux 属性。

其他 Unix 格式

还有许多其他格式可供选择,例如 SCO 的 Unix BFS、QNX 和 BSD 的 UFS。尽管它们与 Unix 相关,但由于属性处理上的细微差异,它们并不适合用于 Linux 根安装。虽然它们可能运行良好,但 Linux 特定的格式通常具有更好的性能和功能。

选择格式

通常,默认的 ext4 格式是最好的选择。在特定情况下,JFS 或 XFS 可能提供一些优势;如果动态调整大小的能力比性能或可扩展性更重要,并且你不想使用逻辑卷,那么 ReiserFS(特别是版本 4)可能是合适的选择。Btrfs 目前不应被用于关键数据,但在不久的将来,它将成为首选格式。非 Linux 格式不应用于基础系统。

分区

下一步需要做的决策是如何划分可用的存储空间。在为 Debian 系统决定如何划分存储时,主要有以下三个考虑因素:

  • 高效的备份与恢复

  • 限制空间

  • 磁盘管理

备份与恢复的分区

过去,备份是通过完整分区进行的。大型分区可能需要很长时间才能备份,而且在此过程中系统不能写入分区。随着增量备份和实时备份的出现,这已不再是主要的考虑因素。另一个问题是,当磁盘损坏时,恢复通常仅限于一个分区。现在有许多分区修复工具可以修复大部分问题(虽然并非全部),只有那些无法修复的文件才需要恢复。

尽管如此,限制损害并集中恢复焦点仍然是有用的,并且依然是一个有效的考虑因素。

限制空间的分区

一些管理员使用分区来限制某些目录的可用空间。一个很好的例子是邮件队列目录。大规模的垃圾邮件攻击可以迅速占用大量磁盘空间。为队列目录使用单独的分区将限制队列文件的总空间,而当空间用尽时,生成的错误会提醒管理员这一情况。

Linux 的账户配额系统可以在不使用分区的情况下处理这种情况,但一些管理员仍然偏好使用分区的硬限制。

磁盘管理

除了备份、恢复和损害限制外,根据磁盘如何分区,可能会有不同的管理功能。特别是,使用一个完整的磁盘分区可以使管理员避免在一个分区填满且需要更多空间时修改分区大小。这也是为什么单个磁盘分区(加上交换空间)常常被推荐给那些不确定如何分区的新人用户。

注意

早期的 BIOS 系统无法从磁盘的第 1024 个柱面之外的位置启动。因此,曾经需要在该限制以下创建一个小的/启动分区,以便系统代码(能够访问更大区域)能够启动。

逻辑卷管理

逻辑卷管理,或称LVM,是一个几乎专属于 Linux 的格式。它是分区的替代方案,使得空间管理更加简便。逻辑卷可以随意调整大小,并且可以跨多个磁盘扩展。它们可以在不中断服务的情况下迁移到不同的磁盘(实时迁移)。此外,它还具有类似于 RAID 0 和 RAID 1 的条带化和镜像功能。

LVM 比基础分区更复杂,通常只在大型存储安装中使用。

注意

从技术上讲,LVM 是一个覆盖物理磁盘分区的结构。

交换分区

如果可用,当需要将内存分页到磁盘时,Linux 会使用交换文件或交换分区。随着廉价内存的出现,这种分页操作通常不常发生,唯一的例外是:系统休眠。在这种情况下,系统暂停运行并将内存内容写入磁盘,然后关机,以便在恢复时从保存的状态继续运行。虽然这通常与笔记本电脑系统相关,但服务器有时也会使用这一功能。

交换文件是在现有文件系统中创建的单一文件,而交换分区则是经过特殊格式化的磁盘分区。一般来说,交换文件仅在某些原因需要额外交换空间时使用,因为它具有所在文件系统的所有额外开销(元数据、日志、分配等)。

除非管理员非常确定系统永远不需要交换到磁盘或不需要休眠功能,否则建议将交换分区的大小设置为已安装内存的大小。

注释

固态硬盘SSD),即所谓的闪存驱动器,曾被认为是一个例外。因为如果将交换文件放在这样的驱动器上,有限的写入周期会被视为一个问题。然而,随着现代闪存技术的发展,这已不再是问题,特别是因为当前系统的大量内存大大减少了交换操作的需求。

选择分区方案

每个磁盘的单一分区(加交换空间)方案如今是最常见的,因为它简单易创建和管理。在之前提到的特殊情况下,可能会使用多个分区,尽管一般来说,当前备份工具的质量和速度已经将对单独分区的需求降到最低,尤其是出于备份效率考虑。 如果系统有多个磁盘,并且在硬件更改时可能需要调整大小或进行实时迁移,则应考虑使用 LVM。

一般来说,Debian 的默认设置遵循最佳实践。通常这意味着单一的根分区和单一的交换分区。如果管理员想要多个分区,但不确定需要的大小,并且不想使用 LVM,那么多分区设置的默认配置是一个不错的起点。

注释

接受单根分区和单交换分区的默认设置的例外情况是后面讨论的磁盘加密。如果通过 Linux 内核实现,则需要一个未加密的/boot 分区。

加密

在安装前需要做出的最后选择是是否加密磁盘内容。主要有两种选择:磁盘加密和目录加密。

提示

在某些国家,加密受到法律限制。请了解您所在司法管辖区的法律!

为什么要加密?

加密的主要原因之一是为了防止未经授权的访问,从而保护私人和敏感数据的安全。例如,笔记本电脑经常被盗,且其内容在一些广为人知的案例中已经被公开或用于有害或非法的目的。另一方面,服务器通常不会被盗,但它们有多个用户,尽管 Linux 权限系统可以防止未经授权的访问,但黑客仍然有绕过它的方法,并且他们不断尝试。例如,如果某人能够获得 root 权限,不论是作为系统管理员合法获取,还是通过利用未修补的软件安全漏洞非法获取,那么系统中的所有内容都可以被读取/写入。或者,如果用户在设置权限时不小心,可能会无意中允许其他用户访问。在所有情况下,通过加密可以防止任何没有正确密钥的人访问。

磁盘加密

磁盘加密有几种类型。完全磁盘加密,其中存储设备的所有内容都被加密,由磁盘驱动器本身或系统主板上的硬件处理。这是因为解密磁盘所需的代码不能真正存储在磁盘上,因为它将是加密的形式,无法在解密之前加载。由于这种方法依赖于主板或磁盘软件,而这些因制造商不同而有所不同,因此在此不做详细介绍。

注意

确实存在一种非硬件的方法,即使用未加密的 USB 启动盘或其他介质来提供启动代码,但这需要特殊的步骤来创建启动介质,相关内容在此也不做介绍。

部分磁盘加密,其中各个分区进行加密,可以由 Linux 直接处理。必须有一些未加密的区域,从中可以加载解密软件和密钥。这通常意味着需要一个未加密的启动分区,或从未加密的 USB 启动盘启动,从而加载初始解密软件,并从加密磁盘链式加载。密钥本身是通过密码或密码短语进行加密的,在启动时需要输入以确保密钥的安全。

一个特殊情况是加密交换分区。如果发生页面交换,或使用休眠(将系统挂起到磁盘),内存中的信息可能会暴露给任何能够读取该分区的人。出于这个原因,许多管理员会加密交换分区。

磁盘加密适用于笔记本电脑,或服务器上包含敏感数据的独立分区。

目录加密

另一种替代方法是加密文件系统的部分内容,通常是某个目录及其下属的所有内容,使用 Linux 的特殊功能,使得加密和解密由内核或后台的特殊软件自动处理。这样,就不会影响启动(只要启动目录没有被加密)也没有安装问题,因为它是在安装后进行配置的。目录加密适用于存储敏感信息并位于目录层级某些特定部分的服务器。

Debian 提供了几种用于此类加密的包。最常用的两种是 encfs 和 cryptsetup。

选择加密

磁盘或目录加密有两个主要缺点。第一个可能是最严重的;如果密码被遗忘,数据将永久丢失且完全无法恢复,除非有未加密的备份(或者备份是加密的,但密码没有丢失)。第二个缺点是性能。大多数软件加密模块表现良好,但无论如何都会有一定的开销,尽管这种开销可能是最小的。硬件加密,例如由主板或磁盘控制器或硬盘本身提供的加密,一般没有显著的开销。

提示

最佳做法是评估加密的缺点是否超过系统被破坏或盗窃可能带来的潜在损害。

一般来说,包含敏感信息的笔记本电脑以及包含敏感信息并且有多个用户的系统,或者可能会被黑客访问的系统(例如必须对外公开以执行其功能的 Web 服务器),至少应使用目录加密。磁盘加密,尤其是硬件加密,效果更好。

大多数公司政策要求笔记本电脑进行部分或完全(如果可用)磁盘加密,并要求公共服务器至少进行目录加密。

安装 Debian

实际安装过程非常简单,且被认为是最容易进行基础安装的发行版之一。启动安装盘,回答必要的问题。安装过程中通常提供帮助按钮,以便获取额外的信息。此外,标准和高级安装主题(包括本章讨论的内容)在 Debian 当前版本的安装指南中有详细介绍,指南可在www.debian.org/releases/stable/installmanual找到。

提示

推荐的做法是仅安装基本系统,并在系统启动后使用包管理器安装额外的软件。但是,在安装过程中,可以选择任务来安装额外的软件类别(例如安装桌面环境,包括 KDE、GNOME、XFCE 或 LXDE,“笔记本电脑”任务安装常用于笔记本电脑的软件等,所有这些都在安装指南中有详细描述)。这样做会安装一个标准的附加软件集,适合大多数用户的需求。

摘要

在安装 Debian 或任何 Linux 发行版之前,管理员应知道是否将使用单系统启动还是双系统/多系统启动,以及他/她的引导固件是 BIOS 还是 UEFI。还应该大致了解引导代码的放置位置、将使用的文件系统类型以及分区方案的一些想法。如果不确定,可以安全地采用 Debian 安装程序提供的默认设置。如果将使用全盘加密,则设置取决于硬件实现,并且可能需要在安装之前进行设置。目录加密可以在安装后设置。

一旦您的系统设置完成,下一个重要问题是安装额外的软件包,这将引导我们进入下一章关于软件包管理的内容。

第三章:包管理

您已经安装了基础系统,现在是时候安装额外的软件了。或者,如果您在安装时选择了一些任务,您可能想查看已安装的软件,并可能删除一些您不会使用的。也许您的老板要求提供已安装软件的报告。或者安全更新呢?

所有这些以及更多内容,都是 Debian 包管理系统的范畴。在本章中,我们将介绍包管理器、软件选择和维护、如何更新系统以及如何设置自动更新。

注意

针对初学者的注意事项

本节假设您已经熟悉使用 root 账户。有关访问 root 账户功能的信息,请访问wiki.debian.org/Root,以及 Debian 参考手册中的www.debian.org/doc/manuals/debian-reference/。有关本章中提到的命令(以及大多数 Linux 命令)的快速帮助,可以通过在命令行中执行man <command name>info <command name>来获得,或者使用大多数图形应用程序中提供的帮助按钮。Debian 参考手册还包含有关使用本章中包管理器命令的更详细信息。

包管理器

Debian 包管理器最初是作为一个简单的命令行工具dpkg开始的,另附一个名为dselect的工具,通过基于菜单的 curses 界面提供更复杂的包选择和依赖解决方案。最终,开发了更多的工具来提供更好的界面、更好的自动依赖解决,或两者兼具。当前的标准包管理器是 Synaptic,这是一个完全成熟的 GUI 应用程序,运行在图形窗口管理器中,提供广泛的选择和报告功能。

我们从头开始。

dpkg 和 dselect

这些是 Debian 最初的包管理工具。dpkg命令仍然完成所有工作,因为所有更新的工具都将其用作后端。因此,它具有安装、删除、配置和报告包所需的所有功能。它是一个命令行工具。

dpkg 的一个限制是它在依赖关系检查方面做得很少,除了在出现依赖问题时提供错误信息外。它要求用户查看依赖报告并在安装过程中包含必要的包。另一个限制是 dpkg 只对已经下载的包有效。然而,这两个限制都可以通过 dselect 工具来解决。

dselect 命令是一个基于菜单的工具,提供访问 Debian 仓库中软件包的信息,并检查和帮助解决软件依赖关系。这大大简化了软件包选择和安装的过程。一旦选择了软件包并且所有依赖关系都得到满足(无论是自动完成还是通过用户帮助),dpkg 会自动运行以执行实际安装。

高级软件包工具

高级软件包工具APT)是为了提供更好的命令行工具而开发的,它可以提供下载和依赖关系解决功能,且无需单独的工具进行安装。可以把它看作是一个全能的命令行工具,能够选择、安装或移除软件包,并自动解决依赖关系。

APT 实际上是一套包含 apt-get 的实用工具集合,apt-get 是基本的软件包安装工具,还包含其他几个以 apt 为前缀的命令行工具,提供附加功能,例如报告可用软件以及其他基本的本地仓库维护功能。

注意

man apt 命令是一个很好的起点,它引用了其他手册页以提供附加命令。Debian 的参考手册也包含了很多关于这些及其他软件包管理命令的信息。

这个工具快速且除非在特殊情况下,否则无需用户干预即可处理依赖关系。它是用于自动化、无人值守的软件安装和更新的基本工具。

aptitude

aptitude 是 APT 工具集的前端,具有附加功能,使其更像 dselect,提供更精细的依赖关系检查,并通过用户帮助而非自动化方式解决依赖关系。因此,它在依赖关系解决时,有时比 dselect 或 apt-get 更成功,能够以更少的重大软件变更解决问题。像 dselect 一样,它是基于菜单的(使用 curses 界面),也有命令行功能。由于有时需要用户协助来解决依赖关系,它不太适合无人值守或自动化的软件更新。然而,它通常会找到更简单的解决方案,涉及较少的变更,和 APT 相比。

Synaptic

Synaptic 是一个没有命令行功能的完整图形用户界面的软件包管理器。它提供了 aptitude 大部分功能,并且拥有 dselect 的许多仓库处理功能。像基于菜单的 dselect 和 aptitude 工具一样,它提供了一个将软件按兴趣分区的列表,例如数据库、开发、编辑器等,允许管理员更有效地浏览可用软件。它还具有搜索功能,便于查找特定用途的软件包。

提示

最佳实践如下:

  • 对于一般使用——Synaptic

  • 对于自动化安装——APT

  • 对于困难情况中的依赖关系解决——aptitude

软件包选择和维护

Debian 软件按发行版进行分组。一个发行版中的所有软件都可以作为一套购买的或下载的媒体(CD、DVD,或者在 Debian 7 中,新加入了蓝光光盘)提供,或者作为按包分组的单独软件包在在线仓库中提供。虽然dpkg仅适用于已下载的软件包(或本地挂载的媒体上的软件包),其他的包管理工具支持离线媒体、本地和远程仓库,并且这些都需要进行配置。

配置媒体或仓库

媒体或仓库的所有配置都位于/etc/apt目录下,具体在一个名为sources.list的文件中,此外,/etc/apt/sources.list.d目录下的所有以.list扩展名结尾的文件也包含配置。这些文件可以通过你喜欢的编辑器手动修改,也可以通过各种 APT 工具(如apt-add-repositoryapt-spy)进行操作,或者通过 Synaptic 图形界面中的菜单项来进行配置。关于每种方法如何工作的详细信息可以在各种手册页中找到,例如sources.listapt-add-repositoryapt-spy的手册页,或者 Synaptic 的帮助文件中也有相关内容。然而,由于它们都依赖于相同的配置文件和格式,因此所需的条目是相似的。

每行包括指示仓库是包含二进制包还是源代码包(从源代码包可以构建二进制包)、仓库的位置、发行版的身份标识以及可以选择软件的部分。通常,你在安装过程中使用的媒体来源条目会在安装时自动添加,如果在安装过程中还使用了在线仓库,也会同时添加相关条目。

所有软件包源通过 URI 进行标识,具体描述可以参考sources.list的手册页。发行版通过其发行版名称进行标识(例如 Debian 6 的squeeze,或 Debian 7 的wheezy),也可以通过类似“stable”这样的通用术语进行标识,指当前的稳定版。

说明

当前的 Debian 稳定版是 Debian 7,代号为 wheezy,于 2013 年 5 月 4 日发布。撰写时,stable 是 wheezy 的同义词。Debian 的发布版名称是为了简化各种发行版的镜像过程。迄今为止的代号均来源于电影玩具总动员。这一传统显然始于 1996 年,当时在 Pixar 工作的 Bruce Perens 接管了 Debian 项目。

综合来看,可能出现在/etc/apt/sources.list中的一组仓库会是如下所示:

# deb cdrom:[Debian GNU/Linux 7.0.0 "Wheezy" - Official amd64 \ NETINST Binary-1 20130504-14:43]/ stable main
deb http://ftp.us.debian.org/debian/ wheezy main non-free contrib
deb-src http://ftp.us.debian.org/debian/ wheezy main non-free \ contrib

deb http://security.debian.org/ wheezy/updates main contrib \ non-free
deb-src http://security.debian.org/ wheezy/updates main contrib \ non-free

# wheezy-updates, previously known as 'volatile'
deb http://ftp.us.debian.org/debian/ wheezy-updates main contrib \ non-free
deb-src http://ftp.us.debian.org/debian/ wheezy-updates main \ contrib non-free

说明

初学者说明

示例中的某些行过长,因此分为两行,使用常见的约定方法,即在第一行的末尾添加反斜杠(\)表示该行被继续。实际上,在 APT 源配置文件中,这些行不应被拆分。

让我们逐行分析。

第一行以#开始,表示该条目被禁用。此条目由网络安装创建,在这种安装中,一个最小的 CD 被挂载,并安装了基础软件,以便剩余的软件可以从后续行中列出的在线仓库安装。只需要主部分,如行末所示。

接下来的两行是二进制包(deb)和源代码包(deb-src),可以从 HTTP 服务器(ftp.us.debian.org/debian)获取。该发行版是 wheezy,所有三个部分——main、contrib 和 non-free——都可以使用。在主仓库行之后是两行用于二进制包和源包更新的内容。这里是获取稳定版本安全更新的地方。

提示

即使你更倾向于使用媒体进行发布,而不是在线仓库,你也应该包括更新仓库,因为这是获取必要的安全修复的唯一途径。

最后是一个注释,还有两行曾经被称为“volatile”仓库的内容,现在仅由发行版代号后跟-updates来表示。这个仓库包含在发行版生命周期中经常更新的包,更新频率远高于安全更新仓库。包含病毒定义的包就是该仓库中的软件示例。

虽然配置仓库的各种方法略有不同,但无论你使用哪种方法,所需的基本信息都是相同的。此外,由于所有工具都使用相同的配置文件和格式,通过一种方法输入、删除或修改的信息会立即在所有工具中可见。

所有前面的行都是由安装程序预配置的,无需修改。然而,通常有理由修改或添加仓库。你可能想添加一些 Debian 中无法直接获得的软件仓库,或者修改 URL 以使用不同的、更高效的服务器或不同的访问方式。

注意

例如,HTTP 对网络延迟或错误的抵抗力更强,而 FTP 稍微快一些。此外,并非所有镜像都支持这两种方法,因此如果你更换服务器,可能也需要更改访问方式。

有一些非 Debian 仓库包含不在标准 Debian 发行版中的软件。通常,这是由于许可问题,或者因为开发工作在 Debian 项目的政策之外进行,并且没有赞助商将其集成到 Debian 中。以下是一些更有用的仓库:

  • Deb Multimedia:顾名思义,这是一个主要用于多媒体的包,不能包含在正常的发行版中。

  • Webmin:这是一个基于 Web 的系统管理软件。

  • Oracle:提供 Oracle Express 软件。

  • Skype:提供 Skype 软件。

  • MongoDB:这是来自 NoSQL MongoDB 项目的软件

作为示例,以下是前面提到的 Webmin 仓库的 /etc/apt/sources.list.d/webmin.list 文件:

deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository \ sarge contrib

通常,提供此类仓库的网站会包含如何配置其仓库的源列表文件的说明。

发行版名称的重要性

除了添加非 Debian 仓库之外,通常进行的一个更为微妙的更改具有非常重要的意义。请注意,在之前的 Debian 发行版 sources.list 中,大多数行的发行版名称是 wheezy。这意味着通过包管理器可用的软件包将始终来自 Debian 7 版本。一些管理员将发行版名称更改为 stable。这既有优点,也有缺点。

一个优点是,当发布新主版本时,您的包管理器会立即识别并更新软件包列表和依赖关系。相关的缺点是,主版本通常会涉及软件包依赖关系的重大变化。虽然包管理器可以处理这些变化,但此类重大变化通常会导致许多新软件包被安装以满足新依赖关系,许多旧软件包由于依赖关系变化或过时而被删除,同时主版本的变化通常也会改变软件的行为方式。这些变化可能对服务器操作、开发人员或用户的使用习惯造成很大干扰。

提示

为确保稳定性,最佳做法是保持官方发行版名称不变,直到您准备好升级到下一个版本。然后更改包管理器配置中的名称,并执行手动升级。

选择软件包

一旦您配置了所需的仓库,您需要获取有关仓库中内容的信息。这不仅包括软件包列表,还包括软件包描述、内容和依赖关系。这可以通过更新软件包缓存来完成,之后您就可以浏览、选择、安装、升级和删除软件包。

更新您的软件包缓存

软件包信息的更新只需在 Synaptic 中使用刷新菜单项,或使用 aptitude 或 apt-get 的 update 命令来更新软件包信息缓存。应定期执行此操作,以确保您所拥有的可用软件包信息是最新的。一旦您配置好了仓库并更新了软件包信息缓存,就可以根据需要选择并安装来自任何一个或所有仓库的软件包。选择软件包有两种基本方法:命令行和选择列表。

命令行选择

这是安装一个或几个包及其依赖关系的最简单和最快的方法,但需要您知道要安装的包。有几个工具可以用来搜索包的名称和描述,这将为您提供查找正确包名称的方法。其中最常见的是apt-cache。一旦您知道要安装的包或包,您可以使用 apt-get 或 aptitude 或 dselect 的命令行格式快速下载和安装这些包。

选择列表

aptitude 和 dselect 都提供了基本的交互界面。您可以浏览按部门分类的可用包列表,或者可以使用多种标准搜索包。界面基于简单的 curses 库,有时可能显得笨重,但是相比之前提到的命令行工具,它是一种改进。这些界面(以及命令行工具)的一个优点是它们可以在终端环境中使用,无需安装图形桌面环境。它们经常用于安装了高性能服务器的地方,其中安全性或性能原因未安装图形桌面环境。

另一方面,Synaptic 提供了一个完整的 GUI 界面,用于浏览、搜索和选择包,以及配置存储库、选择安装选项,并提供有关可用和已安装包的信息。它需要图形桌面环境,例如 GNOME 或 KDE,才能运行。

注意

Synaptic 可以通过安全外壳连接远程运行,从已安装图形窗口管理器的系统中使用。一些管理员在没有图形桌面的服务器上安装 Synaptic,并以这种方式使用它,以避免服务器本身图形环境的安全或性能问题。

元包

最有用的包类型之一称为元包。这些包本身不包含任何软件,但需要安装其他包,因此为特定目的提供了统一的软件集。这是因为虽然元包中没有实际软件,但包管理器会选择并安装所有必需的依赖包,从而在单个简单的安装步骤中提供完整的功能集。

经常有多个略有不同名称的包,安装了稍有不同的依赖关系。GNOME 就是一个很好的例子。您可以安装 GNOME 元包,它将提供完整的 GNOME 安装,包括许多附加功能。或者,您可以选择安装gnome-core,它只提供基本的桌面环境,并从提供附加功能和功能的其他包中进行选择,例如:

  • evolution(类似于 Outlook 的电子邮件软件)

  • gnome-documents(文档管理功能)

  • gnome-games

  • gnome-media(多媒体应用)

  • libreoffice-gnome(办公套件)和其他

元软件包的一个小问题是,找不到它们的简便方法。许多元软件包在其描述中确实包含“meta”字样,这可以帮助某些搜索,但这并不总是适用。前面提到的 GNOME 软件包在 Debian 7 中就没有遵循这一惯例。不过,它们通常还是比较明显,且不难找到。

关于依赖项解决

dselect、APT、aptitude 和 Synaptic 都提供某种形式的自动依赖解决。在少数情况下,依赖无法自动解决,需要用户干预。aptitude 会计算出替代方案并要求用户选择。APT 和 Synaptic 通常需要用户手动将软件包添加到命令行或选择列表中。

这种问题通常只出现在测试版和不稳定版本中,软件依赖项会不断更新,某些问题可能直到所有相关软件都已更新并放入发布版后才会完全解决。然而,这个问题也常见于稳定版,原因是依赖于虚拟软件包

虚拟软件包并不是实际软件包的名称,而是一个库或功能的名称,多个软件包都可以提供这个功能。由于通常有多个软件包可以满足该依赖项,用户必须手动选择一个进行安装,之后其余的原始依赖项可以自动解决。这种情况在标准升级过程中很少发生,在发行版升级过程中几乎从不发生,因为这些虚拟软件包会自动选择。

注意

通常,你只会在手动安装单个软件包时,且很少发生此问题。

删除软件包

删除软件包也可以通过任何软件包管理工具来处理。然而需要注意的是,apt-get 和 Synaptic 在删除依赖它们的软件包后,不会自动移除这些依赖项。应使用命令apt-get autoremove来执行此操作,无论是通过哪个包管理器安装和删除软件包。aptitude 会自动完成这一操作。

保持最新

在安装完系统所需的软件后,定期检查更新是一种良好的做法。特别是,安全更新会在发现 Debian 软件的安全漏洞后尽快发布。

更新 Debian 系统很简单。在更新软件包缓存(参见前一节关于更新你的软件包缓存)以便它包含仓库中所有软件的最新信息后,可以通过 Synaptic 中的“标记所有升级”菜单项,或使用 apt-get 或 aptitude 的upgrade命令来更新所有有新版本的软件。

自动更新

可以执行自动、无人值守的系统更新,但也存在一些潜在的问题。设置过程非常简单,只需安装unattended-upgrades软件包。如果在安装过程中没有询问是否启用自动安全升级,可以运行命令dpkg-reconfigure -plow unattended-upgrades

一般来说,只有安全升级会被自动安装,这将最大限度地减少潜在问题,包括修改过的依赖项和修改软件配置或操作方式的变化。可以通过修改/etc/apt/apt.conf.d/50unattended-upgrades中的配置文件来允许其他升级。该文件中有注释,帮助识别所需的修改,通常只需要去掉希望启用的行前面的//。请注意,启用安全更新以外的任何内容可能会导致错误(当遇到依赖问题时)或系统中断(当升级修改软件行为或配置时)。特别是使用稳定版名称时,当发布新稳定版时,可能会带来非常大的变化。

提示

最佳实践是只允许自动安装安全升级(使用默认配置)。所有软件包的信息缓存无论如何都会更新,因此你可以定期手动升级其他软件包,以便在出现任何异常升级问题时进行处理。

外部软件包

如果在 Debian 中没有某个软件包,应该怎么办?有几个选项。之前提到的一个方法是将非 Debian 仓库添加到仓库配置中。在进行 Synaptic 刷新、apt-get 或 aptitude update 后,仓库中的所有软件包信息将可以被 Debian 包管理器访问。

然而,如果该软件不包含在任何仓库中,仍然有几种可用的选项。

注意

其实还有一个额外的选项:直接从原始来源安装该软件。这种方法不推荐使用,因为它将软件完全置于包管理系统之外。涉及必需库的未来系统升级可能会导致软件出现异常行为,甚至完全损坏,且查找原因可能非常令人沮丧。此方法应仅作为最后手段使用。

Alien

如果某个软件包存在于其他 Linux 发行版中,通常可以将其转换为 Debian 包。这可以通过一个名为alien的软件包来完成。Alien 提供了命令来转换多种包格式(包括 Red Hat RPM、Stampede SLP、Slackware TGZ、Solaris PKG 和 Debian DEB)。

提示

在使用 alien 之前,请注意查看手册页中的警告。

通常,转换过程相对简单。虽然结果无法保证,但转换后的包通常可以在 Debian 上成功安装。任何出现的问题很可能是由于库依赖名称不同,或甚至是软件版本标识的差异。

然而,当发生这种情况时,所有的工作并没有白费。Alien 可以执行部分转换,本质上是在它创建了一个临时目录后停止,通常该目录是从中构建 Debian 包的目录。然后,您可以进入该目录并进行必要的修改,之后手动完成构建。

手动构建

您也可以自行构建 Debian 包,无论是从部分 alien 转换(如前所述)还是从原始软件开始构建。该过程可能从简单到复杂不等,取决于包要提供的内容,并且在 Debian 维护者指南和 Debian 政策手册中有详细说明,这些手册可以在线获取或作为可安装的包在 Debian 中使用,也可以在许多其他在线资源中找到。一个好的在线起点是 Debian 打包 Wiki 页面:wiki.debian.org/HowToPackageForDebian

提示

手动构建,无论是从头开始还是从部分 alien 转换开始,都是处理无法以标准 Debian 格式获取的软件的推荐方法。

具体细节因实际使用的软件而异。通常,包是从源代码构建的,但也可以仅从二进制软件版本构建包。一般的构建过程如下:

  1. 获取源代码(或二进制文件),并将其放入适当的包构建目录中。

  2. 创建必要的 Debian 打包文件,包括必要时的额外文档、特定于 Debian 包的可选脚本文件、控制打包过程的文件,以及 Debian 包管理器所需的文件。

  3. 测试构建。如果必要,添加补丁以修正打包中的任何问题,或是为了在 Debian 环境中正确编译或运行软件所需的补丁。

  4. 重复步骤 2 和 3,直到最终产品在您的发行版上安装并运行。

可供 Debian 开发者使用的软件包已经包含在发行版中,任何人都可以使用。用于构建自己包的主要工具包括:

  • build-essential(构建 Debian 包所需的核心包)

  • dpkg-dev(包开发工具)

  • fakeroot(允许用户像 root 用户一样进行构建)

  • dh-make(用于在 Debian 包构建目录中创建文件的工具)

  • debhelper(Debian/rules 文件的辅助程序)

  • cdbs(可选的、用于 Debian/rules 文件的附加辅助程序)

  • quilt(Debian 包补丁管理)

几乎不可能给出任何通用示例,因为每个软件包在除了第一步之外的所有步骤中都会有所不同。然而,网上有许多很好的示例和教程,而且所有 Debian 发行版中包含的软件包的完整源代码都可以供任何人查看和学习。

升级你的系统

如前所述,更新系统是非常简单的。升级系统到下一个官方版本的命令(或菜单项)与标准更新命令不同。apt-get 命令dist-upgrade或 aptitude 的full-upgrade会在更新软件包信息缓存后,执行必要的特殊计算,以便升级到下一个主要版本(通过正常的update命令,如果你已将发布名称配置为稳定版,或者在更改为新的发布名称并执行update命令后)。之所以需要这些特殊命令,是因为官方发布版本之间存在包依赖关系的重大变化,某些软件配置的方式,以及淘汰过时软件包的方式,这些都需要特别的计算,而不是普通包升级所涉及的内容。

注意

Synaptic 也可以处理完整的发行版升级,但它并不是通过不同的命令来处理,而是在首选项中将‘智能升级’设置为默认升级时进行此类升级。

升级前

阅读发布说明! 这一点必须强调。Debian 开发者会仔细地将版本间的变化和升级过程前后所需的特别步骤包含在发布说明中。

处理重大升级有两种方式:一次性升级和分步升级(我们称之为部分升级)。一次性升级基本上涉及一个更新所有软件包的命令。部分升级方法则是选择一组软件包,更新它们及其依赖关系。这将依赖关系计算减少到一个更易处理的子集。通常,选择其中一个元包,如 GNOME 或 Apache2,或选择一组软件包进行更新,并使用install命令通过 apt-get 或 aptitude,或在 dselect、aptitude 或 Synaptic 中选择软件包。升级后,选择下一组软件包进行更新,直到所有软件包以及所需的新依赖关系或删除项都被更新为止。在大多数软件已经升级后,剩下的升级可以一次性处理。

选择软件包的子集相当简单。apt-get dist-upgrade 命令和 aptitude full-upgrade 命令将提供关于将添加、升级和移除的信息,并要求您确认选择。在这一点上,您可以告诉它们不要执行升级,然后检查建议升级的软件包,并选择一个或多个与 apt-get 或 aptitude 命令行 install 命令一起使用(这会升级已安装的软件包)。类似的过程适用于 Synaptic。

提示

简化升级过程的一种方法是首先执行标准的软件包升级。这将执行那些不需要进行主要依赖更改的简单标准软件包升级。完成此步骤后,完整的发行版升级将涉及更少的软件包。

升级期间

你已选择升级的软件包(或者正在执行一次性升级),并开始了这个过程。首先要注意的是哪些软件包将被移除。如果其中有一个或多个是你需要的软件包,请与要安装的软件包进行交叉检查,看看它们是否被一个具有类似功能的新软件包替代。如果没有,记得在升级完成后另行安装所需的软件包。

在发行版升级期间,系统通常可以继续运行,尽管当某个软件包要求重新启动某些服务或加载库时会有轻微的中断。

提示

这些中断比正常升级更严重,特别是在一个软件包被移除并替换为完成相同功能的不同软件包,或者因其过时而被移除的情况下。因此,您可能希望在升级之前通知用户,并将系统活动保持最低限度。

下一个要注意的是升级说明。一些软件工作方式的重大更改会显示出来(并发送到 root 账户以便稍后检查),以便通知安装程序需要采取的必要的安装后步骤。

最后,当管理员对软件包的配置进行更改后,升级过程将通知他/她非默认配置,并要求帮助解决差异。这涉及保留当前的本地版本、替换为开发者版本,或者暂停安装以便手动检查和解决差异。

提示

常常有新的选项或默认设置应添加到旧的配置中。最佳实践是立即解决这些更改,或保留旧的配置,并稍后与新的默认配置进行交叉检查(新的默认配置以修改后的名称放置在同一目录中,以使其处于非活动状态但仅供这个原因使用)。

升级后

一旦分发版升级完成,仍然有一些步骤需要执行。首先,如果在安装过程中未解决配置文件的问题,现在是时候进行处理了。新文件与旧文件放在相同的位置,且文件名带有dpkg-new扩展名。如果安装程序选择了开发者版本,旧配置文件则带有dpkg-old扩展名。无论哪种情况,管理员可以检查它们的差异,并进行必要的更改。

接下来,如果软件操作发生重大变化,任何使用该软件的应用程序都应该进行修改,或者更新配置以尽可能恢复旧的行为。一个很好的例子是 PHP 操作方式的重大变化,这通常需要重新编写使用了已更改特性的网页,或者在支持以遗留模式运行时修改配置。其他重大变化可能会影响用户,例如从 GNOME 2 到 GNOME 3 的变化,这涉及到用户体验的重大变化。此外,发布说明中提到的任何后安装步骤也应该执行。

总结

Debian 中的包管理器使得升级软件包变得非常简单,甚至可以升级到新的主要版本级别。升级不需要长时间的服务器停机,尽管如果涉及到修改软件配置或行为的重大软件更改,可能需要在升级后进行额外的工作以恢复服务到正常状态。可以添加非 Debian 仓库,以便包管理器可以像更新官方 Debian 包一样轻松地更新非 Debian 软件。如果某个软件没有 Debian 格式,可以使用 Debian 开发者使用的相同工具进行打包,这样 Debian 的包管理器也能处理它。

通常,在安装或升级之后,需要执行一些额外的步骤。最主要的是包配置,我们将在下一章中详细讨论。

第四章:基本软件包配置

Debian 在很大程度上依赖每个软件包的上游开发者所使用的配置方法,并通过 Debian 开发者对配置的修改和补充,来标准化软件包配置,从而让管理员的工作更加轻松。在本章中,我们将介绍配置文件的标准位置、可用的配置辅助工具、配置文件管理的趋势以及一些示例。

配置文件

大多数配置文件位于/etc目录层次中。通常,大多数软件包将其配置文件放置在一个以软件名称命名的子目录中。如果上游开发者没有这样做,Debian 软件包通常会修改其行为。一个很好的例子是BIND DNS 服务器软件。传统上,基本配置文件放置在/etc/named.conf中,其他配置文件放置在/var/lib/named目录中。Debian BIND 软件包将所有配置文件放在/etc/bind9及其子目录中。

此外,还有一个/etc/default 目录,其中包含常见的修改选项,这些选项被放置在与软件包名称匹配的文件中。同样,以 BIND 为例,文件是/etc/default/bind9,其中包含两个简单的选项:是否使用resolvconf动态解析器,以及服务器应使用的运行选项。我们将首先介绍这个目录。

/etc/default

该目录中的配置文件旨在控制在/etc/init.d中找到的标准初始化脚本(即init脚本)或控制各种系统库的行为。它们包含环境变量定义,这些定义由系统库或init脚本使用,以控制执行选项、软件模块加载以及可以动态控制的其他内容。

对于init脚本使用的定义,变量通常包括要使用的命令行选项的定义。在某些情况下,设置其中一个变量会修改脚本的行为。例如,在/etc/default/bind9中将RESOLVCONF设置为除了no以外的任何值,会导致init脚本使用resolvconf工具,在初始化时为本地回环接口添加适当的解析器行(并在关机时将其移除)。

对于那些应用于系统库的脚本,它们通常定义影响这些库的命令或软件的默认行为。一个很好的例子是/etc/default/nss,它控制名称服务切换NSS)在 GNU C 库中的功能。特别是,它控制库会认为哪些信息是 NSS 调用的权威信息,以及某些函数调用的行为。

注意事项

在某些特殊情况下,默认的定义文件可能不是单一的文件,而是 /etc/default 的一个子目录。这是为了将信息分割成相关变量的组,既便于更新,也便于进行本地修改,而不至于在配置文件被替换时被覆盖。

/etc/<软件包名称>

大多数软件开发者将配置文件放置在 /etc 目录下,这也是 Debian 软件包的标准做法。如果文件相对简单,且只需要一个文件,它通常会直接放在 /etc 下,并以 .conf 扩展名结尾,例如 /etc/inetd.conf 就是 openbsd-inetd 包的配置文件。对于需要更复杂配置的包,通常通过多个配置文件进行配置,这些文件会放在 /etc 的一个子目录下,该子目录通常会以软件包的名称命名。一个很好的例子就是 apache2 包,它的配置文件位于 /etc/apache2 及其子目录中。

在子目录中使用多个文件有多种原因。在某些情况下,是因为原始软件将不同的文件用于不同的目的。在其他情况下,则是为了将配置项组织成更易于管理和理解的组。有时,Debian 开发者还会修改包的配置,进行简化或优化管理。

一个很好的例子就是 Apache。正常的 Apache 配置通常是通过一个单一的文件或多个文件来进行,这些文件会被主配置文件包含。传统上,SSL安全套接字层)证书和密钥,以及虚拟主机配置文件通常存放在子目录中,但所有主要的选项都在主目录中的一个或几个文件中进行配置。实际上,Debian 将配置拆分成多个文件,分布在不同的子目录中。这使得 Debian 能够提供独立的软件包,通过单独的配置文件提供特定功能,这些配置文件会被添加到适当的目录中,而不需要修改主配置文件。此外,还有以 available-enabled- 为前缀的子目录用于模块和虚拟主机。这使得通过简单的脚本可以轻松快速地激活或停用模块和虚拟主机。

注意

由于在稳定版中尚未可用,Debian 开发者在未来的版本中将进一步推广这一概念,提供一个 config-availableconfig-enabled 目录,并允许在不编辑配置文件或安装/移除功能包的情况下激活或停用功能。这个功能可能会在 Debian 8(代号 Jessie)中提供。

初始配置

Debian 的一个稳定性要求是,当安装一个包时,它不应对系统产生不利影响。通常,这只需要提供一个标准配置,比如 Apache 的简单 It works! 页面。然而,在其他情况下,安装过程中至少必须提供一些信息,以创建一个基本的、可用的配置。这个问题通过在安装过程中询问必要的问题来处理,从而创建一个可用的配置。事实上,Debian 开发者为此创建了广泛的 debconf 子系统。

debconf 子系统提供了在安装前、安装过程中和安装后配置包的能力,并且它被集成到所有需要配置的 Debian 包中。它支持多种前端用户界面、可输入到安装过程中的预设答案、一个简单的界面用于提问并提供安装脚本的答案,甚至可以在安装后随时重新配置包。一般来说,这种配置方式只提供最常用的配置选项。更复杂的配置必须通过使用包中提供的任何工具,或直接编辑配置文件来处理。

即使你直接编辑配置文件,Debian 管理员也向开发者传授了各种技巧,以简化这一过程。在某些情况下,他们创建了替代的、更易理解的配置文件,这些文件会被扫描并用于通过包中提供的脚本创建实际的复杂配置。一个很好的例子是 GRUB2 启动加载程序。管理员对 /etc/default/etc/grub.d 中的配置文件进行修改,然后运行 update-grub 来生成 GRUB 用于加载操作系统的实际文件。脚本接着会执行创建和安装配置所需的命令,以及对其他受 GRUB 重新配置影响的文件进行必要的更新。这只是 Debian 开发者和其他第三方创建的各种工具如何简化 Debian 管理的一个例子。

另一个好的例子是 sendmail。管理员通常会修改 sendmail 所需的文件和各种数据库文件,以使其适应大型企业安装。然而,与其编译配置和数据库,然后强制 sendmail 加载新配置,不如使用一个命令 sendmailconfig,它可以一次性完成所有必要的步骤,且对服务器的操作干扰最小。

配置工具

那么,Debian 管理中提供的一些工具有哪些呢?我们已经提到了一些专门用于 GRUB 和 sendmail 的工具。还有许多其他工具处理特定的软件或服务,可能包含在 Debian 包中,或作为单独的软件包提供。然而,在这里,我们关注的是更通用的工具。两个主要工具是dpkg-reconfiguregadmin

dpkg-reconfigure

这个工具重新运行安装过程中运行的相同配置脚本。它从命令行运行,并且可以使用选项来调整提问的复杂度。通常在不需要进行大规模本地修改时使用,管理员只需更新安装脚本提供的基本配置。如果基本配置已被损坏,或者所做的更改导致软件包无法正常工作,这个工具也非常有用,可以将配置恢复到安装后的状态。

如果配置要求包含不常用的选项,或需要进行大规模本地修改,而这些修改通常不会由安装脚本覆盖,通常就没有什么用处,除非仅仅是为了将配置恢复到安装后状态,如前所述。

gadmin

这实际上是一套软件包,每个软件包涵盖一个不同的主要服务。不幸的是,它不像dpkg-reconfigure那样通用,但它确实处理更复杂的配置。以下是 Debian 7 中所涵盖的服务:

  • Bind(DNS)

  • OpenVPN(客户端和服务器)

  • ProFTPD(FTP)

  • RSYNC

  • Samba(Windows 共享)

它是一个基于GTKGIMP 工具包)的图形工具。它的开发目的是在 GNOME 桌面环境下提供一些管理员功能。它将处理相当复杂的配置。

桌面配置

到目前为止,我们一直在讨论服务器配置。用户配置桌面环境实际上要容易一些,因为GNOMEGNU 对象模型环境)和KDEK 桌面环境)以及其他桌面管理器都提供了一整套工具,这些工具集中在一个菜单区域,用户可以轻松地配置桌面外观、行为、窗口主题、登录行为以及与环境相关的系统和会话服务。

其他工具

最后,有一些软件包是专门为配置个别服务而创建的。这些软件包提供图形界面或命令行配置工具,适用于许多其他软件包。由于它们通常由第三方提供,因此这些软件包的复杂性和使用方式各异。可以通过任何支持搜索功能的 Debian 包管理器找到它们。Synaptic可能是最简单的,因为它允许用户在搜索后轻松浏览描述信息。

注意

许多第三方工具并未意识到 Debian 对配置文件布局所做的修改,以简化管理、升级和稳定性。它们通常使用上游的配置文件布局,或者有时甚至是作者认为更好的布局。尽管 Debian 的软件包升级程序会将此视为本地配置文件的修改,但这确实增加了管理员在升级过程中的工作量。在决定是否使用第三方配置工具时,请记住这一点。

下一节将介绍在 Debian 中本地配置的首选方法。

本地配置趋势

由于 Debian 升级通常会影响配置文件,开发者已经制定了降低升级对本地修改配置影响的技术,特别是他们正在提供独立的本地配置文件和特殊目录,帮助在升级过程中保持本地更改。

本地配置文件

许多软件包正在转向多文件配置系统。Debian 开发者正在利用这一特性,通过指示管理员将修改放入 .local 扩展名的文件中来保护本地更改。在其他情况下,比如 Apache 配置目录,文件被放置在指定的子目录中(此例中为 conf.dsites-available),并且可以自由命名,只要不与 Debian 或上游配置使用的文件名冲突。在这些情况下,Debian 开发者修改了配置文件,使其包含命令以包含本地配置文件,并在必要时覆盖标准文件。无论如何,成熟的管理员在可能的情况下会使用这样的独立文件来进行本地配置更改,这样它们就不会受到软件包更新的影响。

这种本地配置文件分离的副作用之一是更新过程将不再询问你是否安装开发者的配置、保留本地配置或将两者合并。通常情况下,这是你所希望的,因为你的本地更改将保持不变,并且任何新特性都会有合理的默认设置,不会引发问题。然而,在可能会有重大配置默认更改的情况下,升级过程中会弹出描述变更的窗口(需要确认),并且也会发送电子邮件到 root 账户。尽管如此,即便没有这些提示,完成升级后,浏览软件包文档以获取配置建议,并检查配置文件中的明显变化,仍然是一种良好的做法。

配置子目录

许多软件包不仅支持独立的本地配置文件,还提供了一个特殊的子目录,帮助组织和管理多个配置文件。在某些情况下,这些目录中的文件需要特定的扩展名才能被认为是激活或启用的。这使得启用或禁用软件功能变得更为简便。在其他情况下,目录中的所有文件都被视为配置的一部分,并使用不同的方法来启用和禁用特定的文件或功能,例如 Debian Apache 软件包中使用的方法。

无论如何,Debian 开发者通常建议在添加自己的文件时要小心,通常是通过在文件名中包含 "local" 字样,或者将其放置在专门为本地文件提供的目录中。

配置建议

那么,如何知道提供了哪些配置设施,以及推荐的本地配置方法是什么呢?最好的起点是软件包中随附的 README.debian 文件。根据 Debian 政策 手册的要求,该文件会解释任何特殊的配置问题,说明 Debian 中的配置与原始软件开发者的配置方式有何不同,以及处理本地配置的推荐方法。它还会解释 Debian 为帮助软件配置而添加的任何工具。该文件位于 /usr/share/doc/<package name> 目录中,该目录还包含任何原始软件文档以及 Debian 开发者添加的文档。几乎所有 Debian 软件包都有这个标准目录,并且对于那些有大量文档或特殊配置问题的软件包而言,这是必需的。

注意

一些软件包的文档非常详尽,以至于文档被拆分成独立的软件包,安装在单独的系统上,以便提供更快速的本地访问,无需占用已安装软件的服务器空间或处理能力。

让我们来看一些涉及较为复杂配置文件集的示例。

Apache 配置

在这里,我们将查看 Apache Web 服务器软件的配置,并了解 Debian 如何处理它。关于配置实际功能的细节将不在本节中讨论,因为这些内容较为复杂,并且已在软件包文档中详细描述。然而,我们将讨论文件的设置方式,以及 Debian 提供的配置维护程序。

关于 Debian Apache 软件包,首先要注意的是,服务器的类型(线程型、非线程型、事件驱动型或多用户型)是通过安装哪个软件包来满足主 apache2 元包中的服务器依赖关系来确定的。此外,文档被拆分到一个单独的软件包中,该包将 Apache 手册放置在 Web 目录中,并添加必要的配置文件,以便 Apache 可以将它们作为网页提供。

配置文件

基本配置文件的布局如下所示,并且也记录在 /etc/apache2/apache2.conf 中:

配置文件

显示的文件是通过主配置文件或它所包含的文件中的命令包含的,因此它们被视为实际 Apache2 配置的一部分。请注意,还有一个 sites-available 和一个 mods-available 目录,这些目录不会自动包含在配置中。它们中的文件通过从 mods-enabledsites-enabled 目录指向它们的链接被包含,我们将在稍后讨论这些内容。

通常,配置更改将仅限于 ports.conf 文件、在 conf.d 中添加或修改文件,以及 mods-enabledsites-enabled 目录中的链接(以及它们指向的文件)。您修改的任何作为 Debian 包一部分提供的文件,在升级过程中都会被检查,系统会提示您采取适当的行动。这些文件通常仅限于:

  • envvars:这是包含 Apache 和 apache2ctl 工具使用的环境变量的文件。

  • ports.conf:这是控制 Apache 监听的端口和 IP 地址的文件。

  • mods-available 目录中的 .conf 扩展名文件:这些文件控制加载模块时的配置。

  • sites-available 目录中的 defaultdefault-ssl:这些文件控制默认 Web 服务的行为。

  • conf.d 目录中的文件:这些文件是附加包的一部分,例如 phpmyadmin

对这些文件的修改应尽量保持在最小范围,但有时是必要的。大多数本地配置将通过将文件添加到 conf.d 目录或 sites-available 目录(并在 sites-enabled 目录中创建适当的链接)来完成,这里配置虚拟主机。

注意

在 Debian 7 中,只有以字母或数字开头的文件才会被包含。它不包括 .dpkg 文件,并且不包含任何除字母、数字和下划线之外的字符。在 Debian 8 中,只有以 .conf.load 结尾的文件会被包含。

启用站点和模块

如前所述,站点和模块的配置及选项被放置在 sites-availablemods-available 目录中,除非在 sites-enabledmods-enabled 目录中有指向它们的链接,否则它们不会被包含。不要手动创建链接,而是使用 a2enmoda2dismod 命令来启用或禁用模块,使用 a2ensitea2dissite 命令来启用或禁用特定的站点配置。

测试和激活配置

一旦所有修改完成,并且启用了适当的站点或模块,最好测试配置以发现明显的错误。虽然可以使用 /etc/init.d/apache2 中的 init 脚本来进行测试,但 apache2ctl 工具更适合并专门用于此目的。它有一个 configtest 命令选项(详见 apache2ctl 手册页),可以对所有包含的文件进行基本检查。它不能检测所有错误,但可以捕获大多数错误。在确信配置正确后,需要重新加载或重启 Apache,才能使更改生效。同样,虽然 init 脚本也能处理此事,但使用 apache2ctl 是推荐的方式。

有两种方法可以让 Apache 重新加载其配置文件,一种是常规重启,另一种是优雅重启(它实际上并不重启,而是仅重新加载配置)。优雅重启是首选方法,因为如果配置存在问题,特别是 configtest 无法检测到的问题,Web 服务会继续运行旧的配置,从而避免服务器停机,直到问题修复。优雅重启可能会花费一些时间,如果有长时间运行的线程,它会等到所有线程空闲后再重新加载配置。完全重启会强制终止所有线程并重新加载配置,并且如果存在配置错误,完全停止后不会重启服务器。

其他示例

Apache 示例应该能让你了解 Debian 如何将配置文件拆分成更小、更易于管理的文件,并提供简化各种管理任务的手段,例如启用和禁用模块。其他软件可能有不同的布局,以及不同的配置特性和工具,所有这些都在相应的文档中进行了描述。

Exim 例如,使用一个单一的、庞大的配置文件。为了拆分这些文件,Debian 提供了一个工具 update-exim4.conf,它将 /etc/exim4/conf.d 目录下的所有独立配置文件合并成 Exim4 软件所需的单一文件。这个过程可能有几种小的变动方式(文档中有详细说明),以便管理员选择自己喜欢的方法。

Debian 的 sendmail 另一个邮件包,使用了不同的方法。它的所有配置文件都位于 /etc/mail 目录下,更新配置后,GNU make 被用来创建所有必要的数据库和配置文件。实际上,有一个特殊的工具 sendmailconfig,它不仅会为你运行 make,还会处理 /etc/default/sendmail 的变更,并在处理完成后重新加载 sendmail 配置。

所有这些都显示了 Debian 开发者提供了多种方法来简化配置。较简单的包可能只有少数、一个或没有配置文件。那些拥有更大或更复杂配置的包不会完全一样处理,尽管将文件拆分成更小、更易于修改的部分并提供工具来简化配置管理的技术对大多数包来说是通用的(并且按照 Debian 政策,在每个包的文档中有相关描述)。

概要

尽管 Debian 保持与上游软件开发者的配置方法接近,Debian 开发者经常修改配置文件的布局,以简化本地配置和升级,并且通常提供额外的工具来减轻管理员的工作。第三方工具有时也可以使用,但管理员应该理解,这些工具的输出可能并不总是遵循 Debian 的配置布局。

现在,在基本的软件配置完成后,是时候讨论一些更广泛的系统管理问题了。

第五章:系统管理

除了配置各个软件包外,管理员还负责管理系统上各种服务的启动和停止,管理网络连接,维护文件系统,管理系统日志,并配置系统面向用户的界面。

启动与关闭

正确启动和关闭服务,对于系统功能和实现其目的至关重要。尽管 Unix init 脚本(也称为 System V 或 SysV 脚本,因其起源于 Unix System V)有着悠久的历史,并且在某种形式上是所有 Unix 和 Linux 系统的通用脚本,它们的管理、顺序、启用、禁用方式以及首选脚本格式通常在不同发行版之间有所不同。Debian 启动和关闭脚本的主要关注点包括运行级别的目的、基于依赖的顺序以及可用于管理启动顺序的工具。

Debian 运行级别

在 Debian 系统中,与几乎所有的 Unix/Linux 操作系统一样,提供了从 0 到 6 的运行级别,具体定义如下:

  • 0: 系统停止

  • 1: 单用户模式(维护)

  • 2 到 5: 多用户模式

  • 6: 系统重启

请注意,在 Debian 中,运行级别 2 到 5 是相同的。这与一些其他发行版不同,比如 RedHat、Fedora、SuSE 或 OpenSuSE,它们为这些运行级别中的某些级别指定了特定的用途。例如,这些发行版中的运行级别 2 通常定义为没有网络支持,3 为具有网络支持,4 为文件共享,5 包含显示管理器,而其他运行级别没有启用显示管理器。

在大多数 Debian 系统中,多用户运行级别之间没有区别,所有 init 脚本默认在 2 到 5 级别处于活动状态。这并不意味着不能为不同的运行级别定义自己的用途。然而,如果你确实选择这么做,切勿手动编辑运行级别目录中指向 init 脚本的各种链接。应该使用 update-rc.d 命令。这样做的原因是,Debian 现在默认使用基于依赖的启动顺序。

基于依赖的启动顺序

如前所述,这已经是 Debian 7 Wheezy 版本的默认设置。它是在 Debian 6 Squeeze 版本中引入的,尽管可以关闭该功能。现在它始终启用,尽管仍为遗留顺序(为启动和停止脚本分配特定编号)提供了相应的配置。因此,管理员不再需要确定 init 脚本的运行顺序。现在,这一任务由 insserv 工具处理。

小贴士

不应直接调用 insserv 工具。建议使用 Debian 提供的 update-rc.d 工具,它会调用低级别的 insserv 命令,作为管理 init 脚本的推荐接口。

init 脚本现在必须在一组特殊的头文件中列出依赖关系和默认值,同时描述脚本的功能、它提供的服务以及服务应该在哪些运行级别中处于活动状态。一个好的例子是启动 Apache 的脚本开头:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop apache2 web server
### END INIT INFO

各字段的含义相当直观。该脚本提供 apache2 服务。其他脚本可以将此服务作为先决条件。该脚本要求本地和远程文件系统被挂载,网络连接正常,且 syslog 和 named 服务在启动之前可用。同样,在该脚本关闭 apache2 服务后,这些服务不得被停止。apache2 应该在运行级别 2 到 5 中保持活动,当然,0、1 和 6 是它停止的地方。X-Interactive 字段表示,如果脚本以某种方式运行且终端可用与脚本进行通信,则脚本可能需要用户输入。还有其他可用字段,具体内容可以参考 insserv 手册页。

注意

这些头文件被称为 LSB 头文件,因为它们是在 Linux Standard Base 文档中定义的,该文档由多个 Linux 发行版在 Linux 基金会的组织架构下共同开发。

尽管依赖关系通常不会变化,管理员仍然可以修改脚本在哪些运行级别下处于活动状态。这不应通过编辑头文件来完成,而应使用 update-rc.d 来修改运行级别。例如,假设你希望 apache 仅在运行级别 4 和 5 下运行,而在 2 或 3 下不运行,命令 update-rc.d apache2 disable 2 3 就可以实现这一点。

提示

许多脚本在其 /etc/default 配置文件中提供了一个开关,用于定义服务是否应当运行。当你希望完全禁用某个服务时,应该使用这个开关,而不是通过 update-rc.d 禁用脚本在所有运行级别中的执行。

update-rc.d 的手册页还记录了 startstop 选项,以及指定脚本启动或停止顺序的方式(使用传统方法为启动和停止链接分配数字)。然而,这些选项已被弃用,看来它们将在 Jessie(Debian 8)中被移除。

注意

如果你有本地开发的或第三方的 init 脚本,这些脚本没有包含必要的头文件,Debian 7 仍然会使用旧的脚本排序方法启动,但会通知你它无法迁移到基于依赖关系的启动序列的原因。

管理 SysV 脚本

update-rc.d 工具已经提到过,是管理 init 脚本的主要命令行接口之一。然而,还有几个其他工具,本质上是 update-rc.d 的前端,能够让管理员的工作变得更加轻松。主要的工具是 bumsysv-rc-conf

启动管理器(bum)是一个图形化应用程序,用于管理 init 脚本。它需要窗口管理器来运行,并提供一个友好的界面,展示正在运行的服务和启用的脚本。在高级模式下,它还允许你调整各个运行级别和运行顺序。

提示

update-rc.d 的启动和停止命令所提到的,调整脚本的顺序并不推荐。

还有一个名为 sys-rc-conf 的工具。它使用 curses 库提供全屏文本界面。在默认模式下,它不会修改脚本顺序,尽管在命令行上使用特定选项可以允许这一点,如果你真的需要这个功能。

这两个工具基本上是不言自明的。选中你需要的服务,取消选中不需要的服务,你可以为同一个脚本设置或取消不同运行级别的勾选标记。

提示

经常需要手动执行一个 SysV 脚本,可能是为了检查状态,或是重新启动某些需要的服务。虽然 /etc/init.d 中的脚本可以手动执行,但推荐使用 invoke-rc.d 命令,这样可以确保系统策略和运行级别的约束条件得到满足。

第三方和本地脚本

非 Debian 的第三方包通常不提供用于启动和停止其软件后台进程的 SysV 脚本,你可能需要自己编写。即使提供了此类脚本,也可能需要修改它们以遵循 Debian 标准,特别是如果它们使用了其他发行版中的预打包功能,而这些功能与 Debian 中的不同。

编写 init 脚本本身就是一个完整的主题。然而,Debian 的 initscripts 包包括一个 /etc/init.d/skeleton 脚本,可以根据需要复制并修改。此类脚本的要求在 第九章,《操作系统》部分的 Debian 政策手册 中有详细定义(可以通过 Debian 包和 www.debian.org/doc/debian-policy/ 获得),以及 第二十章,《系统初始化》部分的 Core Linux System Base 标准(可以通过 refspecs.linuxfoundation.org/lsb.shtml 获取)。后者还提供了 /lib/lsb/init-functions 中的一些标准功能,以帮助编写脚本。

网络管理

网络访问是任何系统的基础,不论是为了允许其他人使用其服务,还是为了允许用户访问其他系统上的服务。设置和控制网络有两种主要方式:静态的 /etc/network/interfaces 文件和更动态的网络管理器。

接口文件

这是在 Debian 系统上设置网络的传统方法。它涉及到 /etc/network 中的一系列文件。基于 RPM 的系统,如 RedHat Fedora 和 SuSE Linux,使用 /etc/sysconfig/network 中不同的布局,并由它们自己的工具进行管理。

/etc/network/interfaces文件可能是最简单的启动和运行网络的方式。虽然必须手动编辑它,但它易于理解,并且大多数情况下只需要最少的配置行即可应对大多数情况。事实上,Debian 安装过程中会为你设置这个文件。如果你使用与安装时相同的网络配置,网络会立即生效,并且只需最少的调整。实际上,最简化的接口文件通常对于大多数不属于集群的服务器来说已经足够了。即使你使用其他网络配置方法,如 Network Manager,通常也会在接口文件中保留本地回环接口的配置,以保持其他配置简洁,因为它只需要基本配置,并且通常不需要修改。

接口文件虽然可以非常简单,但也提供了许多选项来进行更复杂的配置。你可以配置有线、无线、VLAN虚拟局域网)和桥接接口、IP 隧道以及点对点PPP)接口。每个接口可以配置为使用 DHCP 或静态 IP 地址,支持 IPv4 和 IPv6,同时也支持 Novell 的 IPX 协议。一个简单的接口文件如下所示:

# This file describes the network interfaces available on your
# system and how to activate them. For more information, see
# interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
 address 192.168.3.52
 netmask 255.255.255.0
 gateway 192.168.3.1

#开头的行是注释,当然。其他行的目的如下:

  • auto lo:每当运行ifup并带上-a选项时,lo接口会被激活,就像系统初始化时一样

  • iface lo inet loopback:这定义了基本的回环接口;地址始终是127.0.0.1或 IPv6 的::1

  • allow-hotplug eth0:如果以太网 0 可用且已插入,它会被激活

  • iface eth0 inet static:这定义了以太网 0 为一个具有静态 IP 地址的接口

  • addressnetmaskgateway:这些分别定义了以太网 0 的地址、子网掩码和默认 IP 网关。

简单明了。这个文件实际上是在 Debian 安装过程中设置的,并且按原样工作。当然,还有许多其他选项可用,这些选项在接口手册页中有详细记录,允许你处理更复杂的配置。有关设置接口文件的详细信息可以在接口手册页中找到。它包括设置 IPv6 和许多其他协议的信息。

除了接口文件外,/etc/network 目录下还有许多相关的脚本。特别是,子目录 if-pre-up.dif-up.dif-down.dif-post-down.d 包含当接口启动或关闭时自动运行的脚本。此外,还可以在接口文件中指定特定脚本,以便在某个接口启动或关闭时执行(这在配置桥接时尤其有用)。使用 /etc/network/interfaces 文件的主要缺点是没有办法配置虚拟专用网络VPN)。然而,通常可以使用命令行工具来配置这些。

注意

详细信息和示例可以在第五章,Debian 参考手册的 网络设置 部分找到(www.debian.org/doc/manuals/debian-reference/ch05.en.html)。

Network Manager

尽管 /etc/network/interfaces 配置非常灵活,许多管理员更喜欢使用图形化界面来配置网络,以便在更动态的网络环境中使用。Network Manager 最常用于管理无线连接。它由一个后台进程组成,负责实际的连接管理,并且有一个命令行工具和一个图形化工具,允许你配置和控制已管理的连接。

图形化工具显示可用的接入点,并提供菜单和简单的方式来配置连接。它也可以用于有线连接,并且还可以管理到私有网络的 VPN 连接。Network Manager 的主要缺点是它不支持桥接、VLAN 或 IPX 协议。当然,可以使用命令行工具来补充 Network Manager,以配置这些选项,或者可以使用接口文件手动配置它们,同时 Network Manager 处理其余部分。

还有其他一些软件包提供了用于网络配置的 GUI 界面。其中一个主要的就是 wicd。一些用户更喜欢它,因为它以不同的方式处理无线连接,这可能使某些无线网卡的性能更好,但它的功能较少。

合并方法

可以结合使用接口文件和 Network Manager 的网络配置方法,每种方法负责配置的一部分。这个技巧可能会在需要某些只有其中一个方法支持的功能时使用。例如,Network Manager 不支持网络桥接,而接口文件通常不能用来配置 VPN 连接。如果你需要两者,你可以使用接口文件来设置桥接,并使用 Network Manager 配置 VPN 连接。

对于不熟悉网络桥接的人,一个很好的例子是一个开发系统,该系统运行一个或多个需要直接访问网络的虚拟机(这意味着它的连接必须表现得像是一个具有直接网络连接的实际接口)。基本设置看起来像以下图示:

组合方法

请注意,主机现在使用br0而不是eth0作为其主要接口。桥接接口使用 eth0 连接到实际网络。虚拟机VM)将设置自己的网络接口(或者你可以自行设置)。这些通常被设置为 tap 或隧道接口(因此命名为tap0)。

要设置它,基本的接口文件可能看起来像以下列表(假设硬件以太网卡是 eth0):

# TAP setup
auto tap0
iface tap0 inet manual
 pre-up /usr/sbin/tunctl -t tap0

# Bridge setup
auto br0
iface br0 inet dhcp
 bridge_ports eth0 tap0

这通过tunctl命令设置一个 TAP 设备来创建设备。它必须出现在桥接之前,否则当桥接设备初始化并尝试将其连接到桥接时,设备将不会存在。桥接设置创建桥接接口,并使用 DHCP 获取 IP 地址。bridge_ports行表示它将流量桥接到实际接口(eth0)和 tap0 接口,虚拟机将使用此接口。我已省略了环回条目以保持清晰。在这个例子中,VPN 和无线连接由 Network Manager 处理。

有关网络桥接的更多信息可以在bridge-utils包中找到,网络 tap 和隧道接口由uml-utilities包涵盖。

哪种方法?

Network Manager 会随 GNOME 窗口管理器自动安装。它在笔记本电脑环境中特别有用。对于服务器,接口文件可能是最佳且最灵活的选择。当然,如果你需要某些仅在其中一个中可用的功能,可以使用提供这些功能的任何方法,必要时结合这两种技术。

提示

不要尝试使用两种方法同时控制相同的接口。虽然 Network Manager 会拒绝管理在接口文件中定义的连接,而ifup命令如果尝试设置已由 Network Manager 控制的接口则会生成错误,但仍然可以绕过这些保护。

文件系统维护

文件系统维护分为两种类型:分区维护和内容维护。前者包括定期检查文件系统的底层结构和元数据、修改分区布局以及低级备份。后者涉及监控和控制文件使用的空间以及文件备份和恢复。

分区维护

尽管现代日志文件系统非常坚韧,但它们偶尔也会遭遇底层基础设施的错误。原因有很多,包括电力波动、硬件故障以及某些类型的内核故障。虽然在 Debian 稳定版中极为罕见,但确实发生过,尤其是当安装了不属于 Debian 的第三方内核模块,或内核因某些原因被本地修改时。

文件系统检查(FSCK)

维护涉及运行文件系统检查程序FSCK)。如果系统经常重启,例如笔记本电脑或工作站,或者分区频繁卸载和挂载,通常会自动进行此操作。EXT3 和 EXT4 文件系统默认在每 39 次挂载时进行检查,除非另有要求。可以使用tune2fs工具更改这一设置,该工具还可以设置时间依赖的检查间隔,而不是基于挂载次数。

提示

尽管可以禁用定期检查,但不建议这样做。日志文件系统通常总是被标记为干净的,因此 Linux 不会识别出此类系统可能出现的问题。

如果系统始终在线且相关分区从未卸载,可能需要安排定期重启系统,可以通过shutdown -rF命令强制进行文件系统检查,或者使用tune2fs设置时间依赖的检查间隔,该间隔小于重启间隔。当然,如果发现问题,你必须能够访问物理控制台来回答有关如何解决问题的问题。

另一种方法是除非明显出现问题或有可能出现问题,否则永远不检查文件系统。通常,在可能导致文件系统基础设施错误的故障发生后,系统无论如何都需要重新启动(除非强制重启)。此时,你可以进入维护(单用户)模式手动运行 FSCK,或者通过设置较短的时间依赖检查间隔来强制执行检查。如果出现问题,仍然需要有人员访问物理控制台来解答相关问题。

注意

为了加速定期的文件系统检查,请使用 EXT4 代替 EXT3。在大多数情况下,EXT4 的检查速度是 EXT3 的 2 到 20 倍。

分区调整

如果需要更多空间,可能需要调整分区大小。要快速查看磁盘空间使用情况,请使用df命令。还有一个磁盘使用(du)命令,它汇总了文件和目录的空间。有关详细信息,请参阅手册页。

如果必须调整磁盘分区,操作流程相对简单,但有一些需要注意的事项。

提示

修改分区布局始终存在风险。在修改布局之前,确保你有当前的备份。

如果分区正在扩展,必须有足够的空间。如果你使用的是逻辑卷管理器LVM),如果卷组中没有足够的空间,可以通过向卷组中添加物理卷来解决。 如果你没有使用 LVM,或者在同一逻辑卷上配置了多个分区,那么必须在要扩展的分区结束后,物理磁盘或逻辑卷中必须有空闲空间。如果没有,必须以某种方式创建。 如果分区要缩小,空间就不是问题,尽管你可能希望移动或扩展其他分区来利用缩小后腾出的空间。此外,有时需要移动分区。如果你使用 LVM 并为每个逻辑卷分配一个分区,则无需进行此操作。

移动或缩小分区只能在未挂载(离线)分区上进行,因为这需要移动文件,若文件正在使用中,可能会导致数据损坏。一些文件系统,特别是 EXT3 和 EXT4,在分区仍然挂载时也可以扩展,因为这只需要修改文件系统元数据,而无需移动任何文件。

虽然每种文件系统架构都有适当的工具用于调整大小,并且有一些简单的工具用于管理分区表,但管理分区的主要工具是parted。还有其他一些工具,大多是商业工具,但parted几乎可以完成所有必要的操作,提供一个易于使用的图形工具(gparted),并且是免费的。甚至还有一个可以引导的 Live CD 版本,你可以用它来管理分区,而不管安装了什么操作系统。许多 Windows 管理员成功地使用它。它支持扩展、缩小和移动分区,并能处理许多不同的文件系统架构,同时确保分区表与文件系统大小一致。

提示

不幸的是,partedgparted 都无法扩展已挂载的分区。如果你必须在分区正在使用时扩展它,你必须删除并重新创建分区,确保起始位置完全相同,强制重新读取分区表,然后使用适当的文件系统调整命令。这是非常危险的,绝对不应当用于调整根分区的大小。

注意

修改分区布局的过程是简单直接的。请注意,如果你没有从gparted Live CD 或类似的工具磁盘启动,就无法卸载运行必要工具和操作系统服务所需的分区。

手动修改分区布局:

  1. 确保有足够的空间用于扩展分区,或用于容纳正在移动的分区。如果需要,可以缩小或移动其他分区,或扩展逻辑卷。

  2. 你必须确保分区表与调整大小或移动后的分区完全匹配。未能做到这一点可能会导致数据损坏或丢失。gparted会自动为你处理这一点。

  3. 要缩小分区,它必须处于脱机状态(未挂载)。先调整文件系统大小,然后修改分区表以匹配新大小。

  4. 要扩展分区,请首先修改分区表,然后扩展文件系统。如果正在处理挂载的分区,请使用前面概述的过程。

  5. 要移动分区,必须首先创建一个与原始分区大小相同的新分区。然后必须卸载当前分区,精确复制数据到新分区,然后删除旧分区。

在所有情况下,在修改或移动分区之前,分区必须是干净的,并且在挂载之前应该进行检查。gparted工具或类似工具将自动处理上述步骤,包括必要的文件系统检查、数据移动和分区表修改。

请注意,可以在活动系统上使用gparted或手动程序,前提是要修改的分区可以卸载,或者如果必须修改挂载的分区,则只能扩展,不能使用gparted

提示

除非必须在分区仍然挂载和使用的情况下扩展分区,否则建议的过程是从gparted live CD 启动。这极大地简化了整个过程,允许修改所有分区,而不仅仅是不需要操作系统服务和必要工具的那些分区,并减少了损坏的风险。

备份

通常情况下,备份分为两种类型:低级别镜像备份和文件级别备份。

低级别备份

低级别磁盘镜像或所谓的裸机备份,是完整分区甚至完整逻辑或物理磁盘的字节级复制。某些实用程序只包括备份中使用的扇区,从而减少备份和恢复操作的大小和速度,但并非总是如此。恢复此类备份时,需要一种媒体,如 live CD,以便启动软件来恢复映像。

如果需要快速复制或恢复系统,则全磁盘字节级备份非常有用,只要恢复的磁盘与原来的相同或更大。也可以执行此类分区备份,但为了恢复它们,您需要一些方法将分区信息恢复到磁盘分区表中。

低级别备份在两种情况下很有用:

  • 当需要快速用相同硬件替换和恢复系统时

  • 当需要在相同硬件上多次复制系统时

后者的一个很好的例子是当公司为工人提供预配置的系统,所有系统都具有相同或几乎相同的初始配置。在这种情况下,只需从标准化的副本中恢复磁盘,无论何时需要新系统或旧系统需要返回到其原始状态以供新员工使用,都非常容易。

文件级别备份

文件级备份可以像是将目录层次结构中的所有内容逐个文件复制一样简单,也可以是考虑到文件系统元数据结构的备份,并且不存储重复数据(通常称为数据去重)。恢复通常只需要一个最小化安装的系统,或者一个实时 CD。文件级备份无法恢复启动扇区或分区表,因此这些必须在恢复文件之前已经存在或创建。许多文件级备份工具提供仅备份自上次备份以来发生变化的文件的功能。

文件级备份在丢失或损坏单个文件或目录,或需要恢复到早期版本时最为有用,因为只需要恢复必要的文件。这是低级镜像备份无法实现的。

备份工具

有许多备份工具可用,范围从适用于单一系统的简单工具,到适用于管理多个生产系统和集群的复杂备份套件。

简单的实用程序通常提供文件级备份,将备份写入外部存储介质甚至远程网络位置。它们通常提供增量备份选项,在第一次完整备份后,仅复制发生变化的文件。大多数这些工具是命令行工具,可以通过脚本编写并通过 CRON 作业定期执行,尽管也有图形化前端可用。这些工具的缺点是,如果在完全磁盘故障后需要恢复,你必须有其他方式正确恢复分区信息,并正确重建启动扇区信息,以便系统可以正常启动。

较为常见的简单实用命令包括rsynctar。这些实用程序常常用于更复杂的备份软件中,实际存储数据。如果你使用的是某种 EXT 文件系统,dumprestore命令尤为重要,因为它们理解并考虑文件系统的元数据,因此比简单的复制工具更快、更高效。当然,它们的缺点是恢复只能在相同的 EXT 文件系统上进行。而像rsync这样的其他工具则可以恢复到完全不同的文件系统类型,尽管如果文件系统类型差异过大,比如从 EXT4 文件系统备份到 NTFS 分区时,某些元数据(如文件所有权和权限)可能会丢失。

更复杂的备份软件有时能够进行所谓的裸金属备份。这些备份结合了对非文件系统结构(如分区表和启动扇区)的低级小规模备份(或至少能够重新创建的能力),以及对文件系统内容的文件级备份。许多都是多系统备份解决方案,可以从一个中心位置进行管理,并且能够将备份存储在不同位置的不同介质上。通常,这些多系统套件包括定义和控制备份计划、内容和位置的功能,并提供远程存档的支持。

选择你的解决方案

选择什么备份软件有一定的个人偏好,但也有一些指导原则。对于单个文件的快速和临时备份,标准的rsynctarcpio工具通常已足够。对于更常规的单个系统备份,最好选择一些可以配置和调度自动备份(包括全量和增量备份)的软件包。如果你有多个系统需要备份,最好选择一些提供中央控制、调度和存储的主要备份套件。我们将在第七章中进一步讨论,高级系统管理

在所有情况下,如果你的备份解决方案没有自动处理,务必包括一张救援或实时 CD,里面包含必要的软件来格式化和分区磁盘,恢复文件,并重建启动信息。一些备份包,比如Mondo,会将创建这种可启动媒体作为其软件的一部分。

提示

不要忽视备份。即使是具有多路径网络可寻址存储NAS)的最具韧性的虚拟机环境,也可能以意想不到的方式失败,从而导致数据损坏。我知道有一个这样的环境,其中 UPS 以某种方式被断开,导致 NAS 系统和虚拟机主机都断电。尽管 Debian 系统使用了非缓存的文件系统日志,但 NAS 系统却在缓存日志写入。当电力丧失时,日志不完整,磁盘最终严重损坏。教训已经吸取。

系统日志

系统管理员的另一个职责是管理系统日志。Debian 系统默认会记录信息,这些信息能够告诉管理员系统的使用情况,提供可能表明软件或硬件存在问题的警告和错误消息,甚至提供系统被攻击或滥用的早期迹象。

系统日志由rsyslog包处理,通常存储在/var/log及其子目录中。各种软件包,尤其是那些提供重要服务的软件,如 DNS、FTP、电子邮件和 HTTP(Apache),经常会进行大量日志记录,这些日志可能包括可以追踪活动并警告潜在问题或配置错误的条目。包文档中包含了如何配置日志记录内容和存储位置的信息。

日志设施

Linux 中的rsyslog系统日志设施提供了多种选项、设施和日志级别。这些选项控制消息记录时的行为,例如是否在无法将消息记录到文件时将其发送到控制台,是否在消息中包含进程 IDPID)。这些设施提供了一种根据相关子系统将消息分配到不同区域的方式,例如 AUTH 用于授权消息,CRON 用于计划任务,KERN 用于内核消息。大多数使用系统日志的软件都提供配置项来控制它们使用的选项、文件和设施。此外,最重要的是日志消息的级别,它们决定了消息的重要性。

日志级别详细说明了哪些消息会被记录到系统日志中,这些消息可能很多。日志级别从 EMERG 开始,表示系统基本无法使用,到 ALERT(需要立即采取行动)、CRIT(关键)、ERR(错误)、WARN(警告条件)、NOTICE(正常但重要)、INFO 和 DEBUG。将日志级别设置为后面三种之一,可能会生成大量条目,占用大量磁盘空间,并且会增加系统开销。

因此,有一些指导原则,规定了应该记录哪些内容:

  • 生产系统只应记录 EMERG、CRIT、ALERT、ERR 和 WARN 级别的日志。除非绝对必要,否则不应在生产系统上记录 NOTICE、INFO 和 DEBUG 级别的日志。

  • 开发系统应记录前一点提到的级别,以及 NOTICE 和可能的 INFO 级别,以提供开发人员所需的信息。在必要时也可以使用 DEBUG 级别。

其目的是提供必要的信息,同时不对系统造成过多负担。特别是 NOTICE、INFO,尤其是 DEBUG 级别,可能会生成大量数据,这些数据在稳定的生产系统中通常是不必要的。

日志数据经常用于分析系统的使用情况、谁在访问它、执行了哪些活动,并通知管理员需要关注的事项。

控制日志

即使是生产系统的日志,最终也会增长到占用大量磁盘空间的程度,遵循前述指南的开发系统问题更为严重。管理员的职责之一是确定应该保留多少日志数据,并适当地管理这些文件。

所有的发行版,包括 Debian,默认提供一个或多个定期运行的任务,用来关闭当前的日志文件,标记其周期号,并为日志记录打开新的、干净的文件。在 Debian 中,这由logrotate包提供。虽然这个包主要处理日志文件,但它也可以用于任何其他不断增长并需要周期性处理的文件。该包提供了详细的文档,但基本的思路是:每个日志文件都会被检查,如果它超过了某个大小,就会关闭。然后,所有日志文件的周期会被重命名,如果需要,超出一定年龄或周期号的日志文件会被删除。接着会创建一个新的日志文件继续记录。

你可以配置保留多少个周期,甚至配置周期的最大年龄,超过该年龄的日志会被删除。这里的主要选择是你希望保留日志条目的时间。每个软件包安装时的默认值反映了许多管理员的经验,通常在大多数情况下是合适的。

日志监控

那么,管理员是否需要每天逐一查看所有日志条目呢?那将是一个非常繁琐的任务,实际上并不必要。Debian 中有许多软件包可以扫描日志中的特定条件,并通过邮件将结果发送给管理员以便进一步检查和处理。最常见的是logcheck,它会检查最新的日志周期,并与一个管理员可能感兴趣的条目数据库进行对比。然后,它会将重要的条目通过邮件发送给管理员进行进一步检查。还有一些软件包可以执行各种分析任务,比如邮件统计或 HTTP 访问统计,这些任务使用系统日志,通常会与其他信息来源结合使用。你可以通过 Debian 的包管理搜索功能找到它们。

小贴士

你使用什么软件包来检查日志,或者是否使用自己的基于字符串搜索的脚本并不重要。关键是要定期检查日志。日志可以及时警告你即将发生的硬件问题、软件不稳定、编程问题和系统攻击。

显示管理器

与开发服务器不同,普通服务器通常不需要显示管理器。当然,开发服务器以及那些提供登录到受管显示环境的服务器需要显示管理器和窗口管理器。前者负责 X-Windows 显示环境及其所需资源的创建和安全性,而后者则负责呈现给用户的实际桌面环境。

有几个主要的桌面环境,每个环境都有其关联的显示和窗口管理器。两个主要的环境是 GNOME 和 KDE。它们都支持多种图形工具包库,因此在一个环境中运行的绝大多数应用程序也能在另一个环境中运行,只要必要的服务已安装。这些服务通常会在安装应用程序时作为依赖项自动安装,前提是你没有安装 GNOME 或 KDE 的基础元包。所以,例如,如果你喜欢 KcacheGrind 工具来浏览程序性能数据,但正在使用 GNOME,你可以继续安装并在 GNOME 下使用它,它会正常工作。同样,如果你更喜欢 KDE 附带的 K Display Manager (KDM) 而不是 GNOME 提供的 GNOME Display Manager (GDM),它也会同样有效。

鉴于这种互操作性,为什么要选择一个而不是另一个呢?这主要是个人喜好的问题。如第一章所述,KDE 通常更受欧洲用户的青睐,而 GNOME 则更多是美国用户的偏好。本节的主要关注点将是在哪里找到每个桌面环境的配置文件或应用程序。

我的桌面去哪儿了?

GNOME 和 KDE,像新版本的 Windows 8 一样,都放弃了传统的桌面隐喻,采用了更注重活动或任务导向的界面。这需要一些适应,刚开始可能会让人不太习惯。要涵盖从旧界面到新界面的变化,每个桌面管理器至少需要一本书!然而,KDE 和 GNOME 的官方网站提供了教程和文档,帮助你快速上手。如果你更喜欢传统的桌面隐喻,GNOME 和 KDE 也提供了相应的设置方式。

GNOME

Debian 7 中当前的 GNOME 版本是 3.4。如果安装 gnome 元包,所有主要的 GNOME 应用程序以及窗口和显示管理器都会被安装。配置过程相当简单,因为用户菜单提供了一个“系统设置”应用程序,可以访问工作区的主要设置,以便更改其外观和感觉。

如果你不想使用默认行为,修改 GNOME 登录屏幕 GDM3 需要以 root 用户身份手动编辑 /etc/gdm3/greeter.gsettings/etc/gdm3/daemon.conf,然后执行 dpkg-reconfigure gdm3 命令。

注意

其中一个原因是 GDM 正在更完全地集成到 GNOME 中,并从旧版 GNOME 2 使用的 gconf 设置框架迁移到新的 dconf 设置框架。到某个时刻,GNOME 控制中心应该会提供适当的工具,但目前没有官方的 GDM3 设置工具。虽然有一个名为 gdm3setup 的非官方工具存在,但它尚未被加入到 Debian 中。

KDE

当前 Debian 7 的 KDE 版本为 4.8.4。kde-full 元包将提供所有 KDE 应用程序以及窗口和显示管理器。KDE 用户环境提供了一个与 GNOME 类似的系统设置应用程序,但它更为全面,因为它包括配置 KDM 的功能,KDM 是负责登录屏幕的显示管理器。事实上,由于这一点,一些管理员会使用 KDM 作为显示管理器,尽管默认会话可能是 GNOME。

其他桌面

XFCE 和 LXDE 是最常见的 KDE 或 GNOME 替代品,尽管也有其他选择。它们都没有提供用于登录屏幕的显示管理器,尽管 LXDE 推荐使用 LightDM 这一轻量级显示管理器。XFCE 和 LXDE(以及 LightDM)保留了传统的桌面隐喻,旨在减少对系统的负担,因此它们适合老旧硬件。

注意

Linus Torvalds 放弃 GNOME3 期间,他使用了 XFCE。

和 GNOME 及 KDE 一样,XFCE 和 LXDE 也提供了一个系统设置应用程序,用于控制外观和感觉。LightDM 还提供了一个图形化设置工具。

展示你的最佳形象

花时间至少了解一下你选择的显示管理器的设置。除非你在运行一个永远不会显示图形登录的服务器,否则这是用户首先和最后看到的内容。你可能还想了解适合用户桌面的背景。它们不需要过于花哨,但确实会留下印象。

总结

管理员的任务繁多,包括负责系统提供的服务(特别是如何启动和关闭它们)、网络配置、系统备份、文件系统空间管理、系统操作(系统日志)以及提供系统对外展示的界面。我们已经涵盖了这些领域中的一些问题,尽管对任何一个主题的全面覆盖可能需要几本书的篇幅。这里没有涉及的一个主题是基础的系统安全性,我们将在下一章详细讨论。

第六章:基本系统安全

系统管理员执行的最关键任务之一是设置和监控系统安全性。Debian 在这方面提供了一些帮助,有专门的包来帮助加固系统,但这仅仅是个开始。特别是,你必须关注如何设置 root 账户、如何阻止对系统的不当访问,以及如何监控系统的安全问题。

用户管理

首要考虑的事情之一是如何设置用户组以及如何管理 root 账户。虽然这一点可以随时更改,但最好在安装后立即进行更改,因为此时更改的影响较小。两个基本问题是如何设置默认的用户组分配,以及是否应禁用 root 账户。

默认用户组

传统上,有两种方式来设置分配给新用户的默认组。第一种是将每个人分配到一个单一的用户组。这将允许系统上的所有用户访问具有组读取(和执行)权限的文件和目录,并对具有组写入权限的文件进行写入。

另一种方式是为每个用户提供他自己的组,通常与他的用户 ID 同名。这是 Debian 中的默认设置,这种方案通常被称为用户私人组。如果用户 A 希望其他人通过组权限访问某些文件或目录,那么具有系统权限的人员需要将适当的用户 ID 添加到用户 A 的组中。

注意

曾经,单一用户组是常见的做法。然而,目前的最佳实践是使用用户私人组。

这类似于处理开发者互相访问彼此文件的最常见方法。然而,在这种情况下,会创建一个新的组,例如 web-dev 或者你认为合适的组名,并根据需要将开发者分配到该组中。一种类似的技术也用于一些管理任务。例如,一个 ftpadmin 组被允许以普通(尤其是匿名)FTP 用户无法执行的方式修改 FTP 服务器目录和文件。谨慎创建和分配组可以促进正确的用户访问文件,同时防止不必要的访问或修改。

用户和组的维护由标准的命令行功能处理,如 useraddusermoduserdelgroupaddgroupmodgroupdel,这些都记录在 passwd 包中。当然,也有可用于用户和组维护的图形界面工具。

ACLs

虽然传统的用户/组/全局权限结构对许多系统来说足够用了,但有时需要更精细的控制。这可以通过使用访问控制列表ACL)来处理。ACL 是通过在各种文件系统中使用扩展属性实现的,通常在 Debian Linux 中使用的 EXT 文件系统默认支持 ACL。详细信息可以在 Debian 的acl软件包中找到。特别地,查看getaclsetaclchacl命令的手册页。

虽然 ACL 非常有用,但也有一些需要注意的问题。例如,大多数图形文件管理器不支持 ACL,有些工具(例如 EMACS)在更新文件时会清除文件的 ACL 列表。这可以通过为目录设置默认 ACL 来部分解决,但如果丢失了非默认的文件 ACL,它们仍需要被重新构建。另一个问题是性能。在某些文件系统中,ACL 的存在会延迟初次访问文件,因为需要额外的访问验证。由于这种延迟仅发生在初次访问时,因此在实际操作中其影响通常是最小的。最后,使用 ACL 时还有备份问题。现在大多数备份工具都能识别 ACL。在 Debian Linux 中,rsynctar都可以通过特定的命令选项识别并备份 ACL,前提是你使用了正确的命令选项。EXT 备份工具的 dump 和 restore 也能处理 ACL。然而,有些工具可能无法正确识别或处理 ACL,因此在使用访问控制列表时,请始终查看软件包文档和手册页。

请注意,如果你使用 ACL,并不要求在所有文件和目录上都使用它们。完全可以仅在需要的文件和目录上设置 ACL。合理使用文件 ACL 和为某些目录设置的默认 ACL 有助于简化 ACL 管理。

root 账户

系统的 root 访问权限是一个严重的问题。任何知道 root 密码的人都能造成巨大损害,知道它的人越多,密码落入错误之手的风险就越大。为避免这个问题,sudo软件包提供了在不需要 root 密码的情况下运行命令的能力,用户只需输入自己的密码并获得适当授权即可(如果需要,还可以运行带有完全 root 权限的 shell)。其优点在于,授权的命令会记录下用户的 ID,从而提供实际执行命令的审计记录。

当在系统上使用 sudo 时,管理员密码的唯一用途是在系统启动到维护(单用户)模式时。大多数 Linux 发行版,包括 Debian,都需要 root 密码才能在单用户模式下提供 root shell 提示符。然而,有几种方法可以通过物理控制台访问来绕过此要求。因此,许多管理员完全禁用 root 密码。这样做后,启动到维护模式或单用户模式时不再提示输入 root 密码。

通过完全禁用 root 密码,除了通过 sudo 以外,其他任何提供 root 特权的程序(也称为 setuid 程序),或通过启动到单用户模式,均无法访问系统的 root 权限。请注意,由于启动维护模式不再需要密码,因此必须以其他方式控制对系统控制台的物理访问。这可以通过物理手段、要求通过 BIOS基本输入输出系统)或 UEFI统一可扩展固件接口)进行系统启动时要求密码,或者通过对 GRUB 或其他系统引导加载程序进行密码保护来实现。

注意

最佳做法是完全禁用 root 账户登录。Ubuntu 现在默认如此,Debian 也在朝这个方向发展。确保要么限制物理访问控制台,要么对启动过程进行密码保护。

/etc/sudoers 文件和 /etc/sudoers.d 目录中的文件是配置 sudo 访问权限的地方。详细信息请参见 sudo 包的文档。简而言之,命令的访问权限可以按个别用户、组成员,甚至列表来允许或限制,并且可以根据用户访问系统时的远程主机来允许访问某些命令。

Debian 硬化软件包

Debian 提供了多个软件包,帮助管理员确保系统安全。这些都是元包,包括:

  • harden:此工具安装 harden-environment 和 harden-servers。

  • harden-clients:此工具防止安装可能暴露关键信息或允许未经授权访问您系统的软件客户端。

  • harden-environment:此工具安装入侵检测工具。

  • harden-nids:此工具安装网络入侵检测工具。

  • harden-servers:此工具防止安装可能不安全且可能允许未经授权访问您系统的服务。

  • harden-tools:此工具安装增强和分析系统安全性的工具。

还有其他硬化软件包,可以安装工具来远程分析或审计系统,并帮助开发人员创建更安全的程序。可以通过在软件包缓存中搜索 "harden" 来找到这些软件包。一个方法是使用命令 apt-cache search harden

安装这些软件包仅仅是一个开始,不能自动让你的系统变得安全。它们只是用来安装一组与安全相关的软件包,或者防止某些潜在存在安全问题的软件包被安装。特别是,如果你安装了harden-environmentharden-nidsharden-tools,你还需要参考相应的软件包文档,并进行正确配置,以检测和分析安全问题,发出正确的警告或采取必要的措施。

注意

需要注意的是,某些软件包会阻止安装某些服务,例如 FTP 服务器。如果你的服务器必须提供 FTP 服务(例如),首先安装适当的硬化软件包。安装完成后,再安装 FTP 软件包并确认你希望删除硬化软件包。这样,你至少可以知道除了 FTP 之外的不安全服务并没有被安装。为了保持这种确认,可以定期测试如果安装了harden-servers会移除哪些内容。举例来说,可以通过运行apt-get –dry-run install harden-servers来执行此操作,并检查输出,看看会做出什么改变。

防火墙工具

硬化软件包提供的一个缺失功能是通过防火墙保护系统的工具。这个缺失反映了它们在确保系统安全方面的重要性,因为简单搜索 Debian 软件包会显示很多用于构建防火墙的工具。它们从简单到复杂,从命令行到完整的图形界面不等。几乎所有这些工具都是IPTABLES的前端,IPTABLES是 Linux 内核的防火墙模块及其相关命令,并生成相应的配置文件。有些提供了一种简单的配置语言,比标准的iptables命令更易读,工具随后将其翻译为适当的命令。有些则提供了一种定义防火墙策略的方法,之后将这些策略转化为适当的iptables配置命令。

提示

即使你的系统已经在防火墙后面,提供一个额外的防火墙也是一种良好的实践。这种多层防护方法可以在第一个防火墙被破坏的情况下提供额外的保护。

当然,由于防火墙软件包种类繁多,很难推荐某个特定的包。每个包都有自己的优缺点。然而,如果我们只关注较为流行的包,还是可以提出一些一般性的建议。

首先,对于不需要极其复杂配置的桌面和开发系统,firestarter(用于 GNOME)或guarddog(用于 KDE)是很好的起点。它们面向初学者,但也有适合更有经验用户的高级选项。两者都是图形化应用程序。一个特殊的情况是fireflier,它实际上会分析系统上应用程序的流量并推荐规则。Mason 是一个类似的应用程序,但它没有图形界面。

对于需要更强保护的服务器或系统,可以考虑fwbuilder。它类似于许多企业级防火墙管理系统,不仅可以为 Linux(包括 IPTABLES 和 IPCHAINS 规则)提供配置,还支持 BSD、Mac OS/X 和 Cisco 访问控制列表。多个服务器的配置可以集中存放,并根据需要远程安装。有关更多信息,请参考www.fwbuilder.org/

一个流行的替代方案是Shorewall,它也可以在一定程度上处理流量整形和 IPsec。Shorewall 使用文本配置文件,而不是图形界面。更多信息可以在shorewall.net/找到。

在所有情况下,对于 Debian Linux,防火墙软件包通过生成 IPTABLES 规则来控制流量,这些规则由内核模块用于识别、分析和控制网络流量。

IPTABLES

IPTABLES 是取代旧的 IPCHAINS 代码的通用名称,实际上它是一组内核模块和应用程序,用于定义和控制 Linux 内核防火墙。它包括用于提供 IPv4、IPv6、ARP 和以太网帧数据包过滤的模块和应用程序,以及一些数据包的有状态检查。根据数据包的特征(如协议、源地址和目标地址),以及数据包如何被处理(例如,是否刚进入系统、是否被转发、是否正在出口到网络、是否需要地址转换(例如网络地址转换NAT)、是否与已建立的连接相关),有许多过滤选项。关于 IPTABLES,有许多优秀的书籍,或者你可以从www.netfilter.org网站上的文档开始,这是 IPTABLES 代码的主页以及许多相关项目的资源。

注意

有一个项目NFTABLES,它计划在内核中替代 IPTABLES。它仍在开发中,并且在撰写本文时,Debian 尚未提供官方支持(无论是 Debian 7 还是 Debian 8 的测试版本)。不过,兼容性软件包正在开发中,一旦代码成为官方 Linux 内核的一部分,预计官方 Debian 软件包也会跟随发布。

由于大多数防火墙软件提供了定义防火墙并输出适当的 iptables 配置命令的方式,因此不需要了解 iptables 的所有细节,但一位优秀的管理员应该理解一些基本原理,原因有两个。首先,它有助于理解防火墙配置软件的功能,因为功能会基于可以用 IPTABLES 做的事情;其次,如果你使用像 fireflier 或 mason 这样的工具,这些工具会提出规则,并期望你根据特定环境进行修改或删除。

当然,除了理解什么是可能的,还需要弄清楚防火墙所需的内容。

基本防火墙设计

关于构建防火墙,有许多书籍和大量互联网建议。经典的著作是《构建互联网防火墙》,作者是Elizabeth D. ZwickySimon CooperD. Brent Chapman,出版方是O'Reilly Media。然而,对于我们当前的目的,我们将涵盖一些基本的设计原则。

入站连接请求

任何时候,如果有人能连接到系统,系统就有可能通过该连接受到攻击。这并不是指一般的入站流量,尤其是因为其中很多与本地系统建立的连接有关。它指的是远程系统请求与本地服务建立新连接。这通常被称为入站连接请求,因为它涉及远程系统向特定 IP 端口发起的初始连接请求。

当然,如果你的系统是一个为远程用户提供服务的服务器,你必须允许服务器提供的服务请求。只是不允许任何其他的入站请求,如果可能的话,限制请求的源地址,除非该服务是面向所有人的。

提示

限制入站请求(连接)仅限于为远程客户端提供特定服务所必需的请求。除非是与已建立连接相关的流量,否则不要允许任何其他入站流量。

出站流量

一般来说,出站流量是合法的,许多管理员不会限制从本地系统发起到远程系统的流量。不幸的是,有些情况下这并不可取。一个常见的例子是公司希望限制员工可以使用的外部服务(例如,防止在工作时间使用 YouTube,因为这不合适)。另一个例子是系统被攻击后,开始联系远程指挥与控制系统获取指令,并安装更多恶意软件。

这两种情况可以通过至少进行日志记录来处理,在许多情况下,还可以限制出站流量。在大多数情况下,限制出站连接请求(请求新连接)就足够了。

提示

在个人系统上,除非公司政策要求,否则不需要限制出站连接。在服务器上,出站连接应仅限于服务器正常运行所需的服务。只有当流量与已建立的连接相关时,才应允许出站流量。

本地回环流量

大多数管理员不关心本地回环接口上的流量。这是因为此类流量通常对于本地系统的正常运行是必需的。分析这些流量以确定哪些是必需的,哪些可以安全地阻止而不影响正常操作也相当困难。防火墙保护回环流量的主要原因是,如果恶意软件通过病毒或蠕虫安装在系统上,那么该软件可以通过未保护的回环接口进一步攻击本地系统。这可能会导致一次小规模的入侵通过这个漏洞发展成一次严重的系统接管。

这里的主要权衡是,妥协的可能性及其可能造成的损害,是否值得花费额外的时间和精力来分析并为回环接口创建一个合适的防火墙。

提示

如果一个系统经常受到严重攻击,考虑将本地回环接口也进行防火墙保护。

外围网络

保护私有网络而仍能为公众互联网提供服务的最重要方法之一是使用外围网络。通常称为非军事区DMZ),它是攻击者和内部网络之间的缓冲区。

外围网络

在前面的图示中,给出了两种架构。传统的设计使用两台防火墙,外围网络位于它们之间。原因是,如果直接暴露于互联网和攻击中的外部防火墙被攻破,攻击者仍然必须通过内部防火墙才能访问内部网络上的系统。经验表明,防火墙被攻破的情况足够罕见,以至于可以合理地安全使用单一防火墙,如右图所示。对于高安全环境,双防火墙架构仍然是首选。

在所有情况下,只有外围网络上的系统可以从互联网访问。这些服务器不能通过防火墙访问内部服务器。内部服务器可以连接到外围系统,从而允许双向通信,但外围上的服务器永远不应能够发起与内部系统的连接。这可以防止被攻破的服务器进一步危及你的内部网络。

提示

无论你多么小心,任何连接到互联网的服务器都将会遭遇攻击,而且攻击会频繁发生。迟早,这些攻击中的一次会成功。任何允许外部访问的服务器都不可能完全免受入侵。任何系统的最佳实践(不仅仅是 Debian)是将互联网服务器放置在边界网络上,以便在互联网服务器被攻破时保护内部系统和数据。

所以,现在你的系统已经正确配置了防火墙。如前所述,你仍然会遭遇攻击,并最终可能会被攻破。接下来的部分将讲解如何尽早检测到这些攻击尝试和任何已发生的入侵。

入侵检测

Debian 包括多个入侵检测应用程序。它们可以分为三大类:网络入侵检测系统NIDS)、文件监控和系统扫描。前者通过扫描网络流量,检测发现并利用已允许的网络连接的攻击企图。后者则通过扫描已知的干净系统,然后监控其中文件的新增、删除和修改。

NIDS

网络入侵检测基本上涉及监控网络接口,分析所有捕获到的数据包,并在检测到特定攻击特征时提供警报。在 Debian 系统上,主要工具是Snort。如果你安装了前面提到的harden-nids,Snort 将会被安装。Debian 上也有其他相关的软件包。

Snort 可以与名为 fwsnort 的软件包配合使用,不仅可以检测潜在的攻击,还能在检测到攻击时,通过添加 IPTABLES 规则动态地阻止它们。

有一点需要注意的是,NIDS 只能分析它们实际看到的流量。它们会看到所有监控接口上的流量(事实上,Snort 会在 IPTABLES 之前看到流量,确保所有流量都被分析)。然而,如果你的系统由外部防火墙保护(例如,如果它在边界网络上),它只会看到通过外部防火墙允许的那些数据包。因此,除非运行在外部防火墙上,否则 NIDS 的作用可能有限。尽管如此,它仍然有助于检测那些能够突破外部防火墙的攻击尝试。

文件监控

第二层入侵检测涉及监控系统上的文件。有几款优秀的文件监控工具能在文件新增、删除或修改时发出警报,通常会过滤报告,只包括那些表明潜在安全漏洞的变化。最常用的文件监控工具是Tripwire,它是由harden-environment包安装的。不过,Tripwire 现在属于一家商业企业,并出售专有版本。虽然开源版 Tripwire 仍然可以使用,但许多管理员正在转向AIDE高级入侵检测环境)或Samhain作为替代方案。

提示

小心配置文件监控工具,以捕捉重要变化,并尽可能过滤掉误报,而不漏掉真实的正面指示。

过滤结果的重要性无法过分强调。含有过多误报的警报或报告,顶多会被快速浏览,最糟糕的情况是被忽视,这可能导致错过真正的已感染文件的指示。

系统扫描器

系统扫描器包括检查是否可能安装或激活了 rootkit 的包,以及病毒扫描器。rkhunterchkrootkit 是两个最常用的 rootkit 检测包。Tiger 包是一个更全面的扫描器,它结合了 chkrootkit 和 Tripwire 或 AIDE,以及它自己的脚本,来对系统进行全面的安全审计。在首次审计清洁系统后,Tiger 会提醒你系统漏洞的变化。

Tiger 唯一缺少的主要功能是病毒扫描,这可以通过 clamav 包来处理,后者还提供对电子邮件的实时扫描功能。

提示

最佳实践是设置定期的系统安全审计。

关于远程日志记录的最后说明

一个有经验的黑客一旦突破系统,最先做的事情之一就是尝试抹去所有系统被攻破的痕迹。这包括删除日志文件中的条目、隐藏文件和网络连接,以使其无法通过常规工具显示等等。他们甚至可能安装自己篡改过的入侵检测软件版本,以及不会报告其非法活动的文件和系统扫描器。应对这一情况的最佳对策之一是将系统设置为将系统日志、NIDS 和扫描结果写入远程系统。许多扫描器还提供加密和验证配置文件及扫描数据库的方式,以保护其不被攻破。

提示

如果系统经常遭受攻击,应该设置远程日志记录、报告和警报,并确保系统、文件扫描器和入侵检测系统的配置文件及数据库的安全。

总结

系统安全是管理员最重要的职责之一。通过为用户和组设置适当的策略,并在暴露于互联网攻击时对系统(尤其是服务器)进行加固,确保你的系统得到保护。防火墙工具在阻止攻击方面很有用,而入侵检测系统应当用来尽早发现任何系统异常。

现在我们已经涵盖了 Debian Linux 中几乎所有主要的管理领域,当然不包括单独的软件套件。接下来,我们将介绍一些高级管理技巧。

第七章:高级系统管理

在本章的最后,我们将简要介绍一些高级管理主题。将涵盖远程备份和配置管理,并简要探讨集群管理。最后,我们将介绍一个适用于任何 Linux 系统的最有用的管理工具——Webmin。

远程备份

如果你负责管理安装在远程位置的一个或多个系统,单独备份它们可能会成为一项繁重的工作。幸运的是,有许多软件包可以提供帮助。大多数备份软件包,即使是用于创建单台机器备份的,也有选项将数据发送到远程位置进行实际存储。当然,任何具备此功能的软件包都可以在多台机器上使用。然而,有两个流行的软件包不仅提供从中央位置向多台主机提供备份服务,还提供备份周期管理和自动运行功能。它们分别是AmandaBacula。当然,还有其他类似的软件包,并且也有一些优秀的第三方备份解决方案。然而,Amanda 和 Bacula 都是 Debian 系统的一部分,因此它们是免费的,并且能够处理多个系统和各种备份媒体。

Amanda

多年来,马里兰大学 (UoM) 计算机科学系是质量高、免费的软件来源,其软件甚至能够与专有解决方案竞争,甚至超越它们。先进的马里兰自动网络磁盘归档器 (AMANDA) 就是这样的解决方案。虽然现在不再由 UoM 支持,但它目前托管在 SourceForge 上,并且仍在积极开发中。除了免费的社区版,还有付费的企业版,包含额外的功能,如图形化配置工具。

注意

Amanda 网站指出,某些 Linux 发行版所包含的版本已经落后。这在 Debian 中并不适用。版本 3.3.1 包含在 Debian 7 Wheezy 中。

最初,它主要面向集中式带磁带的备份,适用于许多联网系统,现在它也支持磁盘甚至基于云的备份数据存储。Amanda 需要在要备份的系统上运行软件客户端。客户端可用于大多数 Unix 类型的系统,包括 Mac OS/X 和各种 Windows 版本。服务器端可以运行在几乎任何基于 Unix 或 Linux 的系统上。这使得 Amanda 在大型异构站点中尤其有用。

Amanda 使用标准的磁带和磁盘文件格式,这允许使用标准工具,如 mttar,来浏览或甚至恢复数据(如果需要)。Amanda 提供对多个系统的并行备份、备份文件管理、易于使用的恢复工具,以及多层安全性(包括网络上的备份数据加密和备份文件加密)。Amanda 实现为一个中央服务器,与多个客户端进行通信。

关于 Amanda 配置的讨论可能会占据一本书的篇幅,且很大程度上依赖于你使用的备份媒介和正在备份的系统。然而,简而言之,Amanda 的社区(免费)版本必须手动配置,通过在 /etc/amanda/ 配置目录中添加子目录和配置文件。请参考与 Amanda 一起提供的文档,或访问 www.amanda.org 网站获取更多信息。此外,几本关于备份和恢复的商业出版书籍中有关于 Amanda 配置的章节。

Bacula

Bacula 是另一个流行的免费备份软件包。与 Amanda 相比,它被设计为更具模块化。像 Amanda 一样,它需要在被备份的系统上安装客户端。然而,除了客户端外,它还包括一个管理控制台服务、一个状态监控服务、一个控制实际备份操作的备份调度器、一个存储服务用于保存实际的备份数据,以及一个数据库服务用于维护备份信息和目录。自然,除了客户端(必须安装在被备份的系统上)外,这些服务可以分布在不同的系统上,或者集中在单一服务器上。

Bacula 配置是面向对象的,你需要定义客户端、作业、作业调度、文件集(待备份文件)、存储池(用于存放备份数据)、消息(用于处理报告邮件)、目录数据库以及协调整个过程的调度器。它提供了许多有用的功能,包括一些可以在没有目录访问的情况下恢复系统的功能,以及创建可进行完全裸机恢复的启动 CD。

一点需要注意的是,Bacula 救援 CD 被设置为将磁盘分区恢复到磁盘创建时的原始状态。如果你需要对具有不同磁盘配置的系统执行裸机恢复,救援 CD 还提供了 fdisk 工具,如果需要,你可以添加其他工具。

Bacula 的调度器和存储组件运行在 Linux、FreeBSD 或 Solaris 上。也有报告称它能在某些版本的 Windows、Mac OS/X 和其他 BSD 变体上运行,尽管这些并非官方支持。客户端适用于多种系统,包括各种 Linux、Windows、Mac 和 BSD 系统。还有报告称 Bacula 可以在 AIX、BSDI 和 HPUX 系统上运行,尽管这同样没有得到官方支持。

在 Debian 上安装 Bacula 是直接的。每个不同部分都有相应的包,同时也有几个元包。bacula 元包安装了 bacula-clientbacula-server 元包。客户端包安装了 Bacula 控制台和文件守护进程(客户端)。服务器包安装了 Bacula 导向器和存储包。根据你想为目录使用的数据库,有几个不同的 Bacula 导向器选择。这些包可以通过元包或单独安装,按需选择。

与 Amanda 类似,Bacula 是一个全面且复杂的解决方案。除了 Bacula 网站上提供的全面文档外,www.bacula.org/,还有几本书详细介绍了它,包括一本来自 www.packtpub.com 的书(Network Backup with Bacula [How-to],作者:Yauheni V. Pankov[PACKT] 出版社)。简而言之,Bacula 使用文本文件进行配置,文件位于 /etc/bacula 下的目录中。Bacula 控制台包提供了一个图形控制台应用程序,尽管在实际使用中,界面实际上是一个命令行工具。

其他备份系统

当然,Debian 也提供了其他备份包。它们比 Amanda 或 Bacula 更简单,但更适合小型环境。大多数使用标准的文件归档工具,并提供远程存储选项(无论是通过标准远程文件规范,还是使用客户端和服务器的方法)。有些还提供备份周期管理工具、备份加密、通信加密,甚至在使用特殊的备份存储格式时提供去重功能。可以使用 Synaptic 或 apt-cache 搜索这些包,搜索关键词为 backup。

有些管理员更倾向于保持简洁,编写自己的简短脚本,使用基本的归档命令(如 rsynctarEXT dump/restore 命令)作为计划的 CRON 任务来执行备份。

除了备份

当然,备份并不是管理多个远程系统时唯一的问题。尤其是,使用集中化应用程序管理这些多重配置通常是一个理想选择。

配置管理

管理员常遇到的一个问题是,拥有多个远程系统,这些系统大部分安装了类似的软件,但安装或运行的内容略有不同。Debian 提供了几个可以帮助统一管理此类环境的包。两个在 Debian 中非常流行的包是 FAI 和 Puppet。虽然我们没有空间详细介绍,但这里简要描述了这两个应用程序。

完全自动化安装

完全自动化安装FAI)专注于管理 Linux 安装,并使用 Debian 开发,尽管它也可以与许多不同的发行版配合使用,而不仅限于 Debian。FAI 使用类的概念对相似的系统进行分类,并通过钩子提供了很大的灵活性和自定义能力。FAI 提供了无人值守的自动化安装,以及用于监控和更新系统组的工具。FAI 常用于创建和维护集群。更多信息请访问fai-project.org/

Puppet

最著名的分布式管理应用可能是 Puppet,由 Puppet Labs 开发。与 FAI 不同,只有开源版是免费的,企业版拥有许多附加功能,但需要付费。Puppet 确实支持 Linux 以外的环境。所需的配置使用自定义的高级定义语言描述,并分发到安装了客户端的系统中。与 FAI 不同,Puppet 并不提供自己的裸机远程安装方法,但会使用现有方法(如kickstart)来提供该功能。许多大量使用分布式和集群系统的公司使用 Puppet 来管理它们的环境。更多信息请访问puppetlabs.com/

其他软件包

还有其他软件包可以用于管理分布式环境,如 Chef 和 BCFG2。它们比 Puppet 或 FAI 更简单,但支持类似的功能,并且在一些分布式和集群环境中有应用。

在集群管理中使用 FAI、Puppet 等工具,值得简要了解集群以及 Debian 中支持集群的包。

集群

集群是一组协同工作的系统,它们共同工作,使整个系统像一个单一单元一样运行。这样的集群可以是松散耦合或紧密耦合的。在松散耦合环境中,每个系统都是独立完整的,可以处理其他系统能处理的所有任务。该环境提供了冗余、负载共享和故障切换机制,通常被称为高可用性HA)集群。在紧密耦合环境中,涉及的系统高度依赖于彼此,通常共享内存和磁盘存储,所有系统共同处理同一任务。该环境提供了数据共享机制,避免存储冲突,保持系统同步,并适当分配任务。这种设计通常用于超级计算环境中。

注意

集群技术是一项高级技术,涉及的不仅仅是安装和配置软件。它还涉及硬件集成、系统和网络设计及实现。除了下面提到的网址外,关于该主题的好书有 Building Clustered Linux Systems,作者为 Robert W. Lucke,由 Prentice Hall 出版。这里我们将仅介绍最基本的内容,以及 Debian 提供的一些工具。

我们将简要了解每种环境以及创建它们所使用的一些工具。

高可用性集群

实现高可用性集群需要两个主要功能:

  1. 一种处理负载均衡和单个主机故障转移的方法。

  2. 一种同步存储的方法,使所有服务器提供相同的数据视图。

Debian 包含将来自 Linux 高可用性项目的软件集合在一起的元软件包,包括 cluster-agentsresource-agents,这两个是更高级别的元软件包。这些软件包安装各种代理,用于协调和管理负载均衡和故障转移。在某些情况下,指定一个主服务器来分配处理负载到其他服务器。

数据同步通过使用共享存储以及提供多个访问和共享文件的任何文件系统来处理,例如 NFS 或 AFS。

高可用性集群通常使用标准软件,以及易于获取的软件来管理此类环境的动态。

Beowulf 集群

除了高可用性集群的考虑因素外,更紧密耦合的环境,如 Beowulf 集群,还需要一个基础设施来管理和分发计算任务。有许多网页致力于使用 Debian 创建 Beowulf 集群,以及帮助创建此类集群的软件包。其中一个网页是 wiki.debian.org/StartaBeowulf,这是一个关于 Beowulf 基础知识的 Debian Wiki 页面。之前提到的 FAI 配置管理手册中也有一个章节介绍如何创建 Beowulf 集群。市面上也有相关书籍。Debian 提供了多个有助于构建集群的软件包,例如用于消息传递的 OpenMPI 库,以及一些运行多个系统命令的实用工具,如 kadif 包中的工具。甚至有一些项目发布了脚本和 live CD,可以快速设置集群(例如 PelicanHPC 项目,针对 Debian Lenny 开发,托管在 www.pelicanhpc.org/)。

这种类型的集群并不是你可以轻松设置并使用的。Beowulf 和其他紧密耦合的集群是为高度并行计算设计的,执行实际计算的程序必须专门为这种环境设计。也就是说,Debian 中确实存在一些为特定并行计算设计的软件包,例如 nwchem,它提供了几个用于计算化学的应用程序,能够利用并行计算。

常用工具

一些常见的集群组件已经提到,例如 OpenMPI 库。除了已提到的元软件包外,Debian 中还提供了 redhat-cluster 工具套件,以及许多有用的库、调度工具和故障转移工具,如 booth。所有这些都可以通过 apt-cache 或 Synaptic 查找,搜索关键词“cluster”即可。

Webmin

许多管理员永远不需要管理集群,许多人也不会负责需要中央备份解决方案的大量系统。然而,即使是通过命令行工具和文本编辑器管理单个系统也可能是一项繁琐的工作。即使是集群,有时也需要在单个系统上执行管理任务。幸运的是,有一个可以简化许多管理任务的应用程序,它易于使用,并且可以处理 Linux 管理的多个方面。它叫做Webmin

在 Debian Sarge 之前,Webmin 是 Debian 发行版的一部分。然而,负责打包的 Debian 开发者由于难以跟上频繁的发布,最终将其从 Debian 中移除。不过,上游的 Webmin 开发者维护着当前的软件包,这些软件包能够顺利安装。一些用户报告了问题,因为 Webmin 并不总是完全按照 Debian 的意图处理配置文件,但它确实尽力以兼容的方式进行处理,虽然一些用户在升级时遇到问题,但许多管理员对 Webmin 很满意。

只要你愿意在升级过程中处理冲突,或者限制使用对配置有重大影响的模块,你会发现 Webmin 非常有用。

安装 Webmin

可以通过将以下内容添加到你的 apt 源文件中来安装 Webmin:

deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

通常,这些内容会被添加到 /etc/apt/sources.list.d 目录下的一个单独的 webmin.list 文件中。

注意

配置中使用“sarge”作为发行版名称并不是一个错误。由于 Webmin 在 Sarge 发行版(Debian 3.1)之后被移除,开发者保持更新仓库的方式不变,也没有跟随 Debian 的代码名称进行更改。然而,仓库中提供的版本与自 3.1 版本以来的任何 Debian 发行版都兼容。

更新缓存文件后,可以通过 apt-get、aptitude 或 Synaptic 来安装和维护 Webmin。此外,如果你在 Debian 系统的 Webmin 内部请求升级,它将使用正确的 Debian 软件包进行升级。

使用 Webmin

Webmin 在后台运行,并在本地主机端口 10,000 提供 HTTP 或 HTTPS 服务器。你可以使用任何网页浏览器连接到 http://localhost:10000/ 来访问 Webmin。首次安装时,只有 root 用户或那些被允许使用 sudo 访问 root 账户的用户可以登录,但 Webmin 用户可以单独管理,或者与本地用户一起管理。

Webmin 提供了广泛且易于理解的菜单和图标,用于各种配置任务。Webmin 也是高度模块化和可扩展的,基础包中包含了大量的标准模块。这里无法详尽地介绍 Webmin,但它的一些功能包括:

  • Webmin 自身的配置(服务器、用户、模块和安全性)

  • 本地系统用户和密码管理

  • 文件系统管理

  • 启动和服务管理

  • CRON 任务管理

  • 软件更新

  • 基本的文件系统备份

  • 身份验证和安全配置

  • APACHE、DNS、SSH 和 FTP(如果你使用 ProFTP)配置

  • 用户邮件管理

  • Qmail 或 sendmail 配置

  • 网络和防火墙配置与管理

  • 带宽监控

  • 打印机管理

甚至有适用于集群的模块。此外,Webmin 可以搜索并允许访问本地网络上的其他 Webmin 服务器,或者你可以手动定义远程服务器。这使得安装在特定系统上的中央 Webmin 服务器成为所有其他服务器的网关,实质上提供了一个管理所有启用 Webmin 服务器的单一访问点。

Webmin 和 Debian

Webmin 理解许多发行版的配置文件布局。主要问题出现在某些模块未按照 Debian 开发者的偏好处理特定类型的配置,这可能会使软件包升级变得有些困难。

这可以通过几种方式处理。大多数模块提供直接编辑配置文件的方法,因此如果你已经阅读了 Debian 文档,你可以适当地修改配置,采用 Debian 特有的配置技术。或者,你可以选择允许 Webmin 根据其判断修改文件,并在升级相关软件时手动处理任何冲突。最后,你可以避免使用那些涉及特定软件的模块,这些模块更可能导致问题。

注意

一个这样的模块是 Apache,它不使用 sites-enabledsites-available 的链接。相反,它直接在 sites-enabled 目录中进行配置。有些管理员在 Webmin 中创建配置,然后移动并链接文件。另一些人则更喜欢在 Webmin 外部手动配置 Apache。

Webmin 模块不断变化,有些模块能够很好地识别 Debian 文件布局,因此目前无法给出一个详细的模块避免列表。

注意

使用 Webmin 时的最佳实践是,首先阅读文档并检查特定软件的配置文件。然后,在通过 Webmin 配置后,再次检查文件,确定是否需要进行更改,以便在特定软件的 Debian 配置框架中正常运行。基于此,你可以决定是否继续使用 Webmin 配置,或切换回手动配置该软件。

Webmin 安全性

安全性始终是远程访问系统时的一个重要考虑因素。Webmin 通过要求身份验证并提供详细的访问限制来处理此问题,从而提供了一个超越防火墙的控制层。Webmin 用户可以单独定义,或者指定某些本地用户。对 Webmin 中各个模块的访问可以限制为特定用户或用户组,并且 Webmin 的操作会保留详细日志。

Usermin

除了 Webmin,还有一个名为 Usermin 的服务器,它可以从与 Webmin 相同的仓库中安装。它允许单个用户更轻松地执行多项功能,例如更改密码、访问文件、读取和管理电子邮件以及管理个人资料的某些方面。它同样具有模块化功能,并且具备与 Webmin 相同的安全特性。

摘要

存在多种强大且灵活的中央备份解决方案,有助于管理多个远程服务器和站点的备份。Debian 还提供了帮助构建高可用性和 Beowulf 风格的多处理器集群的软件包。而无论你是否涉及集群管理,甚至是单一系统,Webmin 都能简化管理员的工作。

posted @ 2025-07-05 19:50  绝不原创的飞龙  阅读(27)  评论(0)    收藏  举报