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

135 chroot

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

小智 126

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

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

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

  • 你的回答很棒。不过有一点需要提一下,chroot 不是一个安全的机制(如果一个进程成为 root 用户,它可能会跳出监狱,有时即使没有)。真正的 jails 可以用 freebsd jails 等来强制执行。看到这个 http://en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies (13认同)
  • 查看 [firejail](https://firejail.wordpress.com/) 以获取使用所有 Linux 命名空间的完整 shell。有 deb 和 rpm 包可用。通常,我建议使用内核 3.18 或更高版本,因为 [无法安装新软件或进行用户管理](https://firejail.wordpress.com/support/known-problems/) 的已知问题当 `firejail` 运行时。 (4认同)
  • Gentoo 安装过程使用 chroot,因此您可以在安装 GRUB 和 Linux 内核等之前设置新操作系统。 (3认同)

Mic*_*zek 59

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

-- foo
    -- bar
    -- baz
-- bazz
Run Code Online (Sandbox Code Playgroud)

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

-- bar
-- baz
Run Code Online (Sandbox Code Playgroud)

ls(以及您运行的任何其他工具)而言,这些是文件系统上唯一的目录。“jail”用词不当的原因chroot并不是要强制程序停留在模拟文件系统中;知道它在 chroot“监狱”中的程序可以很容易地逃脱,因此您不应将其chroot用作防止程序修改模拟文件系统之外的文件的安全措施

  • 有一个如何逃离 `chroot`“监狱”的例子会很有帮助。[我见过的案例](http://pentestmonkey.net/blog/chroot-breakout-perl) 需要升级到 root 权限。阻止进程将自身升级为 root 权限是否困难? (22认同)
  • 它仍然是“监禁”,所以“监狱”是一个很好的速记。“三级收容领域”会更好吗?! (7认同)
  • 该术语来自 FreeBSD 监狱。Jails 建立在 chroot 上。Jails 旨在解决 `chroot` 没有解决的安全问题。出于这个原因,人们经常将 `chroot` 和 `jails` 混为一谈来表示相同的意思。他们没有。据说“监狱”一词是比尔·切斯维克(Bill Cheswick)在建立蜜罐以捕获破解者时创造的:http://csrc.nist.gov/publications/secpubs/berferd.pdf (4认同)

jac*_*onh 13

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

/
Run Code Online (Sandbox Code Playgroud)

变成

/some-jail/ (or whatever directory you want)
Run Code Online (Sandbox Code Playgroud)

当应用程序访问 / 时,他们会得到 /some-jail/。此外,该应用程序无法脱离 /some-jail/,因此您知道它不会访问您机器上的任何其他内容。这是一种非常简单的表达方式,可以说‘嘿,您只能访问我提供给您的这些东西,而您无法访问系统上的任何其他内容。


Mik*_*keW 6

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

一种用途是测试生成绝对路径引用的脚本(启动时间和其他),或者运行您可能想要拦截和记录的命令(并且可能不操作它们)-在您不希望这些命令执行的环境中实际运行在你的运行环境中。

例如,我有一个运行 Linux 的嵌入式设备,我想检查一些 bash 的运行情况,而不是 a) 在真实设备上运行它(因为我的桌面上有更好的工具并且不想让设备变砖)b) 运行它在我的桌面上是真实的(因为我不想我的桌面系统搞砸了)

此外,您还可以发现使用了哪些命令或其他脚本文件,因为只要尝试运行“chroot jail”中不存在的命令或 shell 脚本,运行就会退出并显示错误。

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