本文档涵盖了一些影响 Linux 安全的主要问题。 讨论了通用哲学和网络资源。
许多其他的 HOWTO 文档与安全问题重叠,并在适当的地方指出了这些文档。
本文档不是一篇最新的漏洞利用文档。 大量新的漏洞利用程序一直在发生。 本文档将告诉您在哪里查找此类最新信息,并将提供一些通用方法来防止此类漏洞利用程序的发生。
所有意见、错误报告、补充信息和各种批评都应发送至
和
注意:请将您的反馈发送给两位作者。 此外,请务必在您的主题中包含“Linux”、“security”或“HOWTO”,以避免 Kevin 的垃圾邮件过滤器。
不对本文档的内容承担任何责任。 使用这些概念、示例和其他内容,风险自负。 此外,这是一个早期版本,可能存在许多不准确之处或错误。
许多示例和描述都使用 RedHat(tm) 包布局和系统设置。 您的结果可能会有所不同。
据我们所知,仅描述了在某些条件下可能用于或评估用于个人目的的程序。 大多数程序将以完整的源代码提供,并遵守 GNU 条款。
本文档版权归 (c)1998-2000 Kevin Fenzi 和 Dave Wreski 所有,并根据以下条款分发:
Linux HOWTO 文档可以全部或部分地以任何媒介(物理或电子)复制和分发,只要所有副本上都保留此版权声明。 允许并鼓励商业重新分发;但是,作者希望收到有关任何此类分发的通知。
所有翻译、衍生作品或包含任何 Linux HOWTO 文档的聚合作品都必须受此版权声明的约束。 也就是说,您不得从 HOWTO 制作衍生作品并对其分发施加其他限制。 在某些情况下可以授予对这些规则的例外; 请通过以下地址联系 Linux HOWTO 协调员。
如果您有任何疑问,请通过以下方式联系 Linux HOWTO 协调员 Tim Bynum:
本文档将尝试解释一些程序和常用软件,以帮助您的 Linux 系统更加安全。 在开始之前,务必先讨论一些基本概念并创建安全基础。
在不断变化的全球数据通信、廉价的 Internet 连接和快速的软件开发世界中,安全性正变得越来越重要。 安全性现在是一项基本要求,因为全球计算本质上是不安全的。 例如,当您的数据从 Internet 上的 A 点到 B 点时,它可能会经过其他几个点,从而使其他用户有机会拦截甚至更改它。 甚至您系统上的其他用户也可能会恶意地将您的数据转换为您不希望的内容。 入侵者(也称为“破解者”)可能会未经授权访问您的系统,然后使用高级知识来冒充您、窃取您的信息,甚至拒绝您访问自己的资源。 如果您想知道“黑客”和“破解者”之间的区别,请参阅 Eric Raymond 的文档“如何成为一名黑客”,该文档可在 http://www.catb.org/~esr/faqs/hacker-howto.html 上找到。
首先,请记住,没有计算机系统可以完全安全。 您所能做的就是使其他人越来越难以破坏您的系统。 对于普通的家庭 Linux 用户来说,不需要太多东西就可以阻止随意的破解者。 但是,对于备受瞩目的 Linux 用户(银行、电信公司等),则需要做更多的工作。
另一个需要考虑的因素是,您的系统越安全,您的安全性就越具有侵入性。 您需要决定在此平衡中,您的系统在什么位置仍然可用,但对您的目的来说仍然是安全的。 例如,您可以要求拨入您的系统的每个人都使用回拨调制解调器在其家庭号码上回拨给他们。 这样更安全,但是如果有人不在家,则很难登录。 您还可以设置没有网络或 Internet 连接的 Linux 系统,但这会限制其用途。
如果您是中型到大型站点,则应制定一项安全策略,说明您的站点需要多少安全性以及存在哪些审核来检查它。 您可以在 http://www.faqs.org/rfcs/rfc2196.html 上找到一个著名的安全策略示例。 它最近已更新,并包含一个用于为您的公司建立安全策略的良好框架。
在尝试保护您的系统之前,您应确定必须防范的威胁级别、应承担或不应承担的风险,以及系统因此而受到的损害程度。 您应该分析您的系统,以了解您要保护什么、为什么要保护它、它的价值是什么以及谁对您的数据和其他资产负责。
风险是指入侵者可能成功尝试访问您的计算机的可能性。 入侵者可以读取或写入文件,还是可以执行可能造成损坏的程序? 他们可以删除关键数据吗? 他们可以阻止您或您的公司完成重要的工作吗? 不要忘记:有人获得对您的帐户或您的系统的访问权限,也可以冒充您。
此外,在您的系统上有一个不安全的帐户可能会导致您的整个网络受到破坏。 如果您允许单个用户使用.rhosts文件登录,或使用不安全的服务,例如tftp,您可能会面临入侵者“登堂入室”的风险。一旦入侵者在您的系统或他人的系统上拥有用户帐户,他们就可以利用它来访问另一个系统或另一个帐户。
威胁 通常来自那些有动机未经授权访问您的网络或计算机的人。您必须决定信任谁可以访问您的系统,以及他们可能构成什么威胁。
入侵者有几种类型,在保护您的系统时,记住他们不同的特点很有用。
好奇者 - 这种类型的入侵者主要对了解您拥有的系统和数据类型感兴趣。
恶意者 - 这种类型的入侵者要么想破坏您的系统,要么想破坏您的网页,或者以其他方式迫使您花费时间和金钱来从他造成的损害中恢复。
引人注目的入侵者 - 这种类型的入侵者试图使用您的系统来获得知名度和恶名。他可能会使用您的高调系统来宣传他的能力。
竞争者 - 这种类型的入侵者对您系统上的数据感兴趣。可能是有人认为您拥有可以给他带来经济或其他方面利益的东西。
借用者 - 这种类型的入侵者有兴趣在您的系统上建立店铺,并将其资源用于自己的目的。他们通常会运行聊天或irc服务器、色情档案站点,甚至DNS服务器。
跳板者 - 这种类型的入侵者只对您的系统感兴趣,以便利用它进入其他系统。如果您的系统连接良好或通往许多内部主机的网关,您很可能会看到这种类型试图入侵您的系统。
漏洞描述了您的计算机免受另一个网络攻击的保护程度,以及某人未经授权访问的潜力。
如果有人闯入您的系统,会造成什么损失?当然,动态PPP家庭用户的顾虑与公司将其机器连接到互联网或另一个大型网络的顾虑不同。
检索/重建丢失的任何数据需要多少时间?现在进行初始时间投资可以节省以后重建丢失数据所需时间的十倍。您是否检查过您的备份策略并验证过您的数据?
为您的系统创建一个简单、通用的策略,以便您的用户可以轻松理解和遵循。它应该保护您正在保护的数据以及用户的隐私。一些需要考虑添加的内容包括:谁有权访问该系统(我的朋友可以使用我的帐户吗?),谁可以安装系统上的软件,谁拥有什么数据,灾难恢复以及系统的合理使用。
一个普遍接受的安全策略以短语开头
“凡未经许可的,均禁止”
这意味着除非您授予用户对服务的访问权限,否则该用户不应使用该服务,直到您授予访问权限为止。确保策略在您的常规用户帐户上有效。说“啊,我解决不了这个权限问题,我就以root身份来做”可能会导致非常明显的安全漏洞,甚至是尚未被利用的安全漏洞。
rfc1244 是一份描述如何创建您自己的网络安全策略的文档。
rfc1281 是一份显示安全策略示例的文档,其中包含每个步骤的详细说明。
最后,您可能想查看 COAST 策略存档,网址为 ftp://coast.cs.purdue.edu/pub/doc/policy,以了解一些现实生活中的安全策略是什么样的。
本文档将讨论各种手段,您可以使用这些手段来保护您辛辛苦苦获得的资产:您的本地机器、您的数据、您的用户、您的网络,甚至您的声誉。如果入侵者删除了您的一些用户的数据,会发生什么?或者破坏您的网站?或者发布您公司下个季度的公司项目计划?如果您正在计划网络安装,那么在将单个机器添加到您的网络之前,您必须考虑许多因素。
即使您只有一个拨号 PPP 帐户,或者只是一个小站点,这并不意味着入侵者不会对您的系统感兴趣。大型、引人注目的站点不是唯一的目标 - 许多入侵者只是想尽可能多地利用站点,而不管它们的大小。此外,他们可能会利用您站点中的安全漏洞来访问您连接的其他站点。
入侵者有很多时间,并且可以通过尝试所有可能性来避免猜测您如何模糊您的系统。入侵者也可能出于多种原因对您的系统感兴趣,我们稍后将对此进行讨论。
管理员最关注的安全领域可能是基于主机的安全。这通常涉及确保您自己的系统是安全的,并希望您网络上的其他每个人都这样做。选择好的密码、保护主机上的本地网络服务、保持良好的会计记录以及使用已知的安全漏洞升级程序是本地安全管理员负责做的事情之一。虽然这绝对必要,但一旦您的网络大于几台机器,它就会变得令人望而却步。
本文档已分为多个部分。它们涵盖了几个广泛的安全问题。第一个,第 3 节,涵盖了您需要如何保护您的物理机器免受篡改。第二个,第 4 节,描述了如何保护您的系统免受本地用户的篡改。第三个,第 5 节,向您展示了如何在您的文件系统上设置文件及其权限。接下来,第 6 节,讨论了如何使用加密来更好地保护您的机器和网络。第 7 节讨论了您应该设置哪些内核选项或注意哪些内核选项才能获得更安全的系统。第 8 节,描述了如何更好地保护您的 Linux 系统免受网络攻击。第 9 节,讨论了如何在将机器上线之前准备好机器。第 10 节,讨论了当您检测到正在进行的系统入侵或检测到最近发生的入侵时该怎么办。在第 11 节中,列举了一些主要的安全资源。问答环节第 13 节,回答了一些常见问题,最后在第 14 节中得出一个结论
阅读本文档时要意识到的两个主要点是
注意您的系统。检查系统日志,例如/var/log/messages并密切关注您的系统,以及
通过确保您已安装最新版本的软件并根据安全警报进行升级,使您的系统保持最新状态。仅仅这样做将有助于使您的系统明显更安全。
您需要考虑的第一层安全是计算机系统的物理安全。谁可以直接物理访问您的机器?他们应该吗?您可以保护您的机器免受他们的篡改吗?你应该吗?
您的系统需要多少物理安全非常依赖于您的情况和/或预算。
如果您是家庭用户,您可能不需要太多(尽管您可能需要保护您的机器免受儿童或烦人的亲戚的篡改)。如果您在实验室中,您需要更多,但用户仍然需要在机器上完成工作。以下许多部分将有所帮助。如果您在办公室里,您可能需要也可能不需要在下班后或您离开时保护您的机器。在一些公司,让您的控制台不安全是一种终止犯罪。
明显的物理安全方法,例如门锁、电缆、上锁的橱柜和视频监控都是好主意,但超出了本文档的范围。 :)
许多现代 PC 机箱都包含“锁定”功能。通常,这将是机箱正面的一个插座,允许您将随附的钥匙转到锁定或解锁位置。机箱锁可以帮助防止有人偷走您的 PC,或者打开机箱并直接操纵/偷窃您的硬件。它们有时还可以防止有人从他们自己的软盘或其他硬件重新启动您的计算机。
这些机箱锁根据主板中的支持和机箱的构造而执行不同的操作。在许多 PC 上,它们使您必须打破机箱才能打开机箱。在其他一些 PC 上,它们不允许您插入新的键盘或鼠标。有关更多信息,请查看您的主板或机箱说明。即使这些锁通常质量很低并且很容易被锁匠攻击者击败,但这有时可能是一个非常有用的功能。
有些机器(最著名的是 SPARC 和 mac)在背面有一个加密狗,如果您将电缆穿过它,攻击者将不得不剪断电缆或打破机箱才能进入其中。只需通过这些插入挂锁或组合锁就可以很好地阻止某人偷走您的机器。
BIOS 是配置或操作基于 x86 的硬件的最低级别的软件。LILO 和其他 Linux 启动方法访问 BIOS 以确定如何启动您的 Linux 机器。Linux 运行的其他硬件具有类似的软件(Mac 和新 Sun 上的 Open Firmware、Sun boot PROM 等...)。您可以使用 BIOS 来防止攻击者重新启动您的机器并操纵您的 Linux 系统。
许多 PC BIOS 允许您设置启动密码。这并没有提供太多的安全性(如果有人可以进入机箱,可以重置或删除 BIOS),但可能是一个很好的威慑(即,这将需要时间并留下篡改的痕迹)。同样,在 S/Linux(用于 SPARC(tm) 处理器机器的 Linux)上,您的 EEPROM 可以设置为需要启动密码。这可能会减慢攻击者的速度。
信任 BIOS 密码来保护您的系统的另一个风险是默认密码问题。大多数 BIOS 制造商并不期望人们打开他们的计算机并在他们忘记密码时断开电池的连接,并且为其 BIOS 配备了默认密码,无论您选择的密码如何,这些密码都有效。一些更常见的密码包括
j262 AWARD_SW AWARD_PW lkwpeter Biostar AMI Award bios BIOS setup cmos AMI!SW1 AMI?SW1 password hewittrand shift + s y x z
我测试了一个 Award BIOS,密码 AWARD_PW 可以正常工作。 这些密码很容易从制造商的网站和 http://astalavista.box.sk 获得。 因此,BIOS 密码不能被认为是对于一个知识渊博的攻击者的充分保护措施。
许多 x86 BIOS 也允许你指定各种其他良好的安全设置。查看你的 BIOS 手册或者在下次启动时查看。例如,一些 BIOS 禁止从软盘驱动器启动,一些 BIOS 需要密码才能访问某些 BIOS 功能。
注意:如果你有一台服务器,并且设置了启动密码,你的机器将无法在无人值守的情况下启动。请记住,如果发生断电,你需要进入并提供密码。 ; (
各种 Linux 引导加载程序也可以设置启动密码。 例如,LILO 具有password和restricted设置;password表示在启动时需要密码,而restricted仅在你指定选项(例如single)时才需要在LILO提示符下输入启动密码。
>摘自 lilo.conf 手册页
password=password The per-image option `password=...' (see below) applies to all images. restricted The per-image option `restricted' (see below) applies to all images. password=password Protect the image by a password. restricted A password is only required to boot the image if parameters are specified on the command line (e.g. single). |
设置所有这些密码时,请记住你需要记住它们。:) 还要记住,这些密码只会减慢有决心的攻击者的速度。它们不会阻止某人从软盘启动并挂载你的根分区。如果你结合使用引导加载程序进行安全保护,你最好在计算机的 BIOS 中禁用从软盘启动,并为 BIOS 设置密码保护。
还要记住,/etc/lilo.conf 需要设置为 “600” 模式(仅 root 用户可读写),否则其他人将能够读取你的密码!
>摘自 GRUB 信息页面:GRUB 提供了 “password” 功能,因此只有管理员才能启动交互式操作(即,编辑菜单项并进入命令行界面)。要使用此功能,你需要在你的配置文件中使用 `password' 命令(*note password::),如下所示
password --md5 PASSWORD
如果指定了此选项,GRUB 将禁止任何交互式控制,直到你按下 <p> 键并输入正确的密码。`--md5' 选项告诉 GRUB,`PASSWORD' 是 MD5 格式。如果省略此选项,GRUB 假定 `PASSWORD' 是明文。
你可以使用 `md5crypt' 命令加密你的密码(*note md5crypt::)。例如,运行 grub shell (*note Invoking the grub shell::),并输入你的密码
grub> md5crypt Password: ********** Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.
然后,剪切并将加密的密码粘贴到你的配置文件中。
Grub 还有一个“lock”命令,允许你在未提供正确密码的情况下锁定分区。只需添加“lock”,该分区将无法访问,直到用户提供密码。
如果有人有来自不同引导加载程序的安全相关信息,我们很乐意听到。(grub, silo, milo, linload等)。
注意:如果你有一台服务器,并且设置了启动密码,你的机器将无法在无人值守的情况下启动。请记住,如果发生断电,你需要进入并提供密码。; (
如果你经常离开你的机器,能够“锁定”你的控制台,这样没有人可以篡改或查看你的工作,这很好。 两个可以做到这一点的程序是xlock和vlock.
xlock是一个 X 显示锁定器。它应该包含在任何支持 X 的 Linux 发行版中。查看它的手册页以获取更多选项,但通常你可以从你的控制台上的任何 xterm 运行xlock它将锁定显示并需要你的密码才能解锁。
vlock是一个简单的小程序,允许你锁定 Linux 机器上的一些或所有虚拟控制台。 你可以只锁定你正在使用的那个,也可以锁定所有虚拟控制台。 如果你只锁定一个,其他人可以进入并使用控制台; 他们只是无法使用你的虚拟控制台,直到你解锁它。vlock随 RedHat Linux 一起发布,但你的情况可能有所不同。
当然,锁定你的控制台可以防止某人篡改你的工作,但不能阻止他们重新启动你的机器或以其他方式中断你的工作。 它也不能阻止他们从网络上的另一台机器访问你的机器并导致问题。
更重要的是,它不能阻止某人完全切换出 X Window System,并转到正常的虚拟控制台登录提示,或者转到启动 X11 的 VC,并暂停它,从而获得你的权限。 因此,你可能考虑仅在 xdm 控制下使用它。
如果你的系统连接了网络摄像头或麦克风,你应该考虑攻击者是否有可能访问这些设备。 不使用时,拔下或移除此类设备可能是一种选择。 否则,你应该仔细阅读和查看任何提供对此类设备访问的软件。
首先要注意的是你的机器何时重新启动。 由于 Linux 是一个强大而稳定的操作系统,因此你的机器应该重新启动的唯一时间是你关闭它以进行操作系统升级、硬件更换等操作时。 如果你的机器在没有你操作的情况下重新启动,这可能表明入侵者已经入侵了它。 你的机器可能被入侵的许多方式需要入侵者重新启动或关闭你的机器。
检查机箱和计算机区域是否有被篡改的迹象。 尽管许多入侵者会清除日志中存在的痕迹,但最好检查所有日志并注意任何差异。
将日志数据存储在安全位置(例如,在受到良好保护的网络中的专用日志服务器)也是一个好主意。 一旦机器被入侵,日志数据就变得毫无用处,因为它很可能也被入侵者修改了。
syslog 守护进程可以配置为自动将日志数据发送到中央 syslog 服务器,但这通常以未加密的方式发送,允许入侵者查看正在传输的数据。 这可能会泄露有关你的网络的并非旨在公开的信息。 有一些 syslog 守护进程可以加密正在发送的数据。
还要注意,伪造 syslog 消息很容易——已经发布了一个利用程序。 Syslog 甚至接受声称来自本地主机的网络日志条目,而不指示它们的真实来源。
在你的日志中要检查的一些事项
日志过短或不完整。
包含奇怪时间戳的日志。
具有不正确权限或所有权的日志。
重新启动或重新启动服务的记录。
缺少日志。
su来自陌生地方的条目或登录。
我们将在 HOWTO 的 第 9.5 节中讨论系统日志数据。
接下来要看的是你的系统针对来自本地用户的攻击的安全性。 我们刚才说了本地用户? 是的!
访问本地用户帐户是系统入侵者在利用 root 帐户的过程中尝试的第一件事之一。 通过松懈的本地安全,他们可以使用各种错误和设置不佳的本地服务,将他们的普通用户访问权限“升级”为 root 访问权限。 如果你确保你的本地安全严密,那么入侵者将需要克服另一个障碍。
本地用户也可以对你的系统造成很大的破坏,即使(特别是)当他们真的是他们所说的那样时。 向你不认识或没有联系信息的人提供帐户是一个非常糟糕的主意。
你应该确保你提供的用户帐户仅具有他们需要完成任务的最低要求。 如果你为你的儿子(10 岁)提供一个帐户,你可能希望他只能访问文字处理器或绘图程序,但无法删除不属于他的数据。
当允许其他人合法访问你的 Linux 机器时,有几个好的经验法则
给予他们所需的最低权限。
注意他们从何处/何时登录,或者应该从何处登录。
确保删除不活动的帐户,你可以通过使用 'last' 命令和/或检查日志文件中用户任何活动来确定。
建议在所有计算机和网络上使用相同的用户 ID,以简化帐户维护,并允许更轻松地分析日志数据。
应绝对禁止创建组用户 ID。 用户帐户还提供责任制,而组帐户无法做到这一点。
许多在安全漏洞中使用的本地用户帐户已经几个月或几年未使用了。 由于没有人使用它们,因此它们提供了理想的攻击工具。
你的机器上最受追捧的帐户是 root(超级用户)帐户。 此帐户拥有对整个机器的控制权,其中可能还包括对网络上其他机器的控制权。 请记住,你应该只将 root 帐户用于非常短期的特定任务,并且大部分时间应该以普通用户身份运行。 即使以 root 用户身份登录时犯下的微小错误也可能导致问题。 你拥有 root 权限的时间越少,你就会越安全。
避免以 root 身份搞砸你自己的机器的几个技巧
在执行一些复杂的命令时,首先尝试以非破坏性的方式运行它……尤其是使用 globing 的命令:例如,如果你想做rm foo*.bak,首先做ls foo*.bak并确保你要删除你认为的文件。 使用echo代替破坏性命令有时也有效。
为你的用户提供一个默认别名rm命令,以要求确认删除文件。
只成为 root 来执行单个特定任务。 如果你发现自己正在试图弄清楚如何做某事,请回到普通的 shell 用户,直到你确定 root 需要做什么。
root 用户的命令路径非常重要。 命令路径(即PATH环境变量)指定 shell 搜索程序的目录。 尽量限制 root 用户的命令路径,并且永远不要在你的 PATH 中包含.(这意味着“当前目录”)。 此外,永远不要在你的搜索路径中包含可写目录,因为这可能允许攻击者修改或放置新的二进制文件在你的搜索路径中,从而允许他们在你下次运行该命令时以 root 身份运行它们。
永远不要以 root 身份使用 rlogin/rsh/rexec 工具套件(称为 r-utilities)。 它们容易受到多种攻击,并且以 root 身份运行时非常危险。 永远不要创建一个.rhosts.rhosts
文件给 root。/etc/securetty该文件包含允许 root 用户登录的终端列表。默认情况下(在 Red Hat Linux 上),这仅设置为本地虚拟控制台 (vty)。添加任何其他内容到此文件时要非常小心。您应该能够以您的普通用户帐户远程登录,然后su如果需要(最好是通过 第 6.4 节 或其他加密通道),则无需直接以 root 用户身份登录。
始终缓慢而谨慎地以 root 用户身份运行。您的操作可能会影响很多事情。三思而后行!
如果您绝对确定需要允许某人(希望是非常信任的人)拥有您机器的 root 访问权限,则有一些工具可以提供帮助。sudo允许用户使用他们的密码以 root 身份访问一组有限的命令。 例如,这允许用户能够在您的 Linux 机器上弹出和挂载可移动媒体,但没有其他 root 权限。sudo还会记录所有成功和不成功的 sudo 尝试,让您可以追踪谁使用了什么命令做了什么。因此sudo即使在许多人拥有 root 访问权限的地方也能很好地工作,因为它有助于您跟踪所做的更改。
虽然sudo可以用来为特定任务为特定用户赋予特定权限,但它确实有一些缺点。 它应该只用于一组有限的任务,例如重新启动服务器或添加新用户。 任何提供 shell 转义的程序都会通过sudo为用户提供 root 访问权限。例如,这包括大多数编辑器。 此外,像/bin/cat这样的程序也可以用于覆盖文件,这可能允许利用 root。 考虑sudo作为问责制的一种手段,不要期望它能取代 root 用户并且仍然安全。
在将您的系统上线之前,花几分钟时间进行准备和计划可以帮助保护它们和存储在其中的数据。
用户的家目录永远不应该允许从那里运行 SUID/SGID 程序。使用nosuid选项在/etc/fstab中设置除了 root 之外的其他用户可写的分区。您可能还希望使用nodev和noexec在用户的家分区以及/var上,从而禁止程序的执行以及字符或块设备的创建,这些无论如何都不应该需要。
如果您正在使用 NFS 导出文件系统,请务必使用尽可能严格的访问权限来配置/etc/exports。 这意味着不使用通配符,不允许 root 用户写入访问权限,并在可能的情况下导出为只读。
配置您的用户的文件创建umask以尽可能严格的方式进行。请参阅第 5.1 节。
如果您正在使用网络文件系统(例如 NFS)挂载文件系统,请务必使用适当的限制配置 /etc/exports。 通常,使用“nodev”、“nosuid”,可能还有“noexec”是可取的。
设置文件系统限制,而不是允许unlimited,这是默认设置。 您可以使用 resource-limits PAM 模块和/etc/pam.d/limits.conf来控制每个用户的限制。 例如,组users的限制可能如下所示
@users hard core 0 @users hard nproc 50 @users hard rss 5000 |
这表示禁止创建 core 文件,将进程数限制为 50,并将每个用户的内存使用量限制为 5M。
您还可以使用 /etc/login.defs 配置文件来设置相同的限制。
文件给 root。/var/log/wtmp和/var/run/utmp文件包含您系统上所有用户的登录记录。 必须保持它们的完整性,因为它们可用于确定用户(或潜在的入侵者)何时以及从何处进入您的系统。 这些文件也应该具有适当的644权限,而不会影响正常的系统运行。
可以使用 immutable 位来防止意外删除或覆盖必须受到保护的文件。 它还可以防止某人创建指向该文件的硬链接。 有关 immutable 位的信息,请参阅chattr(1) 手册页。
系统上的 SUID 和 SGID 文件存在潜在的安全风险,应密切监控。 因为这些程序授予执行它们的用户特殊权限,所以有必要确保未安装不安全的程序。 攻击者最喜欢的伎俩是利用 SUID-root 程序,然后留下一个 SUID 程序作为后门,以便下次进入,即使原始漏洞已被堵住。
查找系统上的所有 SUID/SGID 程序,并跟踪它们是什么,以便您了解可能表明潜在入侵者的任何更改。 使用以下命令查找系统上的所有 SUID/SGID 程序
root# find / -type f \( -perm -04000 -o -perm -02000 \) |
Debian 发行版每天晚上运行一个作业来确定存在哪些 SUID 文件。 然后将其与前一天晚上的运行进行比较。 您可以在/var/log/setuid*中查找此日志。
您可以使用chmod删除可疑程序上的 SUID 或 SGID 权限,如果您绝对认为有必要,可以将其恢复回去。
全局可写文件,尤其是系统文件,如果攻击者获得对您的系统的访问权限并对其进行修改,则可能存在安全漏洞。 此外,全局可写目录是危险的,因为它们允许攻击者根据自己的意愿添加或删除文件。 要查找系统上的所有全局可写文件,请使用以下命令
root# find / -perm -2 ! -type l -ls |
未拥有的文件也可能表明入侵者已访问您的系统。 您可以使用以下命令在您的系统上找到没有所有者或不属于任何组的文件
root# find / \( -nouser -o -nogroup \) -print |
查找.rhosts文件应该是您日常系统管理职责的一部分,因为这些文件不应在您的系统上被允许。 请记住,攻击者只需要一个不安全的帐户就可以潜在地访问您的整个网络。 您可以使用以下命令在您的系统上找到所有.rhosts文件
root# find /home -name .rhosts -print |
最后,在更改任何系统文件的权限之前,请确保您了解自己在做什么。 永远不要更改文件的权限,因为它似乎是使事情正常运行的简单方法。 在更改文件之前,始终确定该文件为何具有该权限。
文件给 root。umask命令可用于确定系统上的默认文件创建模式。 它是所需文件模式的八进制补码。 如果创建文件时不考虑其权限设置,则用户可能会无意中授予不应具有此权限的某人读取或写入权限。 典型的umask设置包括022, 027和077(这是最严格的)。 通常,umask 设置在/etc/profile中,因此它适用于系统上的所有用户。 生成的权限计算如下:用户/组/其他人的默认权限(目录为 7,文件为 6)与反转掩码 (NOT) 结合使用,并在逐位基础上使用 AND。
示例 1
文件,默认值为 6,二进制:110 掩码,例如 2:010,NOT:101
生成的权限,AND:100(等于 4,r__)
示例 2
文件,默认值为 6,二进制:110 掩码,例如 6:110,NOT:001
生成的权限,AND:000(等于 0,___)
示例 3
目录,默认值为 7,二进制:111 掩码,例如 2:010,NOT:101
生成的权限,AND:101(等于 5,r_x)
示例 4
目录,默认值为 7,二进制:111 掩码,例如 6:110,NOT:001
生成的权限,AND:001(等于 1,__x)
# Set the user's default umask umask 033 |
如果您使用的是 Red Hat,并坚持其用户和组 ID 创建方案(用户私有组),则只需使用002就可以创建一个umask。 这是由于默认配置是每个组一个用户的事实。
重要的是要确保您的系统文件不会对不应该进行此类系统维护的用户和组开放以进行随意编辑。
Unix 根据三个特征分隔对文件和目录的访问控制:所有者、组和其他人。 始终只有一个所有者,组的成员数量不限,以及其他人。
Unix 权限的简要说明
所有权 - 哪些用户和组保留对节点和节点的父级的权限设置的控制权
权限 - 能够设置或重置的位,以允许对它进行某些类型的访问。 目录的权限可能与文件上相同的一组权限具有不同的含义。
读取
能够查看文件的内容
能够读取目录
写入
能够添加到文件或更改文件
能够删除或移动目录中的文件
执行
能够运行二进制程序或 shell 脚本
能够搜索目录,与读取权限结合使用
当应用于目录时,“粘滞位”也具有与应用于文件时不同的含义。 如果在目录上设置了粘滞位,则用户只能删除他拥有的文件或他被授予了显式写入权限的文件,即使他具有对该目录的写入访问权限也是如此。 这是为像/tmp这样的目录设计的,这些目录是全局可写的,但不希望允许任何用户随意删除文件。 粘滞位在长目录列表中显示为t。
这描述了文件上的 set-user-id 权限。 当在所有者权限中设置了设置用户 ID 访问模式,并且文件是可执行文件时,运行它的进程将根据拥有该文件的用户(而不是创建该进程的用户)获得对系统资源的访问权限。 这是许多“缓冲区溢出”漏洞的原因。
如果在组权限中设置,则此位控制文件的“设置组 ID”状态。 它的行为与 SUID 相同,只是组受到影响。 该文件必须是可执行文件才能产生任何影响。
如果您在目录上设置了 SGID 位(使用chmod g+s directory),则在该目录中创建的文件将将其组设置为目录的组。
您 - 文件的所有者
组 - 您所属的组
所有人 - 系统上不是所有者或组成员的任何人
文件示例
-rw-r--r-- 1 kevin users 114 Aug 28 1997 .zlogin 1st bit - directory? (no) 2nd bit - read by owner? (yes, by kevin) 3rd bit - write by owner? (yes, by kevin) 4th bit - execute by owner? (no) 5th bit - read by group? (yes, by users) 6th bit - write by group? (no) 7th bit - execute by group? (no) 8th bit - read by everyone? (yes, by everyone) 9th bit - write by everyone? (no) 10th bit - execute by everyone? (no) |
以下几行是一些执行所述访问所需的最小权限集的示例。您可能希望授予比此处列出的更多的权限,但这应该描述这些文件上的最小权限的作用。
-r-------- Allow read access to the file by owner --w------- Allows the owner to modify or delete the file (Note that anyone with write permission to the directory the file is in can overwrite it and thus delete it) ---x------ The owner can execute this program, but not shell scripts, which still need read permission ---s------ Will execute with effective User ID = to owner --------s- Will execute with effective Group ID = to group -rw------T No update of "last modified time". Usually used for swap files ---t------ No effect. (formerly sticky bit) |
drwxr-xr-x 3 kevin users 512 Sep 19 13:47 .public_html/ 1st bit - directory? (yes, it contains many files) 2nd bit - read by owner? (yes, by kevin) 3rd bit - write by owner? (yes, by kevin) 4th bit - execute by owner? (yes, by kevin) 5th bit - read by group? (yes, by users 6th bit - write by group? (no) 7th bit - execute by group? (yes, by users) 8th bit - read by everyone? (yes, by everyone) 9th bit - write by everyone? (no) 10th bit - execute by everyone? (yes, by everyone) |
以下几行是一些执行所述访问所需的最小权限集的示例。您可能希望授予比此处列出的更多的权限,但这应该描述这些目录上的最小权限的作用。
dr-------- The contents can be listed, but file attributes can't be read d--x------ The directory can be entered, and used in full execution paths dr-x------ File attributes can be read by owner d-wx------ Files can be created/deleted, even if the directory isn't the current one d------x-t Prevents files from deletion by others with write access. Used on /tmp d---s--s-- No effect |
系统配置文件 (通常位于/etc目录中) 的模式通常为640 (-rw-r-----),且所有者为 root。您可以根据站点的安全需求进行调整。 永远不要让任何系统文件可由组或所有人写入。一些配置文件,包括/etc/shadow,应该只能由 root 读取,并且/etc/etc 目录下的目录至少不应被其他人访问。
SUID shell 脚本是一个严重的安全风险,因此内核不会执行它们。 无论您认为 shell 脚本有多安全,它都可能被利用,使破解者获得 root shell。
检测系统上本地(以及网络)攻击的另一个好方法是运行完整性检查器,例如Tripwire, Aide或Osiris。 这些完整性检查器会对所有重要的二进制文件和配置文件运行多个校验和,并将其与以前的、已知的良好值的数据库进行比较,作为参考。 因此,文件中的任何更改都会被标记。
最好将这些程序安装到软盘上,然后物理地设置软盘的写保护。 这样,入侵者就无法篡改完整性检查器本身或更改数据库。 一旦您设置了这样的东西,最好将其作为您的正常安全管理职责的一部分来运行,以查看是否有任何更改。
您甚至可以添加一个crontab条目,以便每天晚上从软盘运行检查器,并在早上通过邮件将结果发送给您。 类似
# set mailto MAILTO=kevin # run Tripwire 15 05 * * * root /usr/local/adm/tcheck/tripwire |
完整性检查器可以成为在您注意到入侵者之前检测到他们的天赐之物。 由于在普通系统上会更改很多文件,因此您必须小心区分哪些是破解者活动,哪些是您自己的行为。
您可以在以下位置找到免费提供的、未经支持的版本Tripwirehttp://www.tripwire.org,免费。 可以购买手册和支持。
Aide可以在 http://www.cs.tut.fi/~rammer/aide.html 找到。
Osiris可以在 http://www.shmoo.com/osiris/ 找到。
“特洛伊木马”以维吉尔的《埃涅阿斯纪》中的传说诡计命名。 这个想法是,破解者分发一个听起来很棒的程序或二进制文件,并鼓励其他人下载它并以 root 身份运行它。 然后,该程序可以在他们不注意的情况下危及他们的系统。 虽然他们认为他们刚刚下载的二进制文件做了一件事(而且很可能确实如此),但它也危及了他们的安全。
您应该小心在您的机器上安装哪些程序。 RedHat 在其 RPM 文件上提供了 MD5 校验和和 PGP 签名,因此您可以验证您安装的是真实的东西。 其他发行版有类似的方法。 您永远不应该以 root 身份运行任何不熟悉的二进制文件,您没有它的源代码。 很少有攻击者愿意发布源代码以供公众审查。
虽然它可能很复杂,但请确保您从其真实的分发站点获取程序的源代码。 如果该程序将以 root 身份运行,请确保您或您信任的人查看了源代码并对其进行了验证。
当今使用的最重要的安全功能之一是密码。 您和您的所有用户都拥有安全、难以猜测的密码非常重要。 大多数较新的 Linux 发行版都包含passwd程序,这些程序不允许您设置容易猜测的密码。 确保您的passwd程序是最新的并且具有这些功能。
深入讨论加密超出了本文档的范围,但有必要进行介绍。 加密非常有用,甚至在这个时代可能是必要的。 有各种各样的数据加密方法,每种方法都有自己的一组特征。
大多数 Unices(Linux 也不例外)主要使用一种单向加密算法,称为 DES(数据加密标准)来加密您的密码。 然后,此加密密码存储在(通常)/etc/passwd(或较少见的)/etc/shadow中。 当您尝试登录时,您输入的密码会再次加密,并与存储密码的文件中的条目进行比较。 如果它们匹配,则它必须是相同的密码,并且您被允许访问。 尽管 DES 是一种双向加密算法(您可以对消息进行编码,然后再解码,给定正确的密钥),但大多数 Unix 使用的变体是单向的。 这意味着应该不可能反转加密以从/etc/passwd(或/etc/shadow).
的内容中获取密码。 暴力破解攻击,例如 "Crack" 或 "John the Ripper"(参见 第 6.9 节),通常可以猜到密码,除非您的密码足够随机。 PAM 模块(见下文)允许您使用不同的加密例程来加密密码(MD5 等)。 您也可以利用 Crack 来发挥自己的优势。 考虑定期针对您自己的密码数据库运行 Crack,以查找不安全的密码。 然后联系违规用户,并指示他更改密码。
您可以访问 http://consult.cern.ch/writeup/security/security_3.html 以获取有关如何选择良好密码的信息。
公钥密码术,例如用于 PGP 的那种,使用一个密钥进行加密,一个密钥用于解密。 然而,传统的密码术使用相同的密钥进行加密和解密; 此密钥必须为双方都知道,因此必须以某种方式安全地从一方传输到另一方。
为了缓解安全传输加密密钥的需求,公钥加密使用两个单独的密钥:公钥和私钥。 每个人的公钥都可以供任何人用来进行加密,同时每个人都保留他或她的私钥来解密使用正确的公钥加密的消息。
公钥和私钥密码术都有优点,您可以在本节末尾列出的 RSA 密码术常见问题解答 中阅读有关这些差异的信息。
PGP(Pretty Good Privacy)在 Linux 上得到了很好的支持。 已知版本 2.6.2 和 5.0 工作良好。 有关 PGP 及其使用方法的良好入门知识,请查看 PGP 常见问题解答:http://www.pgp.com/service/export/faq/55faq.cgi
请务必使用适用于您所在国家/地区的版本。 由于美国政府的出口限制,禁止以电子形式在该国境外传输强加密。
美国的出口管制现在由 EAR(出口管理条例)管理。 它们不再受 ITAR 约束。
还有一个在 Linux 上配置 PGP 的分步指南,可在 http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html 找到。 它是为国际版 PGP 编写的,但很容易适应美国版。 您可能还需要一些最新版本的 Linux 的补丁; 该补丁可在 ftp://metalab.unc.edu/pub/Linux/apps/crypto 找到。
有一个项目维护一个免费的 pgp 重写实现,并带有开源。 GnuPG 是 PGP 的一个完整且免费的替代品。 因为它不使用 IDEA 或 RSA,所以它可以不受任何限制地使用。 GnuPG 符合 OpenPGP。 有关更多信息,请参见 GNU Privacy Guard 网页:http://www.gnupg.org/。
有关密码术的更多信息可以在 RSA 密码术常见问题解答中找到,该解答可在 http://www.rsa.com/rsalabs/newfaq/ 获得。 在这里,您可以找到诸如 "Diffie-Hellman"、"公钥密码术"、"数字证书" 等术语的信息。
通常,用户会询问各种安全和加密协议之间的区别以及如何使用它们。 虽然这不是加密文档,但最好简要解释一下每个协议是什么,以及在哪里可以找到更多信息。
SSL: - SSL,或安全套接字层,是 Netscape 开发的一种加密方法,用于提供 Internet 安全。 它支持几种不同的加密协议,并提供客户端和服务器身份验证。 SSL 在传输层运行,创建一个安全的加密数据通道,因此可以无缝地加密多种类型的数据。 这在访问安全站点以使用 Communicator 查看安全在线文档时最常见,并且是与 Communicator 以及许多其他 Netscape Communications 数据加密进行安全通信的基础。 可以在 http://www.consensus.com/security/ssl-talk-faq.html 找到更多信息。 有关 Netscape 的其他安全实现以及这些协议的良好起点的信息可在 http://home.netscape.com/info/security-doc.html 找到。 还需要注意的是,SSL 协议可用于传递许多其他常见协议,从而“包装”它们以实现安全性。 请参见 http://www.quiltaholic.com/rickk/sslwrap/
S-HTTP: - S-HTTP 是另一种提供 Internet 安全服务的协议。 它旨在提供机密性、身份验证、完整性和不可否认性[不能被误认为其他人],同时通过参与每笔交易的各方之间的选项协商来支持多种密钥管理机制和密码算法。 S-HTTP 仅限于实现它的特定软件,并单独加密每条消息。 [摘自 RSA 密码术常见问题解答,第 138 页]
S/MIME: - S/MIME,或安全多用途互联网邮件扩展,是一种用于加密互联网上电子邮件和其他类型消息的加密标准。它是由 RSA 开发的开放标准,因此我们很可能很快就会在 Linux 上看到它。有关 S/MIME 的更多信息,请访问 http://home.netscape.com/assist/security/smime/overview.html。
除了 CIPE 和其他形式的数据加密之外,还有其他几种 Linux 的 IPSEC 实现。IPSEC 是 IETF 致力于在 IP 网络层创建密码安全通信,并提供身份验证、完整性、访问控制和保密性的工作。有关 IPSEC 和 Internet 草案的信息,请访问 http://www.ietf.org/html.charters/ipsec-charter.html。您还可以找到指向其他涉及密钥管理协议的链接,以及 IPSEC 邮件列表和存档。
在亚利桑那大学开发的 x-kernel Linux 实现使用了一个基于对象的框架来实现网络协议,称为 x-kernel,您可以在 http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html 找到它。最简单地说,x-kernel 是一种在内核级别传递消息的方法,这使得实现更容易。
另一个免费提供的 IPSEC 实现是 Linux FreeS/WAN IPSEC。他们的网页声明:""这些服务允许您通过不受信任的网络构建安全隧道。所有通过不受信任网络传输的数据都由 IPSEC 网关机器加密,并由另一端的网关解密。结果就是虚拟专用网络或 VPN。 这是一个有效的私有网络,即使它包含由不安全的互联网连接的多个不同站点的机器。""
您可以从 http://www.xs4all.nl/~freeswan/ 下载它,并且在撰写本文时,它刚刚达到 1.0 版本。
与其他形式的加密一样,由于出口限制,它默认情况下不与内核一起分发。
ssh和stelnet是一套程序,允许您登录到远程系统并建立加密连接。
openssh是一套程序,用作rlogin, rsh和rcp的安全替代品。 它使用公钥密码学来加密两个主机之间的通信,以及验证用户身份。 它可以用于安全地登录到远程主机或在主机之间复制数据,同时防止中间人攻击(会话劫持)和 DNS 欺骗。 它将对您的连接执行数据压缩,并保护主机之间的 X11 通信。
现在有几个 ssh 实现。 Data Fellows 最初的商业实现可以在The 找到ssh主页位于 http://www.datafellows.com。
优秀的 Openssh 实现基于 datafellows ssh 的早期版本,并且经过完全修改,不包含任何专利或专有部分。 它是免费的,并遵守 BSD 许可。 可以在以下位置找到:http://www.openssh.com。
还有一个开源项目,从头开始重新实现 ssh,称为“psst...”。 有关更多信息,请参阅:http://www.net.lut.ac.uk/psst/
您也可以使用ssh从您的 Windows 工作站连接到您的 Linuxssh服务器。 有几个免费提供的 Windows 客户端实现,包括 http://guardian.htu.tuwien.ac.at/therapy/ssh/ 上的那个,以及 DataFellows 的商业实现,地址为 http://www.datafellows.com。
SSLeay 是 Eric Young 开发的 Netscape 安全套接字层协议的免费实现。 它包括几个应用程序,例如安全 telnet、Apache 模块、几个数据库,以及几种算法,包括 DES、IDEA 和 Blowfish。
使用此库,已经创建了一个安全的 telnet 替代品,它通过 telnet 连接进行加密。 与 SSH 不同,stelnet 使用 SSL,即 Netscape 开发的安全套接字层协议。 您可以通过 SSLeay FAQ 开始查找安全 telnet 和安全 FTP,该 FAQ 位于 http://www.psy.uq.oz.au/~ftp/Crypto/。
SRP 是另一个安全 telnet/ftp 实现。 来自他们的网页
""SRP 项目正在开发免费的全球使用的安全互联网软件。 从完全安全的 Telnet 和 FTP 发行版开始,我们希望用强大的替代品取代弱网络身份验证系统,这些替代品不会为了安全而牺牲用户友好性。 安全应该是默认设置,而不是选项!""
较新版本的 Red Hat Linux 和 Debian Linux 发行版都带有一个名为“PAM”的统一身份验证方案。 PAM 允许您即时更改您的身份验证方法和要求,并封装所有本地身份验证方法,而无需重新编译您的任何二进制文件。 PAM 的配置超出了本文档的范围,但请务必查看 PAM 网站以获取更多信息。https://linuxkernel.org.cn/pub/linux/libs/pam/index.html。
您可以使用 PAM 执行的几件事
使用 DES 以外的加密方式来保护您的密码。 (使其更难强行解码)
对所有用户设置资源限制,这样他们就无法执行拒绝服务攻击(进程数量、内存量等)
即时启用影子密码(见下文)
允许特定用户仅在特定时间从特定地点登录
在安装和配置系统后的几个小时内,您就可以在攻击发生之前阻止许多攻击。 例如,使用 PAM 禁用系统范围内对.rhosts用户主目录中的文件,方法是将这些行添加到/etc/pam.d/rlogin:
# # Disable rsh/rlogin/rexec for users # login auth required pam_rhosts_auth.so no_rhosts |
该软件的主要目标是提供一种安全(防止窃听,包括流量分析和伪造的消息注入)的子网互连设施,通过不安全的数据包网络(例如互联网)。
CIPE 在网络级别加密数据。 在网络上的主机之间传输的数据包被加密。 加密引擎放置在发送和接收数据包的驱动程序附近。
这与 SSH 不同,SSH 在套接字级别通过连接加密数据。 在不同主机上运行的程序之间的逻辑连接被加密。
CIPE 可用于隧道传输,以创建虚拟专用网络。 低级加密的优点是可以使 VPN 中连接的两个网络之间透明地工作,而无需更改任何应用程序软件。
从 CIPE 文档中总结
“IPSEC 标准定义了一组协议,这些协议可用于(除其他外)构建加密的 VPN。 但是,IPSEC 是一组相当重且复杂的协议,包含许多选项,完整协议集的实现仍然很少使用,并且某些问题(例如密钥管理)尚未完全解决。 CIPE 使用更简单的方法,其中许多可以参数化的内容(例如所使用的实际加密算法的选择)都是安装时固定的选择。 这限制了灵活性,但允许进行简单(因此高效、易于调试...)的实现。”
更多信息请访问 http://www.inka.de/~bigred/devel/cipe.html
与其他形式的加密一样,由于出口限制,它默认情况下不与内核一起分发。
Kerberos 是 MIT Athena 项目开发的一种身份验证系统。 当用户登录时,Kerberos 会对用户进行身份验证(使用密码),并为用户提供一种方法,以向散布在网络中的其他服务器和主机证明其身份。
此身份验证随后被rlogin等程序使用,以允许用户在没有密码的情况下登录到其他主机(代替.rhosts文件)。 邮件系统也可以使用此身份验证方法,以保证邮件已发送给正确的人,并保证发件人是其声称的人。
Kerberos 及其附带的其他程序可防止用户“欺骗”系统,使其相信他们是其他人。 不幸的是,安装 Kerberos 非常具有侵入性,需要修改或替换许多标准程序。
您可以通过查看 kerberos FAQ 来找到有关 kerberos 的更多信息,并且可以在 http://nii.isi.edu/info/kerberos/ 找到代码。
[来源:Stein, Jennifer G.、Clifford Neuman 和 Jeffrey L. Schiller。 “Kerberos:开放网络系统的身份验证服务。” USENIX 会议记录,德克萨斯州达拉斯,1998 年冬季。]
Kerberos 不应成为您提高主机安全性的第一步。 它非常复杂,并且不像 SSH 那样广泛使用。
影子密码是一种对普通用户隐藏加密密码信息的方法。 Red Hat 和 Debian Linux 的最新版本默认使用影子密码,但在其他系统上,加密密码存储在/etc/passwd文件中,供所有人阅读。 然后,任何人都可以运行密码猜测程序,并尝试确定它们是什么。 相比之下,影子密码保存在/etc/shadow中,只有特权用户才能读取。 为了使用影子密码,您需要确保所有需要访问密码信息的实用程序都经过重新编译以支持它们。 PAM(上面)还允许您仅插入一个影子模块; 它不需要重新编译可执行文件。 如有必要,您可以参考 Shadow-Password HOWTO 获取更多信息。 它可以从 http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html 获得。 现在已经过时了,并且对于支持 PAM 的发行版来说是不需要的。
如果由于某种原因您的passwd程序没有强制使用难以猜测的密码,您可能需要运行一个密码破解程序,并确保用户的密码安全。
密码破解程序基于一个简单的想法:他们尝试字典中的每个单词,然后尝试这些单词的变体,加密每个单词并将其与您的加密密码进行比较。 如果他们找到匹配项,他们就知道您的密码是什么。
有很多程序...其中两个最值得注意的是 "Crack" 和 "John the Ripper" (http://www.openwall.com/john/)。 它们将占用您的大量 CPU 时间,但是如果您首先自己运行它们并通知用户弱密码,您应该能够判断攻击者是否可以使用它们入侵。 请注意,攻击者首先必须使用一些其他漏洞才能读取您的/etc/passwd文件,但此类漏洞比您想象的更常见。
因为安全性仅与最不安全的主机一样强大,所以值得一提的是,如果您的网络上有任何 Windows 机器,您应该查看 L0phtCrack,它是 Windows 的 Crack 实现。 它可以从 http://www.l0pht.com 获得
CFS 是一种加密整个目录树并允许用户在其上存储加密文件的方法。 它使用在本地机器上运行的 NFS 服务器。 RPMS 可以在 http://www.zedz.net/redhat/ 获得,有关其工作方式的更多信息可以在 ftp://ftp.research.att.com/dist/mab/ 获得。
TCFS 通过增加与文件系统的集成度来改进 CFS,从而使用户透明地使用加密的文件系统。 更多信息请访问:http://www.tcfs.it/。
它也不一定需要用于整个文件系统。 它也可以在目录树上工作。
保护您的图形显示非常重要,以防止攻击者在您键入密码时获取您的密码,读取您在屏幕上阅读的文档或信息,甚至利用漏洞获得 root 权限。 通过网络运行远程 X 应用程序也可能充满危险,允许嗅探器查看您与远程系统的所有交互。
X 有许多访问控制机制。 其中最简单的是基于主机的:您使用xhost来指定允许访问您的显示的主机。 这不是很安全,因为如果有人可以访问您的机器,他们可以xhost + 他们的机器并且很容易进入。 此外,如果您必须允许从不受信任的机器进行访问,那么任何人都可能危及您的显示。
当使用xdm(X 显示管理器) 登录时,您会获得更好的访问方法:MIT-MAGIC-COOKIE-1。 将生成一个 128 位“cookie”并存储在您的.Xauthority文件中。 如果您需要允许远程机器访问您的显示,您可以使用xauth命令和您.Xauthority文件中的信息来仅允许该连接。 请参阅 Remote-X-Apps mini-howto,网址为 http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html。
您也可以使用ssh(请参阅上面的第 6.4 节) 以允许安全的 X 连接。 这也具有对最终用户透明的优点,并且意味着没有未加密的数据在网络上传输。
您还可以使用 X 服务器的“-nolisten tcp”选项来禁用与 X 服务器的任何远程连接。 这将阻止通过 tcp 套接字与服务器的任何网络连接。
请查看Xsecurityman 手册页面,以获取有关 X 安全性的更多信息。 安全的选择是使用xdm登录到您的控制台,然后使用ssh访问您希望在其上运行 X 程序的远程站点。
SVGAlib 程序通常是 SUID-root 的,以便访问您的所有 Linux 机器的视频硬件。 这使得它们非常危险。 如果它们崩溃,您通常需要重新启动机器才能恢复可用的控制台。 确保您运行的任何 SVGA 程序都是真实的,并且至少可以在某种程度上被信任。 更好的是,根本不要运行它们。
Linux GGI 项目正试图解决 Linux 上视频接口的几个问题。 GGI 将把一小部分视频代码移动到 Linux 内核中,然后控制对视频系统的访问。 这意味着 GGI 能够随时将您的控制台恢复到已知的良好状态。 它们还将允许安全注意键,因此您可以确保控制台上没有运行木马login程序。 http://synergy.caltech.edu/~ggi/
这是对与安全性相关的内核配置选项的描述,以及对它们的作用以及如何使用它们的解释。
由于内核控制着您计算机的网络,因此内核的安全性非常重要,并且不能受到损害。 为了防止一些最新的网络攻击,您应该尝试保持内核版本的最新状态。 您可以在 或从您的发行版供应商处找到新的内核。
还有一个国际组织为 Linux 主流内核提供单一的统一加密补丁。 该补丁为主流内核不支持的许多加密子系统和内容提供支持,原因是出口限制。 有关更多信息,请访问其网页:http://www.kerneli.org
对于 2.0.x 内核,以下选项适用。 在内核配置过程中,您应该会看到这些选项。 此处的许多注释来自./linux/Documentation/Configure.help,这与在make config内核编译阶段使用帮助工具时引用的文档相同。
网络防火墙 (CONFIG_FIREWALL)
如果您打算在您的 Linux 机器上运行任何防火墙或伪装,则应启用此选项。 如果它只是一台普通的客户端机器,那么可以安全地选择“否”。
IP:转发/网关 (CONFIG_IP_FORWARD)
如果您启用 IP 转发,您的 Linux 计算机实际上会变成路由器。 如果您的机器位于网络上,则您可以将数据从一个网络转发到另一个网络,并且可能破坏为防止这种情况而设置的防火墙。 普通的拨号用户将希望禁用此选项,而其他用户应专注于这样做的安全影响。 防火墙机器将希望启用此功能,并与防火墙软件结合使用。
您可以使用以下命令动态启用 IP 转发
root# echo 1 > /proc/sys/net/ipv4/ip_forward |
root# echo 0 > /proc/sys/net/ipv4/ip_forward |
IP:SYN Cookies (CONFIG_SYN_COOKIES)
“SYN 攻击”是一种拒绝服务 (DoS) 攻击,它会消耗您机器上的所有资源,迫使您重新启动。 我们想不出您通常不启用它的理由。 在 2.2.x 内核系列中,此配置选项仅允许 SYN Cookies,但不启用它们。 要启用它们,您必须执行以下操作
root# echo 1 > /proc/sys/net/ipv4/tcp_syncookies <P> |
IP:防火墙 (CONFIG_IP_FIREWALL)
如果您要将您的机器配置为防火墙、进行伪装或希望保护您的拨号工作站免受通过 PPP 拨号接口进入的攻击,则此选项是必需的。
IP:防火墙数据包日志记录 (CONFIG_IP_FIREWALL_VERBOSE)
此选项为您提供有关您的防火墙接收到的数据包的信息,例如发送者、接收者、端口等。
IP:丢弃源路由帧 (CONFIG_IP_NOSR)
应该启用此选项。 源路由帧包含数据包内部的完整目标路径。 这意味着数据包经过的路由器不需要检查它,只需将其转发即可。 这可能会导致数据进入您的系统,从而可能导致潜在的漏洞利用。
IP:伪装 (CONFIG_IP_MASQUERADE) 如果您的 Linux 计算机充当防火墙的本地网络上的计算机之一想要向外部发送内容,则您的计算机可以“伪装”成该主机,即它将流量转发到预期目标,但使其看起来像是来自防火墙计算机本身。 有关更多信息,请参见 http://www.indyramp.com/masq。
IP:ICMP 伪装 (CONFIG_IP_MASQUERADE_ICMP) 此选项将 ICMP 伪装添加到仅伪装 TCP 或 UDP 流量的先前选项。
IP:透明代理支持 (CONFIG_IP_TRANSPARENT_PROXY) 这使您的 Linux 防火墙能够将源自本地网络并发送到远程主机的任何网络流量透明地重定向到本地服务器,称为“透明代理服务器”。 这使得本地计算机认为它们正在与远程终端通话,而实际上它们已连接到本地代理。 有关更多信息,请参见 IP-Masquerading HOWTO 和 http://www.indyramp.com/masq。
IP:始终进行碎片整理 (CONFIG_IP_ALWAYS_DEFRAG)
通常,此选项处于禁用状态,但是如果您正在构建防火墙或伪装主机,则需要启用它。 当数据从一个主机发送到另一个主机时,它并不总是作为单个数据包发送,而是被分成几个部分。 问题在于端口号仅存储在第一个片段中。 这意味着有人可以将信息插入到不应该存在的其余数据包中。 它还可以防止对尚未针对此攻击进行修补的内部主机进行泪滴攻击。
数据包签名 (CONFIG_NCPFS_PACKET_SIGNING)
这是 2.2.x 内核系列中提供的一个选项,它将为 NCP 数据包签名以提高安全性。 通常,您可以将其关闭,但是如果确实需要,可以使用它。
IP:防火墙数据包 netlink 设备 (CONFIG_IP_FIREWALL_NETLINK)
这是一个非常棒的选项,它允许您在用户空间程序中分析数据包的前 128 个字节,以根据数据包的有效性来确定是否要接受或拒绝该数据包。
对于 2.2.x 内核,许多选项是相同的,但是已经开发了一些新选项。 此处的许多注释来自./linux/Documentation/Configure.help,这与在make config内核编译阶段。 下面仅列出了新添加的选项。 有关其他必需选项的列表,请参见 2.0 描述。 2.2 内核系列中最重大的更改是 IP 防火墙代码。ipchains程序现在用于安装 IP 防火墙,而不是 2.0 内核中使用的ipfwadm程序。
套接字过滤 (CONFIG_FILTER)
对于大多数人来说,可以安全地对此选项说“否”。 此选项允许您将用户空间过滤器连接到任何套接字,并确定是否应允许或拒绝数据包。 除非您有非常特殊的需求并且能够对这样的过滤器进行编程,否则应选择“否”。 另请注意,到目前为止,除了 TCP 之外,所有协议都受支持。
端口转发
端口转发是对 IP 地址伪装的补充,它允许将数据包从外部转发到防火墙内部的给定端口。例如,如果您想在防火墙或伪装主机后运行 Web 服务器,并且该 Web 服务器应该可以从外部访问,这将非常有用。外部客户端向防火墙的 80 端口发送请求,防火墙将此请求转发到 Web 服务器,Web 服务器处理该请求并将结果通过防火墙发送到原始客户端。客户端认为防火墙机器本身正在运行 Web 服务器。如果您的防火墙后有一组相同的 Web 服务器,这也可以用于负载平衡。
有关此功能的更多信息,请访问 http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html(要浏览万维网,您需要访问一台可以访问互联网的机器,并且该机器上安装了像 lynx 或 Netscape 这样的程序)。有关一般信息,请访问 ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/
套接字过滤 (CONFIG_FILTER)
使用此选项,用户空间程序可以将过滤器附加到任何套接字,从而告诉内核它应该允许或禁止某些类型的数据通过该套接字。目前,Linux 套接字过滤适用于除 TCP 之外的所有套接字类型。有关更多信息,请参见文本文件./linux/Documentation/networking/filter.txt。
IP: 地址伪装
2.2 内核的地址伪装功能已经得到了改进。它为伪装特殊协议等提供了额外的支持。请务必阅读 IP Chains HOWTO 以获取更多信息。
Linux 上有一些块设备和字符设备也可以帮助您提高安全性。
以下两个设备/dev/random和/dev/urandom由内核提供,用于随时提供随机数据。
这两个设备/dev/random和/dev/urandom应该足够安全地用于生成 PGP 密钥、ssh挑战以及其他需要安全随机数的应用程序。攻击者应该无法根据这些来源的任何初始数字序列来预测下一个数字。为了确保您从这些来源获得的数字在各个方面都是随机的,我们付出了很多努力。
这两个设备之间的唯一区别是,/dev/random当随机字节用完时,它会让您等待积累更多。请注意,在某些系统上,它可能会阻塞很长时间,等待新的用户生成的熵输入到系统中。因此,您必须谨慎使用/dev/random。(也许最好的方法是在您生成敏感密钥信息时使用它,并告诉用户反复敲击键盘,直到您打印出“OK, enough”。)
/dev/random是高质量的熵,通过测量中断间隔时间等生成。它会阻塞,直到有足够的随机数据位可用。
/dev/urandom与之类似,但是当熵存储即将耗尽时,它会返回一个加密强度高的哈希值。这不如它安全,但足以满足大多数应用程序的需求。
您可以使用如下命令从设备读取数据:
root# head -c 6 /dev/urandom | mimencode |
请参阅/usr/src/linux/drivers/char/random.c以获取算法的描述。
感谢 Theodore Y. Ts'o、Jon Lewis 和来自 Linux-kernel 的其他人帮助我(Dave)完成了这项工作。
随着人们花费越来越多的时间连接到网络,网络安全变得越来越重要。破坏网络安全通常比破坏物理或本地安全容易得多,并且更加常见。
有许多优秀的工具可以帮助您提高网络安全,并且越来越多的工具随 Linux 发行版一起提供。
入侵者访问您网络上更多系统的最常见方法之一是在已受到攻击的主机上使用数据包嗅探器。这个“嗅探器”只是在以太网端口上监听诸如passwd和login和su之类的东西,然后在数据包流中记录流量。这样,攻击者就可以获得他们甚至没有尝试入侵的系统的密码。明文密码很容易受到这种攻击。
示例:主机 A 已被入侵。攻击者安装了一个嗅探器。嗅探器截获管理员从主机 C 登录到主机 B 的信息。它获得了管理员的个人密码,因为他们登录到 B。然后,管理员执行su来解决问题。他们现在拥有主机 B 的 root 密码。稍后,管理员让某人telnet从他的帐户到另一个站点上的主机 Z。现在攻击者拥有主机 Z 上的密码/登录名。
在当今时代,攻击者甚至不需要入侵系统来做到这一点:他们也可以将笔记本电脑或 PC 带入建筑物并接入您的网络。
使用ssh或其他加密密码方法可以阻止这种攻击。诸如 APOP 用于 POP 帐户之类的方法也可以防止这种攻击。(普通的 POP 登录非常容易受到这种攻击,任何通过网络发送明文密码的东西也是如此。)
在您将 Linux 系统置于任何网络上之前,首先要查看的是您需要提供的服务。您不需要提供的服务应该被禁用,这样您就可以少一件需要担心的事情,攻击者也可以少一个寻找漏洞的地方。
在 Linux 下有很多方法可以禁用服务。您可以查看您的/etc/inetd.conf文件,并查看您的inetd提供的服务。禁用您不需要的任何服务,方法是用注释掉它们(在行首添加#),然后向您的 inetd 进程发送 SIGHUP 信号。
您还可以删除(或注释掉)您/etc/services文件中的服务。这意味着本地客户端也将无法找到该服务(例如,如果您删除ftp,并尝试从该机器 ftp 到远程站点,它将失败并显示“未知服务”消息)。通常不值得费力从/etc/services中删除服务,因为它不会提供额外的安全性。如果本地人员想要使用ftp,即使您已经注释掉了它,他们也会创建一个使用通用 FTP 端口的客户端,并且仍然可以正常工作。
您可能想要保留启用的一些服务包括
ftp
telnet(或ssh)
邮件,例如pop-3或imap
identd
如果您知道您不会使用某个特定的软件包,您也可以完全删除它。rpm -e packagename在 Red Hat 发行版下将删除整个软件包。在 Debian 下dpkg --remove执行相同的操作。
此外,您确实想要禁用 rsh/rlogin/rcp 实用程序,包括 login(由rlogin使用)、shell(由rcp使用)和 exec(由rsh使用),使其无法在/etc/inetd.conf中启动。这些协议非常不安全,并且过去曾导致过漏洞利用。
您应该检查/etc/rc.d/rc[0-9].d(在 Red Hat 上;/etc/rc[0-9].d在 Debian 上),看看那些目录中启动的服务器是否是不需要的。这些目录中的文件实际上是指向目录/etc/rc.d/init.d(在 Red Hat 上;/etc/init.d在 Debian 上)中的文件的符号链接。重命名init.d目录中的文件会禁用所有指向该文件的符号链接。如果您只想禁用特定运行级别的服务,请重命名相应的符号链接,方法是将大写S替换为小写s,如下所示:
root# cd /etc/rc6.d root# mv S45dhcpd s45dhcpd |
如果您有 BSD 样式的rc文件,您将需要检查/etc/rc*中您不需要的程序。
大多数 Linux 发行版都带有 tcp_wrappers,它“包装”了您的所有 TCP 服务。tcp_wrapper (tcpd) 是从inetd而不是真正的服务器调用的。tcpd然后检查请求服务的主机,并执行真正的服务器,或者拒绝该主机的访问。tcpd允许您限制对您的 TCP 服务的访问。您应该创建一个/etc/hosts.allow文件,并在其中添加只需要访问您的机器服务的那些主机。
如果您是家庭拨号用户,我们建议您拒绝 ALL。tcpd还会记录访问服务的失败尝试,因此如果您的机器受到攻击,这可以提醒您。如果您添加新服务,您应该确保将它们配置为使用 tcp_wrappers,如果它们是基于 TCP 的。例如,普通的拨号用户可以阻止外部人员连接到他的机器,但仍然能够检索邮件并建立到 Internet 的网络连接。要做到这一点,您可以将以下内容添加到您的/etc/hosts.allow:
ALL: 127.
当然,/etc/hosts.deny 应该包含
ALL: ALL
这将阻止外部连接到您的机器,但仍然允许您从内部连接到 Internet 上的服务器。
请记住,tcp_wrappers 仅保护从inetd执行的服务,以及少数其他服务。您的机器上很可能运行着其他服务。您可以使用netstat -ta找到您的机器正在提供的所有服务的列表。
维护有关您网络上所有主机的最新 DNS 信息可以帮助您提高安全性。如果未经授权的主机连接到您的网络,您可以通过缺少 DNS 条目来识别它。许多服务可以配置为不接受来自没有有效 DNS 条目的主机的连接。
identd是一个小型程序,通常在您的inetdserver。它跟踪哪个用户正在运行哪个 TCP 服务,然后将此信息报告给请求者。
很多人误解了identd的用处,因此禁用它或阻止所有异地请求。identd的存在不是为了帮助远程站点。无法知道从远程identd获取的数据是否正确。在identd请求中没有身份验证。
那么为什么要运行它呢?因为它有助于你,并且是跟踪中的另一个数据点。如果你的identd没有受到威胁,那么你就知道它正在告诉远程站点使用 TCP 服务的用户的用户名或 uid。 如果远程站点的管理员反馈给你,告诉你某个用户试图入侵他们的站点,你可以轻松地对该用户采取行动。如果你没有运行identd,你将不得不查看大量的日志,找出当时在线的人,并且通常需要花费更多的时间来跟踪用户。
文件给 root。identd大多数发行版附带的比许多人想象的更具可配置性。你可以为特定用户禁用它(他们可以创建一个.noidentidentd文件),你可以记录所有
Postfix 邮件服务器由 Wietse Venema 编写,他是 Postfix 和其他几种主要的互联网安全产品的作者,旨在“提供一个替代广泛使用的 Sendmail 程序的方案。Postfix 尝试做到快速、易于管理,并且希望是安全的,同时与 sendmail 兼容,以免惹恼你的用户。”
有关 postfix 的更多信息,请访问 Postfix 主页 和 配置和保护 Postfix。
有很多不同的软件包可以对机器或网络进行基于端口和服务的扫描。SATAN、ISS、SAINT 和 Nessus 是一些比较知名的。 这些软件连接到目标机器(或网络上的所有目标机器)上的所有端口,并尝试确定那里正在运行什么服务。 基于这些信息,你可以知道机器是否容易受到该服务器上特定漏洞的攻击。
SATAN(安全管理员网络分析工具)是一个带有 Web 界面的端口扫描器。 可以将其配置为对一台机器或一个机器网络执行轻度、中度或强度检查。 获取 SATAN 并扫描你的机器或网络,并修复它发现的问题是个好主意。 确保从 metalab 或信誉良好的 FTP 或网站获取 SATAN 的副本。 有一个木马病毒版本的 SATAN 在网上分发。http://www.trouble.org/~zen/satan/satan.html. 请注意,SATAN 已经很久没有更新了,下面的一些其他工具可能会做得更好。
ISS(Internet 安全扫描器)是另一个基于端口的扫描器。 它比 Satan 快,因此可能更适合大型网络。 但是,SATAN 往往会提供更多信息。
Abacus 是一套工具,用于提供基于主机的安全性和入侵检测。 在 Web 上查看其主页以获取更多信息。 http://www.psionic.com/abacus/
SAINT 是 SATAN 的更新版本。 它是基于 Web 的,并且具有比 SATAN 更多的最新测试。 你可以在以下位置找到有关它的更多信息:http://www.wwdsi.com/~saint
Nessus 是一个免费的安全扫描器。 它具有 GTK 图形界面,易于使用。 它还设计有一个非常好的插件设置,用于新的端口扫描测试。 有关更多信息,请查看:http://www.nessus.org
有一些工具旨在提醒你 SATAN 和 ISS 以及其他扫描软件的探测。 但是,如果你大量使用 tcp_wrappers 并定期查看你的日志文件,你应该能够注意到此类探测。 即使在最低设置下,SATAN 仍然会在标准的 Red Hat 系统的日志中留下痕迹。
还有一些“隐形”端口扫描器。 设置了 TCP ACK 位的数据包(就像已建立的连接一样)很可能会通过数据包过滤防火墙。 来自_没有已建立会话_的端口的返回的 RST 数据包可以被认为是该端口上存在活动的证明。 我认为 TCP wrappers 不会检测到这一点。
你还可以查看 SNORT,这是一个免费的 IDS(入侵检测系统),可以检测其他网络入侵。 http://www.snort.org
你可以提供的最重要的服务之一是邮件服务器。 不幸的是,它也是最容易受到攻击的服务之一,仅仅是因为它必须执行的任务数量以及它通常需要的权限。
如果你正在使用sendmail,那么及时更新到最新版本非常重要。sendmail有很长的安全漏洞历史。 始终确保你运行的是来自 http://www.sendmail.org 的最新版本。
请记住,即使你不运行 sendmail,你仍然可以发送邮件。 如果你是家庭用户,你可以完全禁用 sendmail,只需使用你的邮件客户端发送邮件即可。 你也可以选择从 sendmail 启动文件中删除“-bd”标志,从而禁用传入的邮件请求。 换句话说,你可以使用以下方法从启动脚本执行 sendmail
# /usr/lib/sendmail -q15m |
许多管理员选择不使用 sendmail,而是选择其他邮件传输代理。 你可以考虑切换到qmail. qmail在设计时就考虑到了安全性。 它快速、稳定且安全。 Qmail 可以在 http://www.qmail.org 找到
与 qmail 直接竞争的是“postfix”,它由 tcp_wrappers 和其他安全工具的作者 Wietse Venema 编写。 前身为 vmailer,由 IBM 赞助,这也是一个从头开始编写的邮件传输代理,并考虑到了安全性。 你可以在 http://www.postfix.org 找到有关 postfix 的更多信息
“拒绝服务”(DoS)攻击是指攻击者试图使某些资源过于繁忙,无法响应合法请求,或者拒绝合法用户访问你的机器。
近年来,拒绝服务攻击大大增加。 下面列出了一些更流行和最近的攻击。 请注意,新的攻击会不断出现,因此这只是一些例子。 阅读 Linux 安全列表和 bugtraq 列表和存档以获取更多最新信息。
SYN 洪水 - SYN 洪水是一种网络拒绝服务攻击。 它利用了创建 TCP 连接方式中的“漏洞”。 较新的 Linux 内核(2.0.30 及更高版本)具有多个可配置选项,可以防止 SYN 洪水攻击拒绝人们访问你的机器或服务。 有关正确的内核保护选项,请参见第 7 节。
Pentium“F00F”错误 - 最近发现,发送到真正的 Intel Pentium 处理器的某些列汇编代码会导致机器重新启动。 这会影响每台配备 Pentium 处理器的机器(不是克隆,不是 Pentium Pro 或 PII),无论它运行什么操作系统。 Linux 内核 2.0.32 及更高版本包含此错误的解决方法,可防止其锁定你的机器。 内核 2.0.33 具有改进的内核修复版本,建议使用 2.0.33 而不是 2.0.32。 如果你在 Pentium 上运行,你应该立即升级!
Ping 洪水 - Ping 洪水是一种简单的暴力拒绝服务攻击。 攻击者向你的机器发送“洪水”般的 ICMP 数据包。 如果他们从具有比你更好的带宽的主机执行此操作,你的机器将无法在网络上发送任何内容。 此攻击的一种变体,称为“smurfing”,将 ICMP 数据包发送到具有你的机器返回 IP 的主机,从而使他们能够以较低的检测方式向你发送洪水。 你可以在 http://www.quadrunner.com/~chuegen/smurf.txt 找到有关“smurf”攻击的更多信息
如果你受到 ping 洪水攻击,请使用诸如tcpdump之类的工具来确定数据包的来源(或看起来的来源),然后将此信息告知你的提供商。 Ping 洪水最容易在路由器级别或使用防火墙来阻止。
死亡 Ping - 死亡 Ping 攻击发送 ICMP ECHO REQUEST 数据包,这些数据包太大,无法放入内核数据结构中,内核数据结构旨在存储它们。 由于向许多系统发送单个大型(65,510 字节)“ping”数据包会导致它们挂起甚至崩溃,因此此问题很快被称为“死亡 Ping”。 这一个早已修复,无需再担心。
Teardrop / New Tear - 最新的漏洞之一涉及 Linux 和 Windows 平台上的 IP 分段代码中存在的错误。 它在内核版本 2.0.33 中已修复,并且无需选择任何内核编译时选项即可利用此修复程序。 Linux 显然不容易受到“newtear”漏洞的攻击。
NFS 是一种广泛使用的文件共享协议。 它允许运行nfsd和mountd的服务器使用内置于其内核中的 NFS 文件系统支持(如果它们不是 Linux 机器,则使用其他一些客户端支持)将整个文件系统“导出”到其他机器。mountd在/etc/mtab中跟踪已挂载的文件系统,并且可以使用showmount.
显示它们。许多站点使用 NFS 向用户提供主目录,以便无论他们登录到集群中的哪台机器,他们都将拥有所有主文件。
导出文件系统时允许进行少量安全设置。 你可以使你的nfsd将远程 root 用户(uid=0)映射到nobody用户,拒绝他们对导出文件的完全访问权限。 但是,由于单个用户可以访问他们自己的(或至少相同的 uid)文件,因此远程 root 用户可以登录或su到他们的帐户并完全访问他们的文件。 这只是对可以访问挂载你的远程文件系统的攻击者的一个小障碍。
如果必须使用 NFS,请确保仅导出到你真正需要的那些机器。 永远不要导出你的整个根目录; 仅导出你需要导出的目录。
有关 NFS 的更多信息,请参见 NFS HOWTO,可在 http://metalab.unc.edu/mdw/HOWTO/NFS-HOWTO.html 上找到
网络信息服务 (Network Information service)(以前称为 YP)是一种将信息分发到一组机器的方法。NIS 主服务器保存信息表,并将其转换为 NIS 映射文件。然后,这些映射文件通过网络提供服务,允许 NIS 客户端机器获取登录名、密码、主目录和 Shell 信息(标准/etc/passwd文件中的所有信息)。这允许用户更改一次密码,并在 NIS 域中的所有机器上生效。
NIS 完全不安全。它从来就不是为了安全而设计的。它旨在方便和实用。任何可以猜到你的 NIS 域名的人(在网络上的任何地方)都可以获得你的 passwd 文件副本,并使用 “crack” 和 “John the Ripper” 来破解你用户的密码。此外,还可以欺骗 NIS 并进行各种恶意的操作。如果必须使用 NIS,请确保你意识到这些危险。
有一个更安全的 NIS 替代方案,称为 NIS+。查看 NIS HOWTO 获取更多信息:http://metalab.unc.edu/mdw/HOWTO/NIS-HOWTO.html
防火墙是一种控制允许哪些信息进入和离开你的本地网络的方法。通常,防火墙主机连接到 Internet 和你的本地 LAN,并且从你的 LAN 到 Internet 的唯一访问方式是通过防火墙。这样,防火墙可以控制从 Internet 到你的 LAN 的来回传递的信息。
有许多类型的防火墙和设置它们的方法。Linux 机器是相当好的防火墙。防火墙代码可以直接构建到 2.0 及更高版本的内核中。用户空间工具ipfwadm对于 2.0 内核和ipchains对于 2.2 内核,允许你动态地更改你允许的网络流量类型。你也可以记录特定类型的网络流量。
防火墙是一种非常有用且重要的技术,用于保护你的网络。但是,永远不要认为因为你有一个防火墙,你就不需要保护它后面的机器。这是一个致命的错误。查看非常好防火墙-HOWTO在你的最新的 metalab 存档中,获取有关防火墙和 Linux 的更多信息。http://metalab.unc.edu/mdw/HOWTO/Firewall-HOWTO.html
有关更多信息,请参阅 IP-Masquerade mini-howto:http://metalab.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html
有关更多信息ipfwadm(让你更改防火墙设置的工具),可以在它的主页找到:http://www.xos.nl/linux/ipfwadm/
如果你没有防火墙的经验,并且计划设置一个不仅仅是简单的安全策略的防火墙,那么 O'Reilly and Associates 的 Firewalls 书籍或其他在线防火墙文档是必读的。查看 http://www.ora.com 获取更多信息。国家标准与技术研究院 (National Institute of Standards and Technology) 汇编了一份关于防火墙的优秀文档。虽然日期是 1995 年,但它仍然相当不错。你可以在 http://csrc.nist.gov/nistpubs/800-10/main.html 找到它。另外,对以下内容也感兴趣
Freefire 项目 -- 一个免费提供的防火墙工具列表,可在 http://sites.inka.de/sites/lina/freefire-l/index_en.html 找到
SunWorld 防火墙设计 -- 由 O'Reilly 书籍的作者编写,它提供了对不同防火墙类型的粗略介绍。它可在 http://www.sunworld.com/swol-01-1996/swol-01-firewall.html 获得
Mason - Linux 的自动化防火墙构建器。这是一个防火墙脚本,它会随着你在网络上执行所需的操作而学习!更多信息请参见:http://www.pobox.com/~wstearns/mason/
Linux IP 防火墙链 (Linux IP Firewalling Chains) 是对 2.2 内核的 2.0 Linux 防火墙代码的更新。它比以前的实现具有更多功能,包括
更灵活的数据包操作
更复杂的记帐
可以原子地进行简单的策略更改
可以显式阻止、拒绝等片段。
记录可疑数据包。
可以处理 ICMP/TCP/UDP 以外的协议。
如果你当前正在使用ipfwadm在你的 2.0 内核上,有脚本可用于转换ipfwadm命令格式为ipchains使用的格式。
请务必阅读 IP Chains HOWTO 获取更多信息。它可在 http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html 获得
在内核 IP 数据包过滤代码的另一组改进中,netfilter 允许用户在新 2.4 内核中设置、维护和检查数据包过滤规则。
netfilter 子系统是对以前的数据包过滤实现(包括 ipchains 和 ipfwadm)的完全重写。Netfilter 提供了大量的改进,现在已成为保护企业网络的更加成熟和强大的解决方案。
iptables |
Netfilter 提供了一个原始框架,用于在数据包通过内核的各个部分时对其进行操作。该框架的一部分包括对伪装、标准数据包过滤和现在更完整的网络地址转换的支持。它甚至包括对在防火墙后面的一组服务器之间负载均衡特定服务的请求的改进支持。
有状态检测功能尤其强大。有状态检测提供了跟踪和控制通过过滤器的通信流的能力。保持跟踪会话的状态和上下文信息的能力使规则更简单,并尝试解释更高级别的协议。
此外,可以开发小型模块来执行其他特定功能,例如将数据包传递给用户空间中的程序进行处理,然后重新注入回正常的包流中。在用户空间中开发这些程序的能力降低了以前与必须直接在内核级别进行更改相关的复杂性。
其他 IP Tables 参考文献包括
Oskar Andreasson IP Tables 教程 -- Oskar Andreasson 与 LinuxSecurity.com 讨论了他全面的 IP Tables 教程,以及如何使用该文档为你的组织构建强大的防火墙。
Hal Burgiss 介绍 Linux 安全快速入门指南 -- Hal Burgiss 撰写了两本关于保护 Linux 的权威指南,包括管理防火墙。
Netfilter 主页 -- netfilter/iptables 主页。
Linux 内核 2.4 防火墙成熟:netfilter -- 这篇 LinuxSecurity.com 文章介绍了数据包过滤的基础知识、如何开始使用 iptables 以及 Linux 最新一代防火墙中可用的新功能列表。
VPN 是一种在某些已存在的网络之上建立“虚拟”网络的方式。此虚拟网络通常被加密,并且仅将流量传递到加入该网络的某些已知实体以及从这些实体传递流量。 VPN 通常用于通过公共 Internet 将在家工作的人员连接到公司内部网络。
如果你正在运行 Linux 伪装防火墙并且需要传递 MS PPTP(微软的 VPN 点对点产品)数据包,则有一个 Linux 内核补丁可以执行此操作。 请参阅:ip-masq-vpn。
有几个 Linux VPN 解决方案可用
vpnd。 请参阅 http://sunsite.dk/vpnd/。
Free S/Wan,可在 http://www.xs4all.nl/~freeswan/ 获得
ssh 可用于构建 VPN。 有关更多信息,请参阅 VPN mini-howto。
vps(虚拟专用服务器),可在 http://www.strongcrypto.com 获得。
yawipin,可在 http://yavipin.sourceforge.net 获得
另请参阅有关 IPSEC 的部分以获取指针和更多信息。
好的,你已经检查过你的系统,并确定它是尽可能安全的,并且你已准备好将其上线。 现在你应该做一些事情,以便为入侵做好准备,这样你就可以快速禁用入侵者并恢复运行。
备份方法和存储的讨论超出了本文档的范围,但以下是一些与备份和安全相关的说明
如果你的分区上要存储的数据少于 650MB,那么将数据复制到 CD-R 是一个不错的选择(因为它很难在以后被篡改,并且如果存储得当,可以持续很长时间),你当然需要至少 650MB 的空间来制作镜像。磁带和其他可重写介质应在备份完成后立即进行写保护,然后进行验证以防止篡改。确保将备份存储在安全的脱机区域中。好的备份将确保你有一个已知的良好点来还原你的系统。
六磁带周期易于维护。 这包括每周四个磁带,偶数周周五一个磁带,奇数周周五一个磁带。 每天执行增量备份,并在相应的周五磁带上进行完整备份。 如果你对系统进行了一些特别重要的更改或添加了一些重要数据,那么最好进行完整备份。
如果发生入侵,你可以像使用tripwire一样使用你的 RPM 数据库,但前提是你也可以确定它没有被修改。 你应该将 RPM 数据库复制到软盘,并始终保持此副本脱机。 Debian 发行版可能也有类似的东西。
文件/var/lib/rpm/fileindex.rpm和/var/lib/rpm/packages.rpm很可能无法容纳在单个软盘上。 但是如果压缩,每个都应该适合单独的软盘。
现在,当你的系统受到攻击时,你可以使用命令
root# rpm -Va |
这意味着每次将新的 RPM 添加到系统时,都需要重新存档 RPM 数据库。 你将不得不决定优点与缺点。
非常重要的是,来自syslog的信息没有受到攻击。 使/var/log中的文件只能由有限数量的用户读取和写入是一个好的开始。
请务必密切关注在那里写入的内容,尤其是在auth设施下。 例如,多次登录失败可能表示有人试图闯入。
在哪里查找你的日志文件将取决于你的发行版。 在符合“Linux 文件系统标准”的 Linux 系统中,例如 Red Hat,你将要查看/var/log并检查messages, mail.log等等。
你可以通过查看你的/etc/syslog.conf文件来找出你的发行版正在记录到哪里。 这是告诉syslogd(系统日志守护进程)在哪里记录各种消息。
您可能还需要配置日志轮换脚本或守护进程,以便将日志保留更长时间,以便您有时间检查它们。 请查看logrotate最新 Red Hat 发行版上的软件包。 其他发行版可能也有类似的过程。
如果您的日志文件已被篡改,请查看是否可以确定篡改开始的时间以及似乎被篡改的内容类型。 是否存在无法解释的大量时间段? 检查备份磁带(如果您有)中未被篡改的日志文件是一个好主意。
入侵者通常会修改日志文件以掩盖他们的踪迹,但仍然应该检查日志文件是否存在奇怪的事件。您可能会注意到入侵者试图进入,或者利用程序来获取 root 帐户。 您可能会在入侵者有时间修改日志条目之前看到它们。
您还应该确保将auth设备与其他日志数据分开,包括尝试使用su切换用户的尝试、登录尝试和其他用户帐户信息。
如果可能,配置syslog将最重要的数据的副本发送到安全系统。 这将防止入侵者通过删除其登录/su/ftp/etc 尝试来掩盖他们的踪迹。 请参阅syslog.conf手册页,并参考@选项。
还有几个更高级的syslogd程序。 请查看 http://www.core-sdi.com/ssyslog/ 了解 Secure Syslog。 Secure Syslog 允许您加密 syslog 条目,并确保没有人篡改它们。
另一个syslogd具有更多功能的是 syslog-ng。 它为您在日志记录方面提供了更大的灵活性,并且还可以让您的远程 syslog 流防止篡改。
最后,当没有人阅读日志文件时,日志文件的作用会大大降低。 不时抽出一些时间来查看您的日志文件,并了解它们在正常情况下是什么样子的。 了解这一点可以帮助不寻常的事情脱颖而出。
所以您已经遵循了这里(或其他地方)的一些建议,并且已经检测到闯入? 首先要做的是保持冷静。 轻率的行动可能造成的危害比攻击者造成的危害更大。
发现正在进行的安全漏洞可能是一项紧张的工作。 您的反应可能会产生巨大的后果。
如果您看到的安全漏洞是物理漏洞,那么您很可能已经发现有人闯入您的家、办公室或实验室。 您应该通知当地的有关部门。 在实验室中,您可能已经发现有人试图打开外壳或重启机器。 根据您的权限和程序,您可以要求他们停止,或者联系您当地的安全人员。
如果您发现本地用户试图破坏您的安全性,那么首先要做的是确认他们实际上是您认为的那个人。 检查他们登录的站点。 是他们通常登录的站点吗? 不是吗? 然后使用非电子方式进行联系。 例如,给他们打电话或者走到他们的办公室/家里和他们交谈。 如果他们同意他们在线,您可以要求他们解释他们正在做什么,或者告诉他们停止这样做。 如果他们不在线,并且不知道您在说什么,那么很可能此事件需要进一步调查。 在提出任何指控之前,请调查此类事件,并掌握大量信息。
如果您检测到网络漏洞,那么首先要做的是(如果您可以)断开您的网络。 如果他们通过调制解调器连接,请拔下调制解调器电缆;如果他们通过以太网连接,请拔下以太网电缆。 这将阻止他们造成任何进一步的损害,他们可能会将其视为网络问题而不是检测。
如果您无法断开网络(如果您有一个繁忙的站点,或者您无法物理控制您的机器),那么最好的下一步是使用类似tcp_wrappers或ipfwadm来拒绝来自入侵者站点的访问。
如果您无法拒绝来自与入侵者同一站点的所有人,则必须锁定用户的帐户。 请注意,锁定帐户不是一件容易的事。 您必须记住.rhosts文件、FTP 访问和大量可能的后门。
在您完成上述操作之一(断开网络、拒绝来自其站点的访问和/或禁用其帐户)之后,您需要终止其所有用户进程并注销他们。
在接下来的几分钟内,您应该密切监视您的站点,因为攻击者会试图重新进入。 也许使用不同的帐户,和/或来自不同的网络地址。
所以您已经检测到已经发生的漏洞,或者您已经检测到并(希望)将冒犯性攻击者锁定在您的系统之外。 现在该怎么办?
如果您能够确定攻击者用来进入您的系统的手段,您应该尝试关闭该漏洞。 例如,也许您在用户登录之前看到几个 FTP 条目。 禁用 FTP 服务,并检查是否有更新的版本,或者任何列表是否知道修复方法。
检查您的所有日志文件,并访问您的安全列表和页面,查看是否有任何新的常见漏洞可以修复。 您可以在 http://www.caldera.com/tech-ref/security/ 找到 Caldera 安全修复。 Red Hat 尚未将其安全修复与错误修复分开,但其发行版勘误表可在 https://#/errata 获得
Debian 现在有一个安全邮件列表和网页。 请参阅:http://www.debian.org/security/ 获取更多信息。
如果一个供应商发布了安全更新,那么很可能大多数其他 Linux 供应商也会发布安全更新。
现在有一个 Linux 安全审计项目。 他们有条不紊地遍历所有用户空间实用程序,并寻找可能的安全漏洞和溢出。 从他们的公告
“我们正在尝试对 Linux 源代码进行系统审计,目的是像 OpenBSD 一样安全。 我们已经发现(并修复)了一些问题,但欢迎更多帮助。 该列表是未经审核的,也是一般安全讨论的有用资源。 列表地址是:security-audit@ferret.lmh.ox.ac.uk 要订阅,请发送邮件至:security-audit-subscribe@ferret.lmh.ox.ac.uk”
如果您不将攻击者锁定,他们很可能会回来。 不仅回到您的机器上,而且回到您网络上的某个地方。 如果他们正在运行数据包嗅探器,那么他们很可能可以访问其他本地机器。
首先要做的是评估损失。 哪些已被泄露? 如果您正在运行像Tripwire这样的完整性检查器,您可以使用它来执行完整性检查;它应该可以帮助您确定哪些已被泄露。 如果没有,您将不得不查看所有重要数据。
由于 Linux 系统越来越容易安装,您可以考虑保存您的配置文件,擦除您的磁盘,重新安装,然后从备份中恢复您的用户文件和配置文件。 这将确保您拥有一个新的、干净的系统。 如果您必须从受损系统中恢复文件,请特别注意您恢复的任何二进制文件,因为它们可能是入侵者放置在那里的特洛伊木马。
如果入侵者获得 root 访问权限,则应强制重新安装。 此外,您还想保留任何证据,因此在保险箱中有一个备用磁盘可能是有意义的。
然后您必须担心漏洞发生多久了,以及备份是否保存了任何损坏的工作。 稍后会详细介绍备份。
对于安全问题,定期备份是天赐之物。 如果您的系统被破坏,您可以从备份中恢复所需的数据。 当然,某些数据对攻击者也很重要,他们不仅会销毁它,还会窃取它并拥有自己的副本; 但至少您仍然拥有数据。
在恢复已被篡改的文件之前,您应该检查过去的几个备份。 入侵者可能很久以前就破坏了您的文件,并且您可能已经成功备份了被破坏的文件!
当然,备份也存在大量的安全问题。 确保将它们存储在安全的地方。 了解谁可以访问它们。 (如果攻击者可以获取您的备份,他们就可以访问您的所有数据而您永远不会知道。)
好的,您已经将入侵者锁定,并恢复了您的系统,但您还没有完全完成。 虽然大多数入侵者不太可能被抓住,但您应该报告攻击。
您应该向攻击者攻击您的系统的站点的管理员联系人报告攻击。 您可以使用whois或 Internic 数据库查找此联系人。 您可以向他们发送一封电子邮件,其中包含所有适用的日志条目以及日期和时间。 如果您发现了关于入侵者的任何其他独特之处,您也可以提及。 发送电子邮件后,您应该(如果您愿意)通过电话跟进。 如果该管理员反过来发现了您的攻击者,他们也许可以与他们来源的站点的管理员交谈,依此类推。
优秀的黑客经常使用许多中间系统,其中一些(或许多)可能甚至不知道他们已经被破坏。 试图将黑客追踪到他们的家庭系统可能很困难。 礼貌地对待您交谈的管理员可以帮助您获得他们的帮助。
您还应该通知您所属的任何安全组织(CERT 或类似组织)以及您的 Linux 系统供应商。
有很多好的网站可以提供关于 Unix 安全性的一般信息,以及关于 Linux 安全性的具体信息。 订阅一个(或多个)安全邮件列表并及时了解安全修复非常重要。 大多数列表的容量都很小,而且信息量很大。
LinuxSecurity.com 网站包含许多由 LinuxSecurity 工作人员和世界各地的人员共同编写的 Linux 和开源安全参考。
Linux 咨询观察 -- 一份综合性的新闻通讯,概述了本周宣布的安全漏洞。 它包括指向更新软件包的指针以及每个漏洞的描述。
Linux 安全周刊 -- 本文档旨在为读者提供每周最相关的 Linux 安全新闻的快速摘要。
Linux 安全讨论列表 -- 此邮件列表用于一般安全相关问题和评论。
Linux 安全新闻邮件 -- 所有新闻邮件的订阅信息。
comp.os.linux.security FAQ -- comp.os.linux.security 新闻组的常见问题及解答。
Linux 安全文档 -- 关于 Linux 和开源安全的入门信息。
CERT 是计算机应急响应小组。他们经常发布当前攻击和修复的警报。有关更多信息,请参见 ftp://ftp.cert.org。
ZEDZ (原 Replay) (http://www.zedz.net) 拥有许多安全程序的存档。由于他们在美国境外,他们不需要遵守美国的加密限制。
Matt Blaze 是 CFS 的作者和一位伟大的安全倡导者。Matt 的存档位于 ftp://ftp.research.att.com/pub/mab
tue.nl是位于荷兰的一个很棒的安全 FTP 站点。 ftp.win.tue.nl
The Hacker FAQ 是关于黑客的常见问题解答: The Hacker FAQ
COAST 存档包含大量 Unix 安全程序和信息: COAST
SuSe 安全页面: http://www.suse.de/security/
Rootshell.com 是一个很棒的站点,可以查看当前攻击者正在使用的漏洞: http://www.rootshell.com/
BUGTRAQ 发布有关安全问题的公告: BUGTRAQ 存档
CERT,计算机应急响应小组,发布关于 Unix 平台上常见攻击的公告: CERT 主页
Dan Farmer 是 SATAN 和许多其他安全工具的作者。他的主站点有一些有趣的安全调查信息,以及安全工具: http://www.trouble.org
Linux security WWW 是一个很好的 Linux 安全信息站点: Linux Security WWW
Infilsec 有一个漏洞引擎,可以告诉您哪些漏洞会影响特定平台: http://www.infilsec.com/vulnerabilities/
CIAC 发布关于常见漏洞的定期安全公告: http://ciac.llnl.gov/cgi-bin/index/bulletins
可以在 https://linuxkernel.org.cn/pub/linux/libs/pam/ 找到 Linux 可插入身份验证模块的良好起点。
Debian 项目有一个关于他们的安全修复和信息的网页。它位于 http://www.debian.com/security/。
由 Lincoln Stein 撰写的 WWW 安全 FAQ 是一个很好的 Web 安全参考。可以在 http://www.w3.org/Security/Faq/www-security-faq.html 找到它。
Bugtraq: 要订阅 bugtraq,请发送邮件至 listserv@netspace.org,邮件正文包含消息 subscribe bugtraq。(有关存档,请参见上面的链接)。
CIAC: 发送电子邮件至 majordomo@tholia.llnl.gov。在邮件正文(而非主题)中放入(以下之一或两者兼有):subscribe ciac-bulletin
Red Hat 有许多邮件列表,其中最重要的是 redhat-announce 列表。您可以尽快阅读关于安全(和其他)修复程序的信息。发送电子邮件至 redhat-announce-list-request@redhat.com,主题为 Subscribe。有关更多信息和存档,请参见 https://listman.redhat.com/mailman/listinfo/。
Debian 项目有一个安全邮件列表,其中涵盖了他们的安全修复程序。有关更多信息,请参见 http://www.debian.com/security/。
有很多不错的安全书籍。本节列出其中一些。除了特定于安全性的书籍外,许多关于系统管理的书籍也涵盖了安全性。
构建 Internet 防火墙 作者 D. Brent Chapman 和 Elizabeth D. Zwicky,第一版,1995 年 9 月,ISBN:1-56592-124-0
实用 UNIX 和 Internet 安全,第二版,作者 Simson Garfinkel 和 Gene Spafford,第二版,1996 年 4 月,ISBN:1-56592-148-8
计算机安全基础知识 作者 Deborah Russell 和 G.T. Gangemi, Sr.,第一版,1991 年 7 月,ISBN:0-937175-71-4
Linux 网络管理员指南 作者 Olaf Kirch,第一版,1995 年 1 月,ISBN:1-56592-087-2
PGP:完美隐私 作者 Simson Garfinkel,第一版,1994 年 12 月,ISBN:1-56592-098-8
计算机犯罪 犯罪斗士手册 作者 David Icove、Karl Seger 和 William VonStorch(咨询编辑 Eugene H. Spafford),第一版,1995 年 8 月,ISBN:1-56592-086-4
Linux 安全 作者 John S. Flowers,New Riders;ISBN:0735700354,1999 年 3 月
最高 Linux 安全:黑客保护您的 Linux 服务器和网络的指南,匿名,平装本 - 829 页,Sams;ISBN:0672313413,1999 年 7 月
入侵检测 作者 Terry Escamilla,平装本 - 416 页(1998 年 9 月),John Wiley and Sons;ISBN:0471290009
打击计算机犯罪,Donn Parker,平装本 - 526 页(1998 年 9 月),John Wiley and Sons;ISBN:0471163783
下面包括计算机安全中最常用的几个术语。可以在 LinuxSecurity.com 词典中找到全面的计算机安全术语词典。
身份验证: 确认接收到的数据与发送的数据相同,并且声称的发送者实际上是实际发送者的过程。
堡垒主机: 必须高度安全的计算机系统,因为它容易受到攻击,通常是因为它暴露于 Internet 并且是内部网络用户的主要联系点。它得名于中世纪城堡外墙上高度强化的项目。堡垒俯瞰着关键的防御区域,通常拥有坚固的墙壁、额外的部队空间以及偶尔用于阻止攻击者的有用的热油桶。
缓冲区溢出: 常见的编码风格是永远不分配足够大的缓冲区,并且不检查溢出。当这些缓冲区溢出时,可以欺骗执行程序(守护程序或 set-uid 程序)来做一些其他事情。通常,这通过覆盖堆栈上的函数返回地址以指向另一个位置来实现。
拒绝服务: 一种攻击,它消耗您计算机上的资源来做它不应该做的事情,从而阻止您的网络资源用于合法目的的正常使用。
双宿主机: 具有至少两个网络接口的通用计算机系统。
防火墙: 限制受保护网络和 Internet 之间或网络其他集合之间的访问的组件或一组组件。
主机: 连接到网络的计算机系统。
IP 欺骗: IP 欺骗是一种由几个组件组成的复杂技术攻击。它是一种安全漏洞,通过欺骗信任关系中的计算机,使其认为您是您实际上不是的人来工作。daemon9、route 和 infinity 在 Phrack Magazine 的第七卷第四十八期中写了一篇广泛的论文。
不可否认性: 接收者能够证明某些数据的发送者确实发送了数据,即使发送者稍后可能否认曾经发送过该数据的属性。
数据包: Internet 上通信的基本单元。
数据包过滤: 设备采取的选择性控制进出网络的数据流的动作。数据包过滤器允许或阻止数据包,通常在将它们从一个网络路由到另一个网络时(最常见的是从 Internet 到内部网络,反之亦然)。要完成数据包过滤,您可以设置规则,指定允许哪些类型的数据包(那些进出特定 IP 地址或端口的数据包)以及阻止哪些类型的数据包。
外围网络: 为了提供额外的安全层,在受保护的网络和外部网络之间添加的网络。外围网络有时称为 DMZ。
代理服务器: 代表内部客户端处理外部服务器的程序。代理客户端与代理服务器通信,代理服务器将批准的客户端请求转发到实际服务器,并将答案转发回客户端。
超级用户: 的非正式名称root.
将驱动程序支持直接编译到内核中,而不是将其制作为模块,是否更安全?
答:有些人认为最好禁用使用模块加载设备驱动程序的能力,因为入侵者可能会加载特洛伊木马模块或可能影响系统安全的模块。
但是,要加载模块,您必须是 root。模块对象文件也只能由 root 写入。这意味着入侵者需要 root 权限才能插入模块。如果入侵者获得 root 权限,那么需要担心的不仅仅是他是否会加载模块。
模块用于动态加载对可能不经常使用的特定设备的支持。在服务器机器或防火墙上,这种情况不太可能发生。因此,将支持直接编译到充当服务器的机器的内核中更有意义。模块也比直接在内核中编译的支持慢。
为什么从远程机器以 root 身份登录总是失败?
答:请参见第 4.2 节。这样做是为了防止远程用户尝试通过以下方式连接telnet到您的机器root,这是一个严重的安全漏洞,因为 root 密码将在网络上以明文形式传输。不要忘记:潜在的入侵者有足够的时间,并且可以运行自动化程序来查找您的密码。此外,这样做是为了保留谁登录的清晰记录,而不仅仅是 root。
如何在我的 Linux 机器上启用影子密码?
答案
要启用影子密码,请运行pwconv作为 root,并且/etc/shadow现在应该存在,并且被应用程序使用。如果您使用的是 RH 4.2 或更高版本,PAM 模块将自动适应从使用 normal/etc/passwd到影子密码的更改,而无需任何其他更改。
背景知识:影子密码是一种将密码存储在标准文件之外的机制。/etc/passwd这种机制有几个优点。首先,影子文件/etc/shadow只能由 root 用户读取,不像/etc/passwd必须保持所有人可读。另一个优点是,作为管理员,您可以在不让所有人知道其他用户帐户状态的情况下启用或禁用帐户。
文件给 root。/etc/passwd文件然后用于存储用户和组名,由程序如/bin/ls用于将用户 ID 映射到目录列表中正确的用户名。
文件给 root。/etc/shadow文件然后只包含用户名和密码,以及可能的帐户信息,如帐户过期时间等。
要启用影子密码,请运行pwconv作为 root,并且/etc/shadow现在应该存在,并被应用程序使用。因为您正在使用 RH 4.2 或更高版本,PAM 模块将自动适应从使用普通/etc/passwd到影子密码的更改,而无需任何其他更改。
的更改。既然您对保护密码感兴趣,也许您也对生成好的密码感兴趣。为此,您可以使用pam_cracklib模块,它是 PAM 的一部分。它使用 Crack 库来测试您的密码,以帮助您判断它是否容易被密码破解程序猜到。
如何启用 Apache SSL 扩展?
答案
构建、测试并安装它!
获取 Apache 源代码
从 这里 获取 Apache SSLeay 扩展
将其解压缩到 Apache 源代码目录中,并按照 README 中的说明修补 Apache。
配置并构建它。
您也可以尝试 ZEDZ net,它有许多预构建的软件包,并且位于美国境外。
如何操作用户帐户,同时保持安全性?
答案:大多数发行版包含大量工具来更改用户帐户的属性。
文件给 root。pwconv和unpwconv程序可用于在影子密码和非影子密码之间进行转换。
文件给 root。pwck和grpck程序可用于验证passwd和group文件的正确组织。
文件给 root。useradd, usermod和userdel程序可用于添加、删除和修改用户帐户。groupadd, groupmod和groupdel程序将对组执行相同的操作。
可以使用gpasswd.
创建组密码。所有这些程序都是“影子感知”的——也就是说,如果您启用影子,它们将使用/etc/shadow来获取密码信息,否则它们不会。
有关更多信息,请参阅各自的 man 手册。
如何使用 Apache 保护特定 HTML 文档的密码?
我敢打赌您不知道 http://www.apacheweek.org,是吗?
您可以在 http://www.apacheweek.com/features/userauth 找到有关用户身份验证的信息,以及来自 https://apache.ac.cn/docs/misc/security_tips.html 的其他 Web 服务器安全提示。
通过订阅安全警报邮件列表并保持最新状态,您可以为保护您的机器做很多事情。如果您关注您的日志文件并定期运行类似tripwire的内容,您可以做更多的事情。
在家庭机器上维护合理的计算机安全级别并不困难。在商业机器上需要付出更多努力,但 Linux 确实可以成为一个安全的平台。由于 Linux 开发的性质,安全修复程序通常比商业操作系统更快地发布,这使得 Linux 在需要安全性的情况下成为理想的平台。
此处的信息来自许多来源。感谢以下间接或直接做出贡献的人:
Rob Riggs rob@DevilsThumb.com |
S. Coffin scoffin@netcom.com
Viktor Przebinda viktor@CRYSTAL.MATH.ou.edu
Roelof Osinga roelof@eboa.com
Kyle Hasselbacher kyle@carefree.quux.soltc.net
David S. Jackson dsj@dsj.net
Todd G. Ruskell ruskell@boulder.nist.gov
Rogier Wolff R.E.Wolff@BitWizard.nl
Antonomasia ant@notatla.demon.co.uk
Nic Bellamy sky@wibble.net
Eric Hanchrow offby1@blarg.net
Robert J. Bergerrberger@ibd.com
Ulrich Alpers lurchi@cdrom.uni-stuttgart.de
David Noha dave@c-c-s.com
Pavel Epifanov. epv@ibm.net
Joe Germuska. joe@germuska.com
Franklin S. Werren fswerren@bagpipes.net
Paul Rusty Russell <Paul.Russell@rustcorp.com.au>
Christine Gaunt <cgaunt@umich.edu>
lin bhewitt@refmntutl01.afsc.noaa.gov
A. Steinmetz astmail@yahoo.com
Jun Morimoto morimoto@xantia.citroen.org
Xiaotian Sun sunx@newton.me.berkeley.edu
Eric Hanchrow offby1@blarg.net
Camille Begnis camille@mandrakesoft.com
Neil D neild@sympatico.ca
Michael Tandy Michael.Tandy@BTInternet.com
Tony Foiani tkil@scrye.com
Matt Johnston mattj@flashmail.com
Geoff Billin gbillin@turbonet.com
Hal Burgiss hburgiss@bellsouth.net
Ian Macdonald ian@linuxcare.com
M.Kiesel m.kiesel@iname.com
Mario Kratzer kratzer@mathematik.uni-marburg.de
Othmar Pasteka pasteka@kabsi.at
Robert M rom@romab.com
Cinnamon Lowe clowe@cinci.rr.com
Rob McMeekin blind_mordecai@yahoo.com
Gunnar Ritter g-r@bigfoot.de
Frank Lichtenheldfrank@lichtenheld.de
Björn Lotzblotz@suse.de
Othon Marcelo Nunes Batistaothonb@superig.com.br
以下人员已将此 HOWTO 翻译成各种其他语言!
特别感谢他们所有人帮助传播 Linux 的话语……
波兰语:Ziemek Borowski ziembor@FAQ-bot.ZiemBor.Waw.PL
日语:FUJIWARA Teruyoshi fjwr@mtj.biglobe.ne.jp
印度尼西亚语:Tedi Heriyanto 22941219@students.ukdw.ac.id
韩语:Bume Chang Boxcar0001@aol.com
西班牙语:Juan Carlos Fernandez piwiman@visionnetware.com
荷兰语:"Nine Matthijssen" nine@matthijssen.nl
挪威语:ketil@vestby.com ketil@vestby.com
土耳其语:tufan karadere tufank@metu.edu.tr