本文详细介绍让Linux 更安全(二)
惟有谨小慎微者方可幸存,与其他领域一样,在确保 Linux® 系统的安全时,这句话也同样适用。幸运的是,有很多安全特性,或者已经编译到内核中,或者已经加入到很多 Linux 发行版本中,或者可以以开放源代码应用程序的形式单独获得。第 2 部分涵盖了清单评估、风险分析、确定用户类别和访问特权,以及安全获得 Linux 发行版本的更详细行动计划和步骤。
在此系列文章中,您将看到如何以一种安全的方法来计划、设计、安装、配置和维护运行 Linux 的系统。除了安全概念的理论概述、安装问题、潜在的威胁及其作用以外,您还将得到关于如何保护和加固基于 Linux 的系统的实用建议。我们将讨论最小化安装、加固 Linux 安装、授权/认证、本地和网络安全、攻击和如何防御攻击,以及数据安全、病毒和恶意程序。
本系列的 第 1 部分 通过给出关于安全概念和潜在威胁的一般理解让您开始上手。本文引导您进行到下一个阶段,列出当计划一个安全安装时需要谨记的事情。
安全计划
第一步 —— 在插入发行版本 CD 并启动安装程序之前 —— 是制定一个安全计划:确定系统将要提供什么服务,要使用什么硬件,需要什么软件,如何组织安装。通过在实际安装前认真地制定这样一个计划,在非常早的阶段就可以确定并排除很多可能的安全问题。这样做是有益处的,因为它有助于最小化系统入侵或者断电的风险。而且,它为发生攻击或者发布软件漏洞和补丁时进行快速反应提供了一个坚实的基础。
当考虑安全策略时,重要的是要注意计算机系统的安全性与可用性之间总是会有一个折衷。如果因为复杂的设置和维护以及可用性的缺乏而无法使用,那么最完善的安全特性也没有意义。另外,极度复杂的、极其耗费处理能力的加密算法实际上会锁住系统,几乎不留下任何计算能力给真正的任务使用,那么它又有什么用呢?
要制定安全计划,您应该执行下面的步骤,收集所有相关信息:
进行清单评估时要回答的问题
使用什么硬件?
指定硬件,它的位置,以及任何可能的特定安全特性(比如加锁的而且防火的房间)。列出网络接口、协议、地址以及相关的名称。
应该安装什么软件和操作系统?
指定应用程序及它们的数量,检查每个软件的许可证。
存储什么类型的数据,它的危险程度如何?
确定数据的种类。对于每一个确定的种类,根据其机密性和稳私考虑数据的危险程度。
谁对系统负责?
为系统指定负责人(例如,一个单独的系统管理员,一个专门的 IT 服务部门,或者一个支持提供商)。
完成清单评估
获得安全计划的第一个步骤是,评估清单以了解哪些是必须要保证安全的(参见右面的侧栏)。这样的清单集中关注计算机的物理硬件、网络连接、接口,并定义其职责。所有从清单评估得到的信息都应记入文档。记录文档的一个合适的方法可以是一个包含有每台计算机所有相关信息的电子数据表。
定义网络服务和软件
对于每一台计算机,重要的是要定义它使用或者提供哪些网络服务,以及使用或提供服务的软件应用程序。网络服务(除了其他内容以外,可能包括 DNS、文件传输、打印机和文件共享、Web/Internet、电子邮件和数据库)应该记录在部署计划之中,这个计划还包括所使用的软件程序包以及此计算机是配置为客户机、服务器还是同时具备两个角色。稍后,基于软件和服务的列表,您应该安装一个只包含必需软件的绝对最小化的系统,这样可以使得具有隐藏安全漏洞的可能性最低。
除了定义软件服务以外,您还需要确定用于通信的协议,这也会带来一些安全问题。网络传输是否需要通过基于 SSL 的 HTTP(https)进行加密,还是普通的 HTTP 就足够了?文件传输协议是否强制用户进行认证(比如使用 sftp),或者对必需的安全层级来说匿名的、不加密的访问是否合适?
通常,客户机工作站被配置为使用多个网络服务。不过,服务器应该专门提供一种单一的服务,因为这样会简化配置并降低发生配置错误的可能性。应该由有限数目用户使用的服务应该通过防火墙保护起来以防止不必要的访问。防火墙可以有效地实现管理两个或多个网络之间网络传输的安全策略。
完成风险分析
要在系统的安全性与可用性之间找到适当的折衷,重要的是要针对存储在计算上的数据的类型进行风险分析。要弄清楚需要采取哪种类型的安全措施来保护资源的机密性、完整性和可用性,第一个步骤就是进行风险分析。
风险分析基于清单评估 —— 它声明了存储的是什么类型的数据 —— 集中关注系统受到安全威胁的可能性以及相继而来的后果。换句话说,对于清单评估中定义的每一类数据,您都需要对此数据受到非授权访问的可能性以及这种事件的影响进行评估。这种评估量化为三个级别:高、中、低。所必需的安全级别是事件的概率及其影响的平均水平。
确定用户种类和访问特权
您应该根据其特权和访问权限列出计算机系统的主要用户,或者用户的种类。对于桌面计算机而言,这可能是相当简单的,因为用户的数目通常较少。不过,基于类似的工作分工或对数据资源和应用程序的类似需要来定义用户分类是有意义的。
对服务器来说,确定用户种类通常非常复杂。管理员通常可以访问服务和操作系统工具的配置。除此以外,还有根据需要使用相应服务的不同用户(本地的和远程的用户)。连接到因特网上的公共服务器基本上是任何人都可以访问的,而内部服务器的用户可能会根据工作角色、部门或者办公室位置进行分类。所以,如果需要,您应该区分本地和远程用户以及临时和来宾用户。对于已经确认的用户种类,定义他们需要访问和操作(例如,读、创建、修改或删除数据)哪些数据资源。
详细行动计划
既然安装的总体环境和目标都已经完善地记入文档,您现在可以深入细节了 —— 使用什么软件,如何安装和配置它,等等。您编写的计划应该详细到能回答出在安装过程中出现的任何问题的程度。
检查源代码
Ken Thompson 是 UNIX 的创始人之一,他在 Relections on trusting trust 中讨论了为了设法使源代码不能揭示安全问题而采取的很多步骤。
首先,他为 login 命令打上补丁,使其包含一个后门,这样使他可以使用一个特定的密码登录进入任何 UNIX 系统。
然后,他给 C 编译器打上补丁,使其当编译 login 命令时进行检测。C 编译器将自动把后门插入到 login 程序中,所以,不需要在 login 命令的源代码中保留后门。
然后,他对 C 编译器进行修改,使其在通过源代码编译 C 编译器本身时进行检测,并自动添加 login-detection-and-patching 代码和 C-compiler-detection-and-patching 代码。
结果得到一个源代码中不包含任何后门痕迹的系统。
选择 Linux 发行版本和服务器软件程序包
这实际上是两个单独的步骤,不过先做什么要取决于您的情况。在很多情况下,由于组织的政策、企业许可证协议或者可用的技术,要使用的发行版本已经确定。有时,您会先关注可以满足安装用途的软件程序包的选择;然后,根据程序包的先决条件、哪个发行版本包含立即可用的程序包、或者发行版本的价格,来选择发行版本。不过,通常两者是结合在一起的,您必须反复缩小选择范围。不过,您永远不应该仅仅因为您手边有某个安装媒体而选择安装那个发行版本。
对于每一种使用情形(邮件服务器、文件服务器、Web 服务器、字处理等等)都有多种软件程序包可以满足其用途。尤其当用户不直接与软件程序包打交道时(比如由专门团队管理的服务器软件),您选择更为安全的软件程序包时所受的限制就会更少。要对各种 Web 服务器、邮件传输代理、数据库管理系统等,或者甚至是整个发行版本的安全方面进行评价,最好首先搜索 BugTraq 或 Full Disclosure 等邮件列表(参见 参考资料 中关于这些的链接)。
基于软件程序包的历史问题来判断其安全性,这实际上相当于看着后窗玻璃驾驶汽车 —— 您不知道将要遇到的是什么,但是您可以得知您是在直路上还是在弯路上。另一个应该谨记的问题是,相对于很少用到的,经常用的软件程序包受到的检查更多。仅仅因为“Tom's HyperWeb Server v0.0.2”在这些邮件列表上没有任何已知的 bug,并不意味着它就没有 bug。
能在源代码层次上对任何软件程序包进行审计,经常被列举为开放源代码软件的优势之一。不过,可用时间、技术和预算等现实的约束使得这种方法在几乎所有情形下都是不切实际的,所以您不得不依赖于程序员 和/或 程序包维护者和发行者的诚实。
您还应该将打算如何运行一个服务记入文档。需要考虑的一些事情:
附加的软件程序包
除了计划的使用情形所需要的软件之外,安装过程很可能还会安装其他软件。您需要的软件(实际的操作系统:Linux 内核、共享库、基本的实用程序等等),您想要的软件(增强安全性的软件,比如配额、防火墙和审计),以及您不想要的软件(不必需的程序包)。
为了方便,发行版本通常向默认安装添加保持系统运行和满足其用途所不必要的软件程序包。在运行期没有用户交互的系统中,图形用户界面、多媒体软件和游戏都属于这种不必要的软件。
任何安装到机器上的软件都必然会占用资源并降低机器的安全性,引入可能被利用的潜在的 bug:
关于增强安全性的程序包,您应该考虑安装下面这些:
常见工具的安全代替者
| 任务/使用情形 | 老的不安全的应用程序 | 推荐的安全代替者 |
| 远程访问命令行 | ||
| 图形方式访问远程系统 | ||
| 文件传输 | ||
| 镜像/备份 |
使用安全的工具程序版本
当前仍然有很多早期 Internet 应用程序存在,并且在使用中。开发它们时,安全还不是个大问题,因为那时 Internet 参与者很少。近些年,随着因特网的发展和迅速成长,安全性的缺乏使得那些应用程序不适于当前的应用。这就是开发它们的代替者的原因,这些代替者可以以安全的方式执行相同的任务 —— 现在的任务还是像在早期时一样重要。在这里,“安全的方式”的基本意思是:
尽管这些代替者通常被称为“安全的标准的应用程序”,但是它们并不是绝对不会受攻击。这表示,虽然您经过深入考虑使用了安全的版本而不是不安全的版本,您仍需要建立另外的观念和步骤来保护您的系统。侧栏 常见工具的安全代替者 中列出了适用于所选常见任务的应用程序。这个列表不是(也不可能是)完全的,所以,即使是要完成那些没有在侧栏中列出的任务,您也应该始终考虑使用安全的应用程序。
分区
选择的应用程序以及安装所使用的源代码并不是安全性的惟一因素。要减少那种试图填满可用磁盘空间的 DoS 攻击带来的影响,请确保您至少为下面这些目录计划专门的分区:
获取发行版本
可以通过很多不同的途径获得 Linux 发行版本:热缩塑料包包装的 CD/DVD 发行版本、从其他人那里拷贝、下载,等等。如果系统在安装的时候就已经被破坏,那么它根本是没有价值的,因此您必须确保基于“干净”的来源进行安装 —— 确认代码没有后门。实际上,这一负担转嫁给了那些编制包含安装文件的 CD/DVD 组的发行者。虽然您可以信任发行者,不过,根据发行者公布的校验和来校验安装媒体的校验和以确定媒体是正品,仍不失为一个良好的习惯做法。
如何校验安装媒体
要校验 MD5 校验和,您可以使用
$ md5sum /path/to/iso/image.iso
或
$ md5sum /dev/cdrom
来分别校验 ISO 映象或者 CD。计算出的校验和必须与发行者公开的相匹配。如果您通过 Web 得到发布的校验和,那么要确保使用 https,并查看连接中使用的凭证,以确保校验和的发布者是真实的。
不推荐通过网络或者因特网进行安装 —— 尽管技术上可行。一个站点可能(比如,通过欺骗)将自己伪装为一个可信任的安装源,并提供加入了后门的修改过的软件程序包,使得在安装后入侵者可以不费力地接管系统。当然,可**以通过内部网络服务器进行安装,例如当来源已知而且合法时。
刚刚安装的操作系统通常不能马上使用,可能没有安装最新安全补丁。此时是最容易受到攻击的(参见 参考资料 中一篇关于未打补丁的系统预期生存期的文章的链接),在从安装过程直到完成配置步骤期间,应该从 Internet 上隔离出来,或者至少是在一个安全的网段。在本系列的下一篇文章中将讨论这些步骤。
安装后,应该通过第二台(有适当保护的)计算机从 Internet 上下载最新的安全补丁和更新。同样,必须选择可信任的安装来源来下载补丁。可以通过严肃的提供者所给出的校验和或者散列来检验下载的安装文件的完整性。
来源:IBM DW中国 作者:Mario Eberlein 责编:豆豆技术应用