布置分区时要记住的一件事是故障模式。通常,该问题的形式为:“当分区x填满时会发生什么?” 亲爱的voretaq7提出了这种情况,这完全/
导致了许多难以诊断的问题。让我们看一些更具体的情况。
如果您的分区存储日志已满怎么办? 您会丢失审核/报告数据,有时攻击者会使用它们来隐藏其活动。在某些情况下,如果系统无法记录新用户的登录事件,则该系统将不对其进行身份验证。
如果基于RPM的系统/var
已满,会发生什么? 程序包管理器将不会安装或更新程序包,并且根据您的配置,可能会静默失败。
填充分区很容易,尤其是当用户能够写入分区时。为了娱乐起见,请运行以下命令,并查看您可以很快地创建一个很大的文件:cat /dev/zero > zerofile
。
它不仅可以填充分区,而且当您将位置放置在不同的安装点时,您还可以自定义其安装选项。
/dev/
不安装时会发生什么noexec
? 由于/dev
通常假定由OS维护并且仅包含设备,因此经常(有时仍然)用来隐藏恶意程序。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
切割以帮助缓冲它们,避免资源耗尽。此外,当审计的日志存储开始填满时,它们可以执行一些特殊的操作(通常在更高安全性的环境中)。通过将其放在其分区上,此资源检测性能会更好。
更加冗长,引用起来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并避免分配整个磁盘。如果需要,可以轻松扩展或添加分区。