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


99

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

chroot 

这里的答案似乎缺少“我如何使用它的类别?” :(
亚历山大·米尔斯

Answers:


87

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

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

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


10
您的回答很好。值得一提的是,chroot并不是一种安全的机制(如果进程成为root用户,有时甚至不成为进程,它都可以脱离监狱)。真正的监狱可以通过freebsd监狱等来执行。参见此en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b 2010年

3
Gentoo的安装过程中使用一个chroot,所以你可以设置你的新操作系统已安装GRUB和Linux内核等前
克里斯-黄-利弗

3
看一看使用所有Linux名称空间的完整越狱shell的firejail。有可用的deb和rpm软件包。通常,由于已知问题(运行时无法安装新软件或执行用户管理),我通常建议使用内核3.18或更高版本firejail
CivFan

很好的答案!-尽管有些基本示例很高兴看到。
加布里埃尔·斯台普斯

chroot监狱下的用户可以调用/bin由root用户安装的二进制文件吗?@Ben Combee
alper

50

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

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

如果您chroot foo这样做ls /,您将看到:

-- bar
-- baz

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


16
举一个如何逃脱chroot“监狱” 的例子会很有帮助。我所见情况需要升级为root特权。阻止进程升级为root权限难吗?
CivFan

4
它仍然是“限制”,因此“监狱”是一个很好的简写。“ 3级收容区域”会更好吗?
MikeW

4
这个术语来自FreeBSD监狱。Jails建立在chroot上。Jails的目的chroot不是解决安全性问题。出于这个原因,人们往往混淆chrootjails意味着同样的事情。他们没有。据说“监狱”一词是由比尔·切斯威克(Bill Cheswick)设置蜜罐来抓饼干时创造的:csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK

那么,您的意思是,chroot jail我看来,这不是一个好主意吗?
Shafizadeh

10

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

/

变成

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

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


6

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

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.