#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映像等-要做更多工作)
评论
这里的答案似乎缺少“我如何使用它的类别”? :(