chroot "jail" - 它是什么以及如何使用它?

chroot "jail" - 它是什么以及如何使用它?

我听说/读过很多关于 linux 下 chroot Jail 的内容,但从未使用过它(我日常使用 Fedora),那么什么是 chroot “jail”?我何时以及为什么可以使用/不使用它,还有什么我应该知道的吗?我该如何创建一个?

答案1

chroot 监狱是一种将进程及其子进程与系统其他部分隔离的方法。它应该只用于不以 root 身份运行的进程,因为 root 用户可以很容易地越狱。

这个想法是创建一个目录树,在其中复制或链接进程运行所需的所有系统文件。然后,您使用chroot()系统调用将根目录更改为该新树的根目录,并启动在该 chroot 环境中运行的进程。由于它实际上无法引用修改后的根目录之外的路径,因此它无法在这些位置恶意执行操作(读/写等)。

在 Linux 上,使用绑定挂载是填充 chroot 树的好方法。例如,使用它,您可以拉入类似/lib和的文件夹,/usr/lib但不拉入。/usr只需将您想要的目录树绑定到您在监狱目录中创建的目录即可。

答案2

“chroot监狱”是一个用词不当,应该真正消失,但人们仍在使用它。chroot是一个工具,可让您将文件系统上的目录模拟为文件系统的根。这意味着您可以拥有如下文件夹结构:

-- foo
    -- bar
    -- baz
-- bazz

如果你chroot foo这样做ls /,你会看到:

-- bar
-- baz

ls(以及您运行的任何其他工具)而言,这些是文件系统上唯一的目录。 “监狱”一词用词不当的原因chroot并不是为了力量留在模拟文件系统中的程序;知道自己位于 chroot“监狱”中的程序可以相当容易地逃脱,因此您不应该将其用作chroot安全措施来阻止程序修改模拟文件系统之外的文件

答案3

基本上,您只是更改环境的根目录。所以

/

变成

/some-jail/ (or whatever directory you want)

当应用程序访问 / 时,它们将获得 /some-jail/。此外,应用程序无法突破 /some-jail/,因此您知道它不会访问您计算机上的任何其他内容。这是一种非常简单的方式,可以说“嘿,您只能访问我为您提供的这些内容,而您无法访问系统上的其他任何内容”。

答案4

chroot 很容易理解为一个更现代的术语虚拟环境。该进程获取一个新的虚拟根目录来建立路径可见性。这主要是一种方便简单的方法来控制进程可以引用哪些文件和库。这对于隔离实际文件系统上可能具有不同版本的事物非常有帮助。

您还可以将其视为文件系统中可见内容的一种过滤器。

重要的是还要考虑在 chroot 之后更改当前工作目录,以避免出现意外的文件系统视图。

一个令人误解的事情是“监狱”一词。历史上曾使用 chroot 来模拟 FreeBSD 所谓的监狱(其他人可能称之为沙箱)。为此,还需要自行降低进程的权限。这不是一个很好的安全模型。

一个常见的用例是编译需要引用特定工具链或一组库、文件和工具的软件,这些工具链是系统实际拥有的子集。

相关内容