it-swarm.cn

chroot“ jail”-它是什么,怎么使用?

我听说过很多关于linux下chroot监狱的信息,但从未使用过(我每天都使用Fedora),那么chroot“ jail”是什么?什么时候以及为什么要使用/不使用它,还有什么我应该知道的吗?我将如何创建一个?

107
user119

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

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

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

97
Ben Combee

“ chroot监狱”是一个错误的名词,应该消失,但人们一直在使用它。 chroot是一种工具,可用于模拟文件系统上的目录作为文件系统的根目录。这意味着您可以具有以下文件夹结构:

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

如果你 chroot fools /, 你会看到的:

-- bar
-- baz

ls(以及您运行的任何其他工具)而言,这些是文件系统上的唯一目录。 “ jail”是不正确的原因是chroot并非旨在force驻留在该模拟文件系统中的程序;知道它在chroot“ jail”中的程序可以很容易地逃脱,因此您不应使用chroot作为一种安全措施,以防止程序修改模拟文件系统之外的文件

53
Michael Mrozek

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

/

变成

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

当应用程序访问/时,他们将得到/ some-jail /。另外,该应用程序无法脱离/ some-jail /,因此您将知道它不会访问您计算机上的其他任何内容。这是一种非常简单的说法:“嘿,您只能访问我给您的这些内容,而您不能访问系统上的其他任何内容。

12
jacksonh

“什么时候以及为什么要使用它?”

一种用途是测试脚本(引导路径是否为绝对路径)或运行您可能希望截取并记录的命令(可能不进行操作)的脚本(在不希望它们出现的环境中)实际在您的运行环境上运行。

例如,我有一个运行Linux的嵌入式设备,我想检查一些bash的运行情况,而不a)在实际设备上运行它(因为我的台式机上有更好的工具,并且不想对设备进行砌砖)b)运行它在我的桌面上是真实的(因为我不想弄乱我的桌面系统)

此外,您还可以发现使用了哪些命令或其他脚本文件,因为每当尝试运行“ chroot监狱”中不存在的命令或Shell脚本时,运行都会错误退出。

(当然,要想全力以赴,您可以在QEMU或Docker或VM内运行,但这将涉及创建VM映像等。-更多工作)

6
MikeW