Paranoid Penguin - 红帽企业版 4 中的安全特性

作者:Mick Bauer

本月,我将结束关于特定发行版安全特性的三部分系列文章。我从 SUSE Linux 10.0 开始,继续到 Debian GNU/Linux 3.1,本月我将讨论红帽企业 Linux (RHEL) ES 4。

红帽企业 Linux 是一个通用的 Linux 发行版,面向桌面和服务器市场。顾名思义,RHEL 旨在高度稳健、稳定和可扩展;换句话说,适用于大型企业的生产环境。而且,果然,RHEL 享有在各个方面都表现出色的声誉。与 SUSE 一样,RHEL 甚至可以在 IBM eServer z 系列大型机上运行。

然而,与 Debian 相比,Red Hat 在捆绑软件包方面更加坚持“少即是多”的严格理念,甚至比 SUSE 更甚。Debian 由超过 15,000 个软件包组成,SUSE 由超过 4,000 个软件包组成,而 RHEL ES 4 仅有 1,730 个(如果您包括 RHES 应用服务器和 Extras 软件包,严格来说它们不属于基础操作系统)。

我认为说这是一个容易辩护的设计选择一点也不委婉。通过限制其官方支持的软件包数量,Red Hat 拥有更小的攻击面(更不用说帮助台服务面)。软件包越少意味着复杂性越低;复杂性越低意味着更好的稳定性和安全性(至少在理论上是这样)。

这种设计理念的缺点是显而易见的。这意味着在任何给定的工具领域(网络服务器/守护进程、加密工具等等)选择更少,灵活性更低,并且更有可能最终安装第三方软件包,甚至从源代码自行编译。

正如我在这专栏中多次说过的那样,自行编译并没有什么坏处,特别是当这意味着您可以编译掉(排除)不必要或潜在不安全的功能时。但是,在自动安全更新方面,没有什么比发行版支持的二进制软件包更好的了。并且,除了 Gentoo 之外,没有任何主要的 Linux 发行版具有任何自动化的方法来直接从源代码向本地编译的软件应用安全补丁。

此外,正如我即将展示的那样,RHEL ES 4 在安全增强软件(SELinux 是唯一的例外)和安全扫描软件的特定领域尤其薄弱。这并不意味着我认为 RHEL 不安全;它较小的攻击面和出色的 SELinux 支持都非常重要。但这确实意味着,与其他主要发行版相比,您在 如何 保护基于 RHEL 的服务器或桌面系统方面的选择更少,甚至在如何在安全应用程序中使用它方面的选择也更少。

安装 RHEL ES 4

红帽企业 Linux ES 4 具有非常易于使用的安装 GUI,除了安装基础操作系统外,还允许您选择其他软件包、设置 root 密码、设置网络、启用简单的本地防火墙策略并启用 SELinux。首次重启后,此安装程序会运行其他模块,用于设置红帽网络订阅、创建第一个非 root 用户帐户以及配置 X Window 系统。

就我个人而言,我一点也不喜欢红帽安装程序的软件包选择模块。首先,它只允许您从安装介质上可用软件包的子集中进行选择。(也就是说,就我所能看到的而言——可能仅仅是我知道可用但找不到的少数软件包,例如 gnupg,只是被埋在我不认为会去看的类别中)。对于它确实显示的软件包,安装程序既不显示详细描述,也不显示所需的大概磁盘空间。

此外,它的依赖项检查功能显然非常原始。如果软件安装程序找不到它需要的东西,它会返回错误,但不会为您提供任何解决问题的方法(定位丢失的软件包、取消选择或卸载具有未满足依赖项的软件包等等)。虽然简单性可能是一种美德,但这种有限的功能根本无法与 Debian 的 aptitude 软件包管理工具或 SUSE 的 YaST 相媲美。如果您想在安装完成后再次运行此安装程序模块,它位于 GNOME 的“应用程序”菜单下的“系统设置”下的“添加/删除应用程序”中,但我认为您可能会更乐意使用 up2date 甚至古老的 RPM 来执行其他软件安装。

那么,RHEL ES 4 中 哪些与安全相关的软件包?表 1 列出了其中的大多数。简而言之,如果您想保护本地系统,SELinux 和您的本地防火墙策略几乎是您唯一可用的工具。如果您想审核和分析其他系统的安全性,除了 Nmap 之外,RHEL ES 4 几乎没有什么可以提供的。

表 1. RHEL ES 4 中的一些安全增强软件包

软件包名称描述
bind-chroot配置您的基于 BIND 的 DNS 服务器在 chroot jail 中运行。
dovecot专为安全设计的 IMAP 服务器(邮件传递代理)。
freeradius用于网络设备的 RADIUS 身份验证服务。
krb5-serverKerberos 身份验证/加密服务器。
splint用于审核 C 代码中错误(包括安全漏洞)的工具。
vsftpd非常安全的 FTP 守护进程:RHEL 唯一的 FTP 服务器,但一个极好的选择。
cryptsetup用于创建加密文件系统(作为虚拟块设备)的工具。
ethereal, tcpdump经典的协议分析器(又名数据包嗅探器)。
gnupgGnuPG 电子邮件/通用加密工具。
ipsec-tools用于构建 IPSEC VPN 隧道的实用程序。
ncNetcat,一个通用的 IP 数据包重定向器。
nmap, nmap-front end.Nmap 端口扫描器及其 GUI 前端。
openldap-clients, openldap-serversOpenLDAP 目录和身份验证系统。
openssh最流行的免费安全 Shell 守护进程和客户端。
openssl通用的 SSL/TLS 加密库和工具。
policycoreutils, setools, setools-gui用于配置和管理 SELinux 策略的工具。
selinux-doc默认未安装,但您会想要此 SELinux 文档集合。
postfix-pflogsummPostfix 邮件传输代理的日志摘要器。
spamassassin流行的 SPAM/UCE 过滤器。
stunnelTCP 应用程序的通用 SSL/TLS 包装器。
sudo, usermode允许非特权用户以 root 身份运行进程的工具。
tcp_wrappers为 TCP 应用程序提供基于 IP 的简单访问控制。
up2date, up2date-gnome红帽基于网络的自动软件更新工具。

表面上看,这是一个不错的应用程序列表;这些都是重要的安全增强工具。然而,值得注意的是,缺少了

  • 任何类型的文件完整性检查器,例如 Tripwire 或 AIDE。

  • Syslog-NG,一个比 RHEL 仍然依赖的过时 syslogd 更强大的系统日志记录器。

  • 任何类型的虚拟化环境(用户模式 Linux、Bochs、Xen 等)。

  • 无处不在的入侵检测系统和数据包记录器 Snort。

  • Web 安全工具,例如 squidguard、mod_security 等。

当然,您可以完全自由地手动下载和编译这些工具中任何一个的源代码。但是,您将无法在这些软件包上利用 up2date 的自动更新功能。

因此,无论是在可用安全软件包方面还是在软件安装程序本身方面,RHEL 都有些令人失望。从好的方面来说,我确实喜欢红帽企业 Linux 安装程序的防火墙/SELinux 模块(图 1)。防火墙和 SELinux 功能默认都是启用的,并且屏幕左侧的帮助窗口用简单的语言解释了这两个设置。

如果您完全不熟悉 SELinux,您可以选择“警告”设置,这将导致内核记录违反本地 SELinux 策略的事件,而实际上不会阻止这些事件。默认情况下,SELinux 设置为活动状态,使用默认策略来限制 Apache (httpd)、bind、NIS (ypbind)、dhcpd、mysqld、ntpd、portmap、postgresql、snmpd、squid 和 syslogd 的行为。

Paranoid Penguin - Security Features in Red Hat Enterprise 4

图 1. RHEL ES 4 中的防火墙和 SELinux 配置

关于红帽企业 Linux ES 4 安装程序的最后一件值得注意的事情是,无论是在初始设置期间(当您输入 root 密码时),还是在首次重启后(当您创建第一个非 root 用户帐户时),安装程序都不会执行任何类型的密码复杂度检查(类似于 SUSE 安装程序执行的那种)。它甚至不会像 Debian 那样通过简单的文本框警告不要选择过于简单的密码。

这很不幸。密码猜测和暴力破解攻击仍然非常普遍。不过,我很高兴看到,默认情况下,XScreenSaver 实用程序配置为在屏幕保护程序启动时自动通过密码锁定 X 会话。(如果只有那些保护 XScreenSaver 的密码被要求包含大小写混合、标点符号和数字的组合,我会更满意!)

使用 up2date 进行自动更新

在任何 Linux 系统上,使您的系统保持最新的安全补丁绝对是必不可少的。红帽在几年前推出 up2date 实用程序和红帽网络服务组合时,是提供自动更新的先驱,而这个系统现在更加成熟。

其工作方式是,当您设置红帽系统(任何当前版本)时,在首次重启后,系统会提示您配置红帽网络订阅。每个红帽产品都包含具有 RHN 更新授权的订阅。当提示时,您只需输入您想要使用的用户名和密码(一个帐户可以用于管理同一订阅下的多个系统),然后输入红帽安装介质附带的“激活您的订阅”卡上打印的订阅号。

所有这些的最终效果(绝非双关语)是,您现在将拥有红帽网络服务的有效订阅,其中系统配置文件与您的新红帽系统相对应,而新红帽系统又与 RHN 更新授权相关联,该授权允许您的系统检查和下载您购买的 RHEL 版本中所有软件包的最新版本。

检查和应用安全更新的最简单方法是右键单击 GNOME 桌面上的红帽网络警报通知工具的图标(如果您的系统不是最新的,则是一个发光的红色感叹号,如果系统是最新的,则是一个蓝色复选标记),然后根据需要选择“检查更新”、“运行 up2date”等等。

您可以通过使用您的 RHN 凭据登录红帽网络网站(美国用户为 www.redhat.com/en_us/USA/rhn),单击“系统”选项卡,单击您的系统配置文件,单击“属性”,然后选中“自动应用相关勘误表”旁边的框来设置自动更新(图 2)。显然,您不应该在高可用性或变更受控系统上启用此功能,因为软件补丁始终有可能引入其他错误或冲突。

Paranoid Penguin - Security Features in Red Hat Enterprise 4

图 2. 通过 RHN 网站配置自动更新

虽然 up2date/RHN 系统成熟且功能丰富(特别是对于需要且有能力为网络管理和配置授权付费的大型组织),但作为 Linux 桌面用户,我发现它比 Debian 的 apt 系统(在某些方面更原始,但更容易编写脚本)或 SUSE 的 YaST Online Update 系统(更容易配置)更难使用。

奇怪的是,与 RHEL 的许多其他方面一样,up2date 配置选项似乎分布在多个 GUI 中,包括红帽网络网站,除非您当然是从 shell 配置(在这种情况下,您需要的一切都在 /etc/sysconfig 中)。如果您在服务器上管理红帽(甚至可能没有安装 X Window 系统,这始终是加固系统的好策略)或者以命令行方式为主,我相信 up2date 和其他红帽功能很容易学习。具有讽刺意味的是,我发现 RHEL 的许多 GUI 本应简化事情,但却令人困惑。(但也许只是我!)

红帽企业 Linux 上的 SELinux

正如我们所见,RHEL 似乎非常依赖 SELinux 来实现系统安全。这绝不是一个草率或精神懒惰的设计选择;SELinux 针对系统用户、应用程序、进程和文件提供了一系列全面而细粒度的强制访问控制。如上一节所述,包含的目标 SELinux 策略为一些最常用的应用程序提供了默认控制。

可以使用通过 GNOME 的“应用程序”→“系统设置”菜单访问的“安全级别”小程序轻松调整此默认策略的行为(图 3)。同一个小程序可用于配置简单的本地防火墙策略。

Paranoid Penguin - Security Features in Red Hat Enterprise 4

图 3. 安全级别配置小程序

RHEL ES 4 中 SELinux 的实现因其简单性而真正值得称赞,更不用说它默认启用了。这是好消息;不太好的消息是,要创建自定义 SELinux 策略,即使用比包含的策略更严格或更宽松的控制,或者解决其他应用程序的策略,您将需要阅读一些内容。最好的起点是《Red Hat Enterprise Linux 4 Red Hat SELinux 指南》,可在 www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/selinux-guide 获取。

为此,您可能还需要安装一些额外的 GUI 工具,即 setools 和 setools-gui 软件包。这些软件包除其他外,还提供 sepcut、apol、seaudit 和 seuserx。有关这些工具的作用以及如何使用它们的更多信息,请参阅 /usr/share/doc/setools-1.5.1 中的文档(您系统上的目录名称可能反映不同的版本号)。

RHEL 中的防火墙功能

我已经提到了 RHEL ES 4 的 GNOME 桌面中的“安全级别”小程序。与 SELinux 不同,此小程序在本地防火墙策略的配置选项方面并没有比您在安装时获得的更多。此策略允许所有出站网络事务(源自本地系统),并阻止所有入站网络事务(目标为本地系统),但您在此处选择的服务除外。这些服务与红帽安装程序中的服务相同,即 HTTP、FTP、Telnet、邮件 (SMTP) 和 SSH。

在“安全级别”小程序中,您还可以以 [端口号]:[协议] 的形式指定其他端口列表,例如689:tcp, 53:udp, 53:tcp。如果您需要比这更复杂的功能,您必须从头开始编写自己的 iptables 语句。令人高兴的是,您只需通过在文件 /etc/sysconfig/iptables 中添加或编辑行即可做到这一点。有关更多信息,请参阅 iptables 手册页和《Red Hat Enterprise Linux 4 安全指南》。

目录服务和 PKI

值得一提的是,红帽最近收购了 Netscape Directory Server,并对其进行了更新,并将其重新命名为红帽目录服务器。它被定位为 OpenLDAP 或 Sun Java System Directory Server 的商业支持替代方案。虽然 RHEL 中未包含(它是一个需要额外付费的附加产品),但作为红帽安全愿景的关键组成部分,值得一提。但是,RHEL 确实包含完全支持的 OpenLDAP 软件包。

同样,红帽证书系统提供商业支持的 PKI 解决方案。它也是 RHEL 中未包含的附加产品。当然,RHEL 中包含 OpenSSL,但没有任何其他设置工具,例如 TinyCA。

结论

我对红帽企业 ES 4 的安全特性感到喜忧参半。一方面,RHEL 提供的不同安全增强软件工具远不及 Debian GNU/Linux 或 SUSE Linux。其他主要 Linux 发行版中充分体现的整个安全工具类别(完整性检查器、入侵检测系统、虚拟化环境等等)都缺失了。

另一方面,红帽显然对其发行版的大小和范围保持了无与伦比的控制水平。它对它将支持和维护的内容以及它将不支持和维护的内容做出了艰难的选择,这无疑减少了红帽系统的攻击面。我毫不怀疑,红帽安全团队比 Debian 安全团队更容易应对 RHEL 的 1,730 个软件包中的漏洞,而 Debian 安全团队需要应对该发行版的 15,000 多个软件包中的漏洞。

此外,红帽不仅在 RHEL 4 中包含了 SELinux,而且默认启用了它,这迈出了非常大胆的一步。SELinux 提供的内核级强制访问控制有可能缓解许多原本可能使用附加实用程序解决的风险。此外,由于这种技术是主动的,旨在防止不良行为,因此它本质上比入侵检测、完整性检查和其他被动技术更强大(尽管如果 RHEL 同时 具有主动和被动措施会更好——即使有 SELinux,也可能发生不好的事情)。

您是否认为 RHEL 精简而强大,还是有限且笨拙,将取决于您的特定 Linux 需求。我承认,我不像对 Debian 和 SUSE 那样热衷于 RHEL 的一些原因与我作为安全架构师和顾问的工作有关。我依赖于一组专门的工具,其中大多数工具 RHEL 认为对其目标市场(大概是企业环境中的 IT 专业人员)来说是不必要的。尽管如此,在我看来,如果我需要保护运行 RHEL 的企业 Web 服务器,无论有没有 SELinux,我仍然会想要手动安装 mod_security、Squidguard、Syslog-NG 和其他 RHEL 目前缺少的工具。

Mick Bauer (darth.elmo@wiremonkeys.org) 是美国最大的银行之一的网络安全架构师。他是 O'Reilly 图书 Linux 服务器安全 第二版(以前称为 使用 Linux 构建安全服务器)的作者,偶尔在信息安全会议上发表演讲,并创作了“网络工程波尔卡”。

加载 Disqus 评论