我最近买了一个上网本来玩,我想安装 Kali Linux,这样我就可以开始学习网络安全和漏洞利用开发了。我想用它来尽可能多地了解安全性。
对 linux 机器进行分区以使其最能抵抗安全风险的最佳方法是什么?包含Linux中所有文件夹的单个分区真的那么糟糕吗?
如果您可以详细了解可能的威胁,则可以加分。我想尽可能多地学习。
我最近买了一个上网本来玩,我想安装 Kali Linux,这样我就可以开始学习网络安全和漏洞利用开发了。我想用它来尽可能多地了解安全性。
对 linux 机器进行分区以使其最能抵抗安全风险的最佳方法是什么?包含Linux中所有文件夹的单个分区真的那么糟糕吗?
如果您可以详细了解可能的威胁,则可以加分。我想尽可能多地学习。
请记住信息安全的三位一体:C(保密)、I(完整性)和 A(可用性)。因此,当我们谈论配置强化时,您需要考虑您正在使用的技术、受保护的信息、信息在组织内的使用方式以及威胁。根据这些答案,可能还有其他答案,您可以开始确定哪些租户最重要以及应该关注什么。
在文件系统级别,您通常对完整性和可用性最感兴趣。信息的机密性可能应该在不同的层处理,但是您如何放置我们的文件系统以及如何使用它们应该确保信息既值得信赖,又在需要时始终可用。
布置分区时要记住的一件事是故障模式。通常,这个问题的形式是:“当分区x填满时会发生什么?”
如果您存储操作系统的分区已满,会发生什么? 装满时有时会发生奇怪的事情。/
有时系统会挂起。有时不会发生新的登录会话。有时系统拒绝启动。
在所有故障模式中,这种模式是最难严格描述的,因为它的症状最有可能根据操作系统、内核版本、配置等而改变。一些文件系统,特别是 ext 行,在文件系统时会保留一定的空间被建造。这个保留的空间只能由 root 用户使用,旨在让系统管理员仍然可以操作和清理空间。
如果您的分区存储日志已满,会发生什么? 您会丢失审计/报告数据,并且有时会被攻击者用来隐藏他们的活动。在某些情况下,如果无法记录新用户的登录事件,您的系统将不会对新用户进行身份验证。
当基于 RPM 的系统/var
已满时会发生什么? 包管理器不会安装或更新包,并且根据您的配置,可能会静默失败。
填充分区很容易,尤其是当用户能够写入时。为了好玩,运行这个命令,看看你能多快制作一个相当大的文件:cat /dev/zero > zerofile
.
它也不仅仅是填充分区,当您将位置放置在不同的挂载点上时,您还可以自定义它们的挂载选项。
/dev/
不安装时会发生什么noexec
? 由于/dev
通常假定由操作系统维护并且仅包含设备,因此它经常(有时仍然是)用于隐藏恶意程序。离开noexec
允许您启动存储在那里的二进制文件。
由于所有这些原因以及更多原因,许多强化指南将讨论分区作为要执行的首要步骤之一。事实上,如果您正在构建一个新服务器,如何对磁盘进行分区几乎是您必须决定的第一件事,而且通常是最难更改的。有一个名为Internet 安全中心的组织,它制作了大量易于阅读的配置指南。您可能会找到适用于您的特定操作系统的指南,并查看他们可能会说的任何细节。
如果我们看一下 RedHat Enterprise Linux 6,推荐的分区方案是这样的:
# Mount point Mount options
/tmp nodev,nosuid,noexec
/var
/var/tmp bind (/tmp)
/var/log
/var/log/audit
/home nodev
/dev/shm nodev,nosuid,noexec
所有这些更改背后的原则是防止它们相互影响和/或限制可以在特定分区上执行的操作。以选项/tmp
为例。这意味着不能在那里创建任何设备节点,不能从那里执行任何程序,并且不能在任何东西上设置 set-uid 位。就其本质而言,/tmp
它几乎总是全局可写的,并且通常是一种仅存在于内存中的特殊类型的文件系统。这意味着攻击者可以使用它作为一个简单的中转点来删除和执行恶意代码,然后崩溃(或简单地重新启动)系统将清除所有证据。由于 的功能/tmp
不需要任何功能,我们可以轻松禁用这些功能并防止出现这种情况。
日志存储位置,/var/log
并被/var/log/audit
分割以帮助缓冲它们免受资源枯竭的影响。此外,auditd 可以在其日志存储开始填满时执行一些特殊操作(通常在更高安全性环境中)。通过将其放置在其分区上,此资源检测性能更好。
更详细地说,和 quote mount(8)
,这正是上面使用的选项:
noexec不允许在已挂载的文件系统上直接执行任何二进制文件。(直到最近,仍然可以使用 /lib/ld*.so /mnt/binary 之类的命令运行二进制文件。自 Linux 2.4.25 / 2.6.0 以来,这个技巧就失败了。)
nodev 不要解释文件系统上的字符或块特殊设备。
nosuid不允许 set-user-identifier 或 set-group-identifier 位生效。(这看起来很安全,但实际上如果您安装了 suidperl(1) 则相当不安全。)
从安全的角度来看,这些都是非常好的选择,因为它们允许您对文件系统本身进行保护。在高度安全的环境中,您甚至可以将noexec
选项添加到/home
. 它会让你的标准用户更难编写用于处理数据的 shell 脚本,比如分析日志文件,但它也会阻止他们执行提升权限的二进制文件。
另外,请记住 root 用户的默认主目录是/root
. 这意味着它将在/
文件系统中,而不是在/home
.
根据系统工作负载,您为每个分区提供的确切数量可能会有很大差异。我管理的典型服务器很少需要人员交互,因此/home
分区根本不需要很大。这同样适用,/var
因为它倾向于存储经常创建和删除的临时数据。但是,Web 服务器通常/var/www
用作其游乐场,这意味着要么需要位于单独的分区上,要么/var/
需要变大。
在过去,我曾推荐以下内容作为基准。
# Mount Point Min Size (MB) Max Size (MB)
/ 4000 8000
/home 1000 4000
/tmp 1000 2000
/var 2000 4000
swap 1000 2000
/var/log/audit 250
这些需要根据系统的目的以及您的环境的运行方式进行审查和调整。我还建议使用 LVM 并反对分配整个磁盘。如果需要,这将允许您轻松扩展或添加分区。
分成一个或几个分区并不是真正的安全问题,而是可靠性问题。这个想法是,如果您的一个分区崩溃,那么您会丢失该分区的内容,但其他分区很好。此外,如果您填满该分区,则其他分区不受影响。每个分区都可以有自己的文件系统,并且并非所有类型的文件系统在各种上下文中的性能方面都是等效的(尽管大多数文件系统在大多数情况下都会彼此一样好)。在某些 PC 上,由于这种架构的历史特性,启动过程可能无法访问比磁盘的前几 GB 更远的地方,这太可怕了,无法在此回忆;因此,/boot
通常最好将其设置为大小有限的单独分区,并位于磁盘的第一个位置。
如果你想应用分区级别的加密,那么如果你加密太多,你可能会遇到麻烦——也就是说,进行解密的代码必须位于所述分区之外。这在很大程度上取决于实际的加密产品(有些可以在引导加载程序中嵌入解密代码)。
请注意,您将磁盘分成的分区越多,整个事情变得越不灵活。当一个分区填满时,即使其他分区有空闲空间,它也会保持这种状态(LVM可以帮助解决这个问题,所以当操作系统安装程序询问您是否要使用 LVM 时,您可能想说“是”) . 您创建的分区越多,这个问题就越可能和困难。
简单而安全的方法是让操作系统安装程序选择它认为最好的分区。在您对这意味着什么有一些确切的知识和经验之前,不要继续更改分区大小。不要忘记定期备份。预计几个月后,您将需要重新安装操作系统以“正确执行”,这不一定是一个坏主意,所以不要担心。这是一个学习工具,而不是一个将投入生产的服务器。
到目前为止,我会以与其他响应者不同的方式看待这一点:如果您正在查看一堆漏洞利用,那么所有威胁都是可能的,并且尽可能多地将系统沙箱化似乎是一种有用的预防措施。Xen 是一种简单的方法。它可以使用另一个文件系统上的磁盘映像,但是如果您知道要使用它,我建议您保留单独的磁盘分区(并确保它们不会自动挂载到您的 Dom0 上)。
我不知道 Kali 作为 Xen Dom0 的表现如何。Ubuntu 至少似乎有问题。您可能会考虑为XenServer或其他专门的 Xen Dom0 构建留出空间。[编辑:我不确定现在上网本是什么样的,但我猜 XenServer 并没有真正针对它们......也许其他一些更简单的发行版可以很好地与 Xen 作为 Dom0 配合使用。如果查看漏洞利用是一项不太常见的任务,您可能能够设置独立运行或作为 DomU 运行的 Kali 安装。]
在 BSD 系统上,我听说过涉及分区以尽可能多地以只读方式挂载和使用不可变标志的强化方法。我假设至少有一些 Linux 系统可以进行类似的设置,但是看起来 Kali 是基于 Debian 的,我的感觉是你不能在 Debian 上真正做到这一点[编辑:除非你安装一个可写的 FS它,随着时间的推移维护起来仍然很尴尬]。在任何情况下,我都不建议将此用于通用机器,并且仅在您对可能使用分区的所有方式更普遍感兴趣的情况下才提出它。出于您的目的,将威胁放在您可以轻松删除和重新创建的系统上。
这些回复中有很多很好的信息,但我不确定它们是否真的满足您的具体要求。鉴于您声明的目标是学习,并且您计划使用该系统进行实验和使用 Kali Linux 来增加对安全相关问题的理解,我的目标是一个快速且易于重新安装的系统,而不是一个经过强化的系统或安全。一旦您获得了系统的知识和经验,您将能够更好地决定哪种配置最能满足您的需求并最适合您的工作方式等。
有些事情需要注意,其他人没有提到。
许多关于分区的建议已经部分过时,并且可能与一些用于加速引导过程的现代技术相冲突,例如预链接和预加载或缓存。
在您真正了解如何使用系统以及如何配置该系统之前,几乎不可能获得正确的分区大小。正如另一位用户所指出的,如果 Kali 使用 /opt 例如,您必须创建一个 opt 分区,或者 /opt 将使用分配给 / 的空间。如果您不知道它是否存在,或者您不知道它的用途,那么您无法判断分区的大小。
您对学习的要求与您对生产渗透测试或安全审计/调查系统的要求非常不同。学习时,您通常需要做的是快速轻松地将系统恢复到已知的良好(出厂默认)状态。出于这个原因,我经常使用虚拟图像,但这在上网本上并不可行。对于生产、渗透测试、安全审计等系统,我想要一些受到保护的东西。我可能会将 Kali 设置在具有一些专用(和可擦除)存储支持的只读媒体上。这将增加我的信心,即我的系统在恶劣的环境中使用时不会被修改或更改,并且我可以增加信心,每当我重新启动系统时,它都会返回到已知配置等。
我想你会发现 Kali Linux 一开始是一个相当大的挑战。说你要通过使用 Kali 来学习安全有点像说你要通过乘坐战斗机来学习飞行。您会发现这有多容易取决于您的 Linux 经验和您对基于 Debian 的系统的熟悉程度。我只需要一个标准安装,只需一个可以轻松擦除和重新安装的分区。稍后,根据您的发现和决定,您可以考虑更强大和更安全的设置。还要记住,Kali 实际上是相对较新的,并且仍然有自己的初期问题。坚持使用默认安装将有助于减少在 Kali 设置中触发错误的可能性,这在您学习时可能会让人感到困惑。底线,保持简单开始。