Paranoid Penguin - Debian 3.1 中的安全特性
上个月,我开始了关于特定发行版安全特性的三部分系列文章,首先是 SUSE Linux 10.0。本月,我继续介绍 Debian 3.1,下个月我将以 Red Hat Enterprise Linux 结束该系列。
您可能还记得,除非您错过了上个月的专栏,或者在那之后一直沉迷于损害记忆力的事情,否则 SUSE 10.0 的几个方面确实给我留下了深刻的印象:其各种增强安全性的软件包和安全扫描工具;其包含的几种不同的虚拟机平台;以及 Novell AppArmor,它为单个应用程序和进程添加了强制访问控制 (MAC)。
当我开始探索 Debian 3.1 (Sarge) GNU/Linux 中的安全特性时,我特别有兴趣确定 Debian 3.1 在这些方面与 SUSE 10.0 相比如何?Debian 又带来了哪些独特的安全特性?
与 SUSE 一样,Debian GNU/Linux 是一种通用 Linux 发行版,旨在广泛应用于桌面和服务器角色。与 SUSE 类似,Debian 也包含大量且种类繁多的二进制软件包。
与 SUSE 不同,Debian 是一项 100% 非营利性事业。Debian 3.1 没有昂贵的企业版,其功能比免费软件版本更多。Debian GNU/Linux 3.1 只有一个版本,它是 100% 免费的——除非您从 Debian 重新包装商(例如 LinuxCentral,请参阅在线资源)处购买 Debian CD-ROM,在这种情况下,您主要支付的是 CD-ROM 生产成本,而不是 Debian 本身。
可以说,任何纯粹的免费软件产品都存在相关的安全风险。以商业为导向的 IT 经理喜欢问:“当出现问题时,谁负责?”但其他人指出 Debian 在发布及时安全补丁方面的出色记录,这证明 Debian 安全团队至少与任何同等的商业实体一样可靠和响应迅速。我自己的观点是,它的免费性不是一个主要因素。Debian 在安全方面并不比商业通用 Linux 发行版更强或更弱。
那么,Debian 的安装体验如何?它如何鼓励良好的安全性?
与其他主要的通用 Linux 发行版相比,Debian 的安装程序明显是老式的。它使用一个简陋的、基于文本的 GUI,其功能仅限于安装软件包。虽然这可能会让许多用户感到反感,尤其是 Linux 新手,但它最大限度地减少了安装 Debian 所需的系统资源以及您等待安装程序加载到 RAM 中所花费的时间。
软件包安装与任何 Linux 发行版一样,是 Debian 安装过程的核心,在 Debian 3.1 中,它由 aptitude 处理。aptitude 类似于其前身 dselect,但有一些重要的区别。第一个区别是,虽然它像 dselect 一样是基于文本的,但 aptitude 具有可以通过按 F10 键访问的下拉菜单。第二个区别是,至少对我而言,aptitude 组织软件包的方式比 dselect 更不容易混淆。与 SUSE、Red Hat Enterprise Linux 等中的图形化软件包安装程序相比,它仍然很原始(并且可以说比基于文本的 Slackware 安装程序更笨拙);然而,aptitude 比 dselect 有了显着的改进。
使用 aptitude,还可以轻松更新本地软件包列表并从 Debian.org 站点获取最新的安全补丁(请参阅资源)。实际上,每当您使用高级软件包工具 (apt) 系统安装软件时(例如,当您运行 aptitude 或 apt-get 时),Debian 会自动检查您尝试安装的软件包的安全更新。
关于 Debian 安装程序的坏消息是,即使是初步的,它似乎也没有对您的系统进行太多的加固。它没有给您机会来创建即使是最基本的本地防火墙策略或选择预配置或默认策略。它甚至不会检查您的 root 和第一个非特权用户帐户密码的复杂性(尽管它确实警告您密码需要复杂)。
相反,Debian 的重点似乎是为用户提供尽可能广泛的安全相关软件包,而不是实际帮助用户设置这些软件包中的任何一个。考虑到 Debian 总共包含超过 15,000 个软件包,您确实有很多选择。表 1 列出了一些直接增强系统安全的 Debian 软件包。
表 1. Debian 3.1 中的一些安全增强软件包
软件包名称 | 描述 |
---|---|
aide, fam, tripwire, osiris | 文件/系统完整性检查器。 |
bastille | 出色、全面且交互式(但可脚本化)的加固实用程序。 |
bochs | Bochs 虚拟 x86 PC。 |
bozohttpd, dhttpd, thttpd | 功能最少、安全的 Web 服务器守护程序。 |
chrootuid, jailer, jailtool, makejail | 用于使用和创建 chroot jail 的实用程序。 |
clamav | 通用病毒扫描器。 |
cracklib2, cracklib-runtime | 用于防止用户选择容易猜测的密码的库和实用程序。 |
filtergen, fireflier, firestarter, ferm, fwbuilder, guarddog, mason, shorewall | 用于生成和管理本地防火墙策略的工具。 |
flawfinder, pscan, rats | 解析源代码以查找安全漏洞的脚本。 |
freeradius, freeradius-ldap, etc. | Free radius 服务器,适用于运行 WPA 的 WLAN。 |
frox, ftp-proxy | FTP 代理。 |
gnupg, gnupg2, gpa, gnupg-agent | GNU 隐私卫士 (gpg),一种通用且无处不在的电子邮件和文件加密实用程序。 |
harden, harden-clients, harden-servers, etc. | 实际上是一个空软件包,仅包含安装和卸载其他软件包以提高系统安全性的脚本。 |
ipsec-tools, pipsecd, openswan, openswan-modules-source | 用于构建基于 IPSec 的虚拟专用网络的工具。 |
libapache-mod-chroot, libapache2-mod-chroot | Apache 模块,用于在没有填充 chroot jail 的情况下运行 chrooted 的 httpd。 |
libapache-mod-security, libapache2-mod-security | 代理 Apache 的用户输入和服务器输出。 |
oftpd, twoftpd, vsftpd | 功能最少、安全的 FTP 服务器守护程序。 |
privoxy | 增强隐私的 Web 代理。 |
psad | 端口扫描攻击检测器。 |
pyca, tinyca | 证书颁发机构管理器。 |
selinux-utils, libselinux1 | SELinux 的实用程序和共享库。 |
slat | 分析 SELinux 策略中的信息流。 |
slapd | OpenLDAP 服务器守护程序。 |
squidguard | 为流行的 Squid Web 代理添加访问控制和其他安全功能。 |
squidview, srg | Squid 的日志分析器。 |
syslog-ng | 下一代 syslog 守护程序,具有比标准 syslogd 更多的功能。 |
trustees | 扩展文件/目录权限,允许单个对象上的不同(多个)组具有不同的权限。 |
uml-utilities | 用于 Linux 访客的用户模式 Linux 虚拟机引擎。 |
除了表 1 中的本地安全增强软件包外,Debian 还包括许多用于分析其他系统和网络安全性的工具。表 2 列出了一些值得注意的工具。
表 2. Debian 3.1 中的安全审计工具
软件包名称 | 描述 |
---|---|
dsniff, ettercap | 交换环境的数据包嗅探器。 |
ethereal, tcpdump | 出色的数据包嗅探器。 |
fping | 洪泛 ping(多目标 ping)。 |
idswakeup | 用于测试入侵检测系统 (IDS) 的攻击模拟器。 |
john | John the Ripper,一种密码破解工具(合法用于识别弱密码)。 |
kismet | 支持多种无线网卡的无线 LAN 嗅探器。 |
nessus, nessusd, nessus-plugins | Nessus 通用安全扫描器。 |
nmap | 无可争议的端口扫描器之王。 |
snort | 出色的数据包嗅探器、数据包记录器和入侵检测系统。 |
在安装时筛选所有这些软件包可能会让人望而生畏。aptitude 按名称搜索软件包的能力有所帮助。“Securing Debian Manual”(请参阅资源)也很有帮助。
一旦您选择并安装了初始软件包集,aptitude 将运行一些安装后脚本(取决于您安装的内容)。在我的测试系统中,我失望地看到这些脚本中与安全性相关的很少——这些脚本主要处理基本系统设置,例如网络设置。如果您以后需要重新配置这些基本设置(而无需直接编辑 /etc 中的文件),您可以使用 base-config 命令重新调用安装程序的该部分。
总而言之,Debian 的安装时安全功能令人失望且稀少。将纯粹由志愿者驱动的 Debian 工作与商业产品进行比较可能不公平,但在我看来,Debian 非常需要一个类似于 SUSE YaST 的集中式、安全功能丰富的安装和管理实用程序。
与其他主要 Linux 发行版一样,Debian 的规模和复杂性随着每个新版本的发布而增加。这里的悖论是,Debian 不断增长的、几乎无与伦比的软件包选择使其更加复杂,甚至达到令人困惑的程度——困惑会导致马虎;马虎会引入本可避免的安全漏洞。一个中央管理实用程序将在很大程度上减少这种混乱,并增强 Debian 新手和高级用户的安全性。如果它包含用于创建本地防火墙策略、管理虚拟机、管理 SELinux 或 Trustees 策略等的模块,那就更好了。
抛开所有抱怨,我喜欢 Debian,并且在撰写本文时,我正在将我的 Web 服务器从 SUSE 迁移到 Debian(尽管我的笔记本电脑仍将是 SUSE 机器)。还值得一提的是,有许多非官方的 Debian 安装程序可用,包括基于 Debian 且能够运行 Debian 软件包的其他 Linux 发行版(请参阅资源)。
因此,接下来,让我们谈谈 Debian GNU/Linux 3.1 中一些特别有趣且有用的安全相关软件包组。
如果您想要基于 hypervisor 的虚拟机环境,例如 Debian 的 Xen,您需要获取并编译源代码,但这并不是太大的障碍。Debian 没有 Xen 软件包。但是,Debian 确实包含另外两种通用虚拟机环境的二进制软件包:用户模式 Linux (UML) 和 Bochs。(它还包括 Wine,但这更像是一个用于运行特定 Windows 应用程序的垫片,而不是虚拟机本身。)
在 Debian 官方支持的两个虚拟机中,用户模式 Linux 可能是使用虚拟主机隔离不同应用程序环境(例如,一个虚拟机上的 Apache 和另一个虚拟机上的 BIND9)的最可行选择。这是因为 Bochs 的性能限制:Bochs 模拟每个 x86 CPU 指令和所有 PC 设备。因此,Bochs 似乎更适合单访客系统应用程序,例如在 Linux 桌面系统上运行 Windows 应用程序。Bochs 项目主页(请参阅资源)包含官方文档以及指向邮件列表、讨论区等的链接。Debian 的 bochs-doc 软件包还包含 Bochs 文档。
用户模式 Linux 不支持 Windows 访客系统,但它比 Bochs 快得多,并且具有将所有访客系统的内核作为非特权用户(即,不是像底层“主机”内核那样作为 root)运行的额外优势。有关更多信息,请参阅 Debian 的 user-mode-linux-doc 软件包。如果您在底层 Debian 主机上运行 Debian 访客,您可能需要从 Debian 的不稳定版本安装 user-mode-linux 软件包(在访客上)——稳定版本由于某种原因不可用。
此时我必须添加免责声明:我从未使用过 UML,我一直是 VMware 的长期用户(请参阅我在第 56 页对 VMware Desktop 5.5 的评论)。因此,我无法亲身告诉您如何使用 UML,甚至无法告诉您它在 Debian 中运行得如何。
Debian GNU/Linux 3.1 中的几个软件包增强了本地访问控制。trustees 软件包允许您通过将 trustee 对象与其关联,在单个文件/目录/设备对象上定义多组权限。例如,您可以授予 users 组的成员对文件 foo.txt 的只读访问权限,并授予 foomasters 组的成员对同一文件的写入权限。
SELinux 提供了更全面的控制集,SELinux 是美国国家安全局为 Linux 内核提供的类型强制和基于角色的访问控制系统。SELinux 使管理用户、组和系统资源成为可能,粒度非常高,甚至可以限制 root 自身的权限。
权衡是复杂性。创建和管理不损害所需功能的 SELinux 策略可能很复杂。幸运的是,除了标准的 selinux-utils 软件包外,Debian 还包括 checkpolicy,一个 SELinux 策略编译器,以及 setools,一组用于分析 SELinux 策略和管理用户的实用程序。
如果 SELinux 超出了您愿意处理的范围,Debian 提供了其他几种用于委派 root 权限的工具。当然,sudo 是此类中的经典工具,但还有 osh,操作员 Shell。
在 Debian 中得到很好体现的另一类有趣的工具是功能有限的安全 Shell (SSH) 工具。当然,SSH 是一种加密的、强身份验证的方式,用于运行远程 shell、执行远程命令,甚至用于隧道传输其他基于 TCP 的网络应用程序,包括 X Window 系统。但是,如果您只想向用户提供 SSH 功能的子集——例如,加密文件传输,而不给他们 shell 访问权限怎么办?
解决此问题的两个 Debian 软件包是 rssh,它允许用户通过 SSH 使用 scp、rdist、rsync、cvs 或 sftp,而无需实际的 shell 访问权限,以及 scponly,它允许 scp,但不允许远程 shell。
我在此处重点介绍的最后一类安全工具是文件系统加密。这些工具与更通用的加密工具(如 gnupg 和 bcrypt,用于加密单个文件)不同。文件系统加密工具允许您加密整个卷(目录结构),例如,在 USB 驱动器和其他可移动介质上。
提供文件系统加密的三个 Debian 软件包是 cryptsetup,它通过 Linux 2.6 内核的 dm-crypt 功能管理环回设备加密;encfs,它不需要使用环回设备;以及 lufs-cryptofs,Linux 用户空间文件系统 (lufs) 的加密模块。在这三者中,cryptsetup 提供了最佳性能,因为它在内核级别运行。用户空间文件系统 encfs 和 lufs 在比内核更高的抽象层上工作——也就是说,它们的效率较低。然而,它们对于网络文件系统也更有用。
如果我不至少简要地讨论一下我最喜欢的 Debian 特性之一,以及我在我的新 Web 服务器上运行它的主要原因——Debian 相对缓慢的发布计划,那我就失职了。一方面,Debian 3.1 的发布延迟(三年,或 3.0 之后的 21 个狗/计算机年)有点极端,Debian 团队已承诺更可预测的发布周期,可能从现在起一年。但稳定性增强安全性也是事实。
换句话说,如果您使用 Debian 来运行最新的桌面应用程序,或其他依赖于最新硬件驱动程序的东西,您可能会对 Debian 变体 Ubuntu 更满意,Ubuntu 具有可预测且较短(六个月)的发布周期。但是,如果您想构建一个在角落里稳定运行的设备系统,除了定期安全补丁之外几乎不需要持续维护,那么 Debian 较长的发布周期绝对是奢侈的。在许多情况下,运行稍微过时但已完全安全修补的应用程序比每六个月(或更短时间)升级整个操作系统更可取。但我承认,我是世界上最懒惰的系统管理员之一!
与 UNIX 本身一样,Debian 为注重安全的用户提供了最大的能力、灵活性和各种工具,但代价是复杂性。如果您厌恶手册页或 Google,Debian GNU/Linux 3.1 可能不适合您。但它确实非常灵活。本文仅触及了 Debian 作为安全服务器操作或安全扫描和审计平台的潜力。
下个月,我将以 Red Hat Enterprise Linux 结束我的“安全特性”三部曲。在那之前,请保重!
本文资源: /article/8885。
Mick Bauer (darth.elmo@wiremonkeys.org) 是美国最大的银行之一的网络安全架构师。他是 O'Reilly 图书 Linux 服务器安全 第二版(以前称为 使用 Linux 构建安全服务器)的作者,偶尔在信息安全会议上发表演讲,也是“网络工程波尔卡舞”的作曲家。