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

评论

这里的答案似乎缺少“我如何使用它的类别”? :(

#1 楼

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

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

在Linux上,使用绑定安装是一种很好的方法填充chroot树。使用该功能,您可以拉入/lib/usr/lib之类的文件夹,而不必拉入/usr。只需将您想要的目录树绑定到在jail目录中创建的目录即可。

评论


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

–nc3b
2010年8月10日在20:30

Gentoo安装过程使用chroot,因此您可以在安装GRUB和Linux内核等之前设置新的操作系统。

–克里斯·黄·利弗(Chris Huang-Leaver)
2010年8月10日在20:38

看看使用所有Linux名称空间的完整监禁shell的firejail。有可用的deb和rpm软件包。通常,我建议使用3.18或更高版本的内核,因为已知的问题是在运行firejail时无法安装新软件或执行用户管理。

– CivFan
16年6月17日在16:02



很好的答案!-尽管有些基本示例很高兴看到。

–加百利·斯台普斯
18年1月30日在6:11

chroot监狱下的用户能否调用root用户安装的/ bin下的二进制文件? @本·康比

–警报
18年6月3日,14:32



#2 楼

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

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


如果执行chroot foo并执行ls /,则会看到:

-- bar
-- baz

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

评论


举个如何逃脱chroot“ jail”的示例将很有帮助。我所见的情况需要升级为root特权。阻止进程升级为root权限难吗?

– CivFan
16年6月17日在16:09



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

– MikeW
16年10月10日在10:58

这个术语来自FreeBSD监狱。 Jails建立在chroot上。 Jails旨在解决chroot不会解决的安全性问题。因此,人们经常将chroot和jail混在一起来表示同一意思。他们没有。据说“监狱”一词是由比尔·切斯威克(Bill Cheswick)设置蜜罐来抓饼干时创造的:csrc.nist.gov/publications/secpubs/berferd.pdf

–BugHunterUK
17年6月13日在19:03

那么,在我看来,使用chroot监狱不是一个好主意吗?

– Shafizadeh
18年3月12日在10:07

#3 楼

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

/


成为

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


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

#4 楼

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

一种用途是测试脚本(引导时间或其他时间)中的绝对路径引用,或者运行您可能希望截取和记录的命令(以及也许不操作)-在您不希望这些命令在运行的环境中实际运行的环境中。

例如,我有一个运行Linux的嵌入式设备,我想检查该操作一些没有
的bash a)在真正的设备上运行它(因为我在台式机上有更好的工具,并且不想用砖砌设备)
b)在我的桌面上真正运行它的bash(因为我不想弄乱我的桌面系统)

此外,您还可以发现使用了哪些命令或其他脚本文件,因为无论何时尝试运行命令或Shell脚本,运行都会因错误而退出

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