[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ 下一页 ]


Debian 安全手册
第 3 章 - 安装之前和安装期间


3.1 选择 BIOS 密码

在您的计算机上安装任何操作系统之前,请设置 BIOS 密码。安装完成后(一旦您启用了从硬盘启动),您应该返回 BIOS 并更改启动顺序,以禁用从软盘、CD-ROM 和其他不应启动的设备启动。否则,破解者只需要物理访问权限和一个启动盘即可访问您的整个系统。

禁用启动,除非提供密码,这样会更好。如果您运行服务器,这可能非常有效,因为它不会经常重启。这种策略的缺点是重启需要人工干预,如果机器不易访问,可能会导致问题。

注意:许多 BIOS 都有著名的默认主密码,并且也存在应用程序可以从 BIOS 中检索密码。推论:不要依赖此措施来保护对系统的控制台访问。


3.2 系统分区


3.2.1 选择智能的分区方案

智能的分区方案取决于机器的用途。一个好的经验法则是对分区要相当宽松,并注意以下因素

在邮件服务器的情况下,为邮件假脱机目录设置单独的分区非常重要。远程用户(无论是知情还是不知情)都可以填满邮件假脱机目录(/var/mail 和/或 /var/spool/mail)。如果假脱机目录位于单独的分区上,这种情况不会导致系统无法使用。否则(如果假脱机目录与 /var 位于同一分区上),系统可能会出现严重问题:日志条目将无法创建,软件包无法安装,并且某些程序甚至可能无法启动(如果它们使用 /var/run)。

此外,对于您不能确定所需空间的partitions,安装逻辑卷管理器(Logical Volume Manager)(lvm-common 以及内核所需的二进制文件,可能是 lvm10lvm6lvm5)。使用 lvm,您可以创建跨越多个物理卷的卷组。


3.2.1.1 选择适当的文件系统

在系统分区期间,您还必须决定要使用的文件系统。Debian 安装程序中为 Linux 分区选择的默认文件系统[3] 是 ext3,一种日志文件系统。建议您始终使用日志文件系统,例如 ext3reiserfsjfsxfs,以最大程度地减少系统崩溃在以下情况下导致的问题

撇开关于日志文件系统的性能问题(因为这有时会演变成一场宗教战争),通常最好使用 ext3 文件系统。这样做的原因是它向后兼容 ext2,因此如果日志记录有任何问题,您可以禁用它,仍然可以拥有一个工作的文件系统。此外,如果您需要使用启动盘(或 CD-ROM)恢复系统,您不需要自定义内核。如果内核是 2.4 或 2.6,ext3 支持已经可用,如果是 2.2 内核,即使您失去了日志记录功能,您仍然可以启动文件系统。如果您正在使用其他日志文件系统,您会发现您可能无法恢复,除非您有一个带有所需模块内置的 2.4 或 2.6 内核。如果您被困在救援磁盘上的 2.2 内核上,那么让它访问 reiserfsxfs 可能会更加困难。

在任何情况下,数据完整性在 ext3 下可能会更好,因为它进行文件数据日志记录,而其他文件系统仅进行元数据日志记录,请参阅 http://lwn.net/2001/0802/a/ext3-modes.php3

但是请注意,有些分区可能不会从使用日志文件系统中受益。例如,如果您正在为 /tmp/ 使用单独的分区,您最好使用标准的 ext2 文件系统,因为它会在系统启动时被清理。


3.3 在准备就绪之前不要连接到互联网

在安装期间,系统不应立即连接到互联网。这听起来可能很愚蠢,但网络安装是一种常见的方法。由于系统将立即安装和激活服务,如果系统连接到互联网并且服务未正确配置,您就将其暴露于攻击之下。

另请注意,某些服务可能存在安全漏洞,这些漏洞在您用于安装的软件包中尚未修复。如果您是从旧介质(如 CD-ROM)安装,通常是这种情况。在这种情况下,系统甚至可能在您完成安装之前就被攻陷!

由于 Debian 安装和升级可以通过互联网完成,您可能会认为在安装时使用此功能是个好主意。如果系统将直接连接到互联网(并且不受防火墙或 NAT 保护),最好在不连接到互联网的情况下进行安装,使用本地软件包镜像作为 Debian 软件包源和安全更新的来源。您可以使用另一台连接到互联网的系统,使用 Debian 特定的工具(如果是 Debian 系统),如 apt-moveapt-proxy,或其他常见的镜像工具来设置软件包镜像,以便为已安装的系统提供存档。如果您无法做到这一点,您可以设置防火墙规则以限制在进行更新时对系统的访问(请参阅 防火墙保护的安全更新,附录 F)。


3.4 设置 root 密码

设置一个好的 root 密码是拥有安全系统的最基本要求。请参阅 passwd(1) 以获取有关如何创建好的密码的一些提示。您也可以使用自动密码生成程序为您执行此操作(请参阅 生成用户密码,第 4.10.13 节)。

互联网上可以找到大量关于选择好的密码的信息;其中两个提供了合理的摘要和理由的是 Eric Wolfram 的 How to: Pick a Safe Password 和 Walter Belgers 的 Unix Password Security


3.5 激活影子密码和 MD5 密码

在安装结束时,系统会询问您是否应启用影子密码。对此问题回答“是”,以便密码将保存在文件 /etc/shadow 中。只有 root 用户和 shadow 组对该文件具有读取权限,因此没有用户能够抓取此文件的副本以便针对它运行密码破解程序。您可以随时使用 shadowconfig 在影子密码和普通密码之间切换。

请阅读 影子密码 (/usr/share/doc/HOWTO/en-txt/Shadow-Password.txt.gz) 以了解有关影子密码的更多信息。

此外,安装默认使用 MD5 哈希密码。这通常是一个非常好的主意,因为它允许更长的密码和更好的加密。MD5 允许密码长度超过 8 个字符。如果明智地使用,这可以使攻击者更难以暴力破解系统的密码。关于 MD5 密码,这是安装最新 passwd 软件包时的默认选项。您可以通过 /etc/shadow 文件中以 $1$ 为前缀来识别 MD5 密码。

事实上,这会修改 /etc/pam.d 下的所有文件,方法是替换密码行并在其中包含 md5

       password required pam_unix.so md5 nullok obscure min=6 max=16

如果 max 未设置为超过 8,则此更改将毫无用处。有关此方面的更多信息,请阅读 用户身份验证:PAM,第 4.10.1 节

注意:Debian 中的默认配置,即使在激活 MD5 密码时,也不会修改先前设置的 max 值。


3.6 运行所需的最少服务

服务是诸如 ftp 服务器和 web 服务器之类的程序。由于它们必须监听请求该服务的传入连接,因此外部计算机可以连接到您的计算机。服务有时是脆弱的(即在给定的攻击下可能被攻陷),因此存在安全风险。

您不应安装您的机器上不需要的服务。每个已安装的服务都可能在您的计算机上引入新的、可能不明显(或未知)的安全漏洞。

您可能已经知道,当您安装给定的服务时,默认行为是激活它。在默认的 Debian 安装中,没有安装任何服务,运行服务的数量非常少,面向网络的服务的数量甚至更少。在默认的 Debian 3.1 标准安装中,您最终会得到 OpenSSH、Exim(取决于您的配置方式)和 RPC 端口映射器作为网络服务[4]。如果您没有进行标准安装,而是选择了专家安装,您可能最终不会获得任何活动的网络服务。默认情况下安装 RPC 端口映射器是因为许多服务(例如 NFS)需要在给定系统上运行它。但是,它可以很容易地删除,有关如何保护或禁用 RPC 服务的更多信息,请参阅 保护 RPC 服务,第 5.13 节

当您在 Debian GNU/Linux 系统中安装新的网络相关服务(守护程序)时,可以通过两种方式启用它:通过 inetd 超级守护程序(即,将向 /etc/inetd.conf 添加一行)或通过将其自身绑定到您的网络接口的独立程序。独立程序通过 /etc/init.d 文件控制,这些文件在启动时通过 SysV 机制(或替代机制)使用 /etc/rc?.d/* 中的符号链接调用(有关如何完成此操作的更多信息,请阅读 /usr/share/doc/sysvinit/README.runlevels.gz)。

如果您想保留某些服务但很少使用它们,请使用 update-* 命令,例如 update-inetdupdate-rc.d 将它们从启动过程中删除。有关如何禁用网络服务的更多信息,请阅读 禁用守护程序服务,第 3.6.1 节。如果您想更改在安装其关联软件包时启动服务的默认行为[5],请使用 policy-rc.d,请阅读 /usr/share/doc/sysv-rc/README.policy-rc.d.gz 以获取更多信息。

invoke-rc.d 支持在 Debian 中是强制性的,这意味着对于 Debian 4.0 etch 及更高版本,您可以编写一个 policy-rc.d 文件,该文件禁止在您配置新守护程序之前启动它们。尽管尚未打包此类脚本,但它们编写起来非常简单。请参阅 policyrcd-script-zg2


3.6.1 禁用守护程序服务

禁用守护程序服务非常简单。您可以删除提供该服务程序的软件包,或者删除或重命名 /etc/rc${runlevel}.d/ 下的启动链接。如果您重命名它们,请确保它们不以“S”开头,以便它们不会被 /etc/init.d/rc 启动。不要删除所有可用的链接,否则软件包管理系统会在软件包升级时重新生成它们,请确保您至少保留一个链接(通常是“K”,即 kill,链接)。有关更多信息,请阅读 Debian 参考手册(第 2 章 - Debian 基础知识)的 自定义运行级别 部分。

您可以手动或使用 update-rc.d 删除这些链接(请参阅 update-rc.d(8))。例如,您可以通过执行以下操作来禁用服务在多用户运行级别中执行

       # update-rc.d name stop XX 2 3 4 5 .

其中 XX 是一个数字,它确定何时执行该服务的停止操作。请注意,如果您没有使用 file-rcupdate-rc.d -f service remove 将无法正常工作,因为所有链接都将被删除,在软件包重新安装或升级时,这些链接将被重新生成(可能不是您想要的)。如果您认为这不够直观,您可能是对的(请参阅 Bug 67095)。来自手册页

       If any files /etc/rcrunlevel.d/[SK]??name already exist then
       update-rc.d does nothing.  This is so that the system administrator 
       can rearrange the  links,  provided that  they  leave  at  least one
       link remaining, without having their configuration overwritten.

如果您正在使用 file-rc,则有关服务启动的所有信息都由一个公共配置文件处理,即使软件包从系统中删除,也会保留该信息。

您可以使用 sysv-rc-conf 提供的 TUI(文本用户界面)轻松地完成所有这些更改(sysv-rc-conf 适用于 file-rc 和正常的 System V 运行级别)。您还可以找到用于桌面系统的类似 GUI。您也可以使用 sysv-rc-conf 的命令行界面

       # sysv-rc-conf foobar off

使用此实用程序的优点是,如果您使用以下命令重新启用服务,rc.d 链接将返回到“off”调用之前的状态

       # sysv-rc-conf foobar on

其他(不太推荐的)禁用服务的方法是

尽管如此,/etc/init.d 下的文件是配置文件,如果您对它们进行了本地更改,则不应因软件包升级而被覆盖。

与其他 (UNIX) 操作系统不同,Debian 中的服务无法通过修改 /etc/default/service_name 中的文件来禁用。

FIXME:添加更多关于使用 file-rc 处理守护程序的信息。


3.6.2 禁用 inetd 或其服务

您应该检查您现在是否真的需要 inetd 守护程序。Inetd 始终是弥补内核缺陷的一种方法,但这些缺陷已在现代 Linux 内核中得到解决。可能存在针对 inetd 的拒绝服务攻击(这会极大地增加机器的负载),并且许多人总是更喜欢使用独立的守护程序,而不是通过 inetd 调用服务。如果您仍然想运行某种 inetd 服务,那么至少切换到更可配置的 Inet 守护程序,如 xinetdrlinetdopenbsd-inetd

您应该停止系统上所有不需要的 Inetd 服务,如 echochargendiscarddaytimetimetalkntalk 和 r 服务(rshrloginrcp),这些服务被认为是高度不安全的(请改用 ssh)。

您可以通过直接编辑 /etc/inetd.conf 来禁用服务,但 Debian 提供了一个更好的替代方案:update-inetd(它注释服务,以便可以轻松地重新启用它们)。您可以通过执行以下命令来删除 telnet 守护程序,以更改配置文件并重新启动守护程序(在本例中,telnet 服务被禁用)

       /usr/sbin/update-inetd --disable telnet

如果您确实想要服务监听,但不希望它们监听您主机的所有 IP 地址,您可能想要使用 inetd 上的一个未记录的功能(将服务名称替换为 service@ip 语法)或使用替代的 inetd 守护程序,如 xinetd


3.7 安装所需的最少软件

Debian 自带大量软件,例如 Debian 3.0 woody 版本包含 6 或 7 张(取决于架构)软件 CD-ROM 和数千个软件包,而 Debian 3.1 sarge 版本附带大约 13 张软件 CD-ROM。有了如此多的软件,即使基本系统安装非常精简[6],您也可能会被冲昏头脑,安装比系统真正需要的更多的软件。

既然您已经知道系统的用途是什么(不是吗?),您应该只安装系统真正需要工作的软件。任何已安装的不必要的工具都可能被想要破坏系统的用户或已获得 shell 访问权限(或通过可利用的服务远程代码执行)的外部入侵者使用。

例如,开发实用程序(C 编译器)或解释型语言(如 perl - 但请参阅下文 -、pythontcl...)的存在可能会帮助攻击者进一步破坏系统

当然,具有本地 shell 访问权限的入侵者可以下载自己的一组工具并执行它们,甚至 shell 本身也可以用于制作复杂的程序。删除不必要的软件不会帮助阻止问题,但会使攻击者更难进行(并且有些人可能会在这种情况下放弃,寻找更容易的目标)。因此,如果您在生产系统中保留了可用于远程攻击系统的工具(请参阅 远程漏洞评估工具,第 8.1 节),您可以预期入侵者也会在可用时使用它们。

请注意,默认安装 Debian sarge(即未选择任何单独软件包的安装)将安装许多通常不需要的开发软件包。这是因为某些开发软件包具有标准优先级。如果您不打算进行任何开发,您可以安全地从系统中删除以下软件包,这也将有助于释放一些空间

     Package                    Size
     ------------------------+--------
     gdb                     2,766,822
     gcc-3.3                 1,570,284
     dpkg-dev                  166,800
     libc6-dev               2,531,564
     cpp-3.3                 1,391,346
     manpages-dev            1,081,408
     flex                      257,678
     g++                         1,384 (Note: virtual package)
     linux-kernel-headers    1,377,022
     bin86                      82,090
     cpp                        29,446
     gcc                         4,896 (Note: virtual package)
     g++-3.3                 1,778,880
     bison                     702,830
     make                      366,138
     libstdc++5-3.3-dev        774,982

这在 sarge 之后的版本中已修复,请参阅 Bug #301273Bug #301138。由于安装系统中的一个错误,在使用 Debian 3.0 woody 版本的安装系统进行安装时,这种情况不会发生。


3.7.1 删除 Perl

您必须考虑到在 Debian 系统中删除 perl 可能不太容易(实际上可能非常困难),因为它被许多系统实用程序使用。此外,perl-base优先级:必需(这说明了一切)。这仍然是可行的,但您将无法在系统中运行任何 perl 应用程序;您还必须欺骗软件包管理系统,使其认为 perl-base 已安装,即使它没有安装。[8]

哪些实用程序使用 perl?您可以自己查看

       $ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
       type=`file $i | grep -il perl`; [ -n "$type" ] && echo $i; }; done

这些包括优先级为必需重要的软件包中的以下实用程序

因此,如果没有 Perl,除非您用 shell 脚本重制这些实用程序,否则您可能无法管理任何软件包(因此您将无法升级系统,这不是一件好事)。

如果您决心从 Debian 基本系统中删除 Perl,并且您有空闲时间,请向之前的软件包提交错误报告,包括(作为补丁)用 shell 脚本编写的上述实用程序的替换。

如果您想查看哪些 Debian 软件包依赖于 Perl,您可以使用

     $ grep-available -s Package,Priority -F Depends perl

     $ apt-cache rdepends perl

3.8 阅读 Debian 安全邮件列表

关注 debian-security-announce 邮件列表永远不会错,Debian 安全团队会在该列表中发布已发布软件包的公告和修复程序,或者关注 mailto:debian-security@lists.debian.org,您可以在其中参与有关 Debian 安全相关事宜的讨论。

为了接收重要的安全更新警报,请发送电子邮件至 debian-security-announce-request@lists.debian.org,主题行中包含单词“subscribe”。您也可以通过 http://www.debian.org/MailingLists/subscribe 上的网页订阅此经过审核的邮件列表。

此邮件列表的邮件量非常少,通过订阅它,您将立即收到 Debian 发行版的安全更新警报。这使您可以快速下载包含安全错误修复的新软件包,这对于维护安全系统非常重要(有关如何执行此操作的详细信息,请参阅 执行安全更新,第 4.2 节)。


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ 下一页 ]


Debian 安全手册

版本:3.13,星期日,2012 年 4 月 8 日 02:48:09 +0000

Javier Fernández-Sanguino Peña jfs@debian.org
作者,第 1.1 节