我听说过很多关于linux下chroot监狱的信息,但从未使用过(我每天都使用Fedora),那么chroot“ jail”是什么?什么时候以及为什么要使用它/不使用它,还有什么我应该知道的吗?我将如何创建一个?
我听说过很多关于linux下chroot监狱的信息,但从未使用过(我每天都使用Fedora),那么chroot“ jail”是什么?什么时候以及为什么要使用它/不使用它,还有什么我应该知道的吗?我将如何创建一个?
Answers:
chroot监狱是一种将进程及其子进程与系统其余部分隔离的方法。它仅应用于不以root用户身份运行的进程,因为root用户可以很容易地脱离监狱。
想法是创建一个目录树,在其中复制或链接运行某个进程所需的所有系统文件。然后,您可以使用chroot()
系统调用将根目录更改为该新树的基础,并启动在该chroot环境中运行的进程。由于它实际上无法引用修改后的根目录之外的路径,因此它无法在这些位置上恶意执行操作(读/写等)。
在Linux上,使用绑定挂载是填充chroot树的好方法。使用该功能,您可以拉入文件夹,例如/lib
,/usr/lib
而不拉入文件夹/usr
。只需将您想要的目录树绑定到您在jail目录中创建的目录即可。
firejail
。
/bin
由root用户安装的二进制文件吗?@Ben Combee
“ chroot监狱”是一个错误的名字,应该消失,但是人们一直在使用它。chroot
是一种工具,可让您在文件系统上模拟目录作为文件系统的根目录。这意味着您可以具有以下文件夹结构:
-- foo
-- bar
-- baz
-- bazz
如果您chroot foo
这样做ls /
,您将看到:
-- bar
-- baz
就ls
(以及您运行的任何其他工具)而言,这些是文件系统上的唯一目录。“ jail”使用不当的原因chroot
并非旨在迫使程序保留在该模拟文件系统中;知道它在chroot“ jail”中的程序可以很容易地逃脱,因此您不应将其chroot
用作安全措施,以防止该程序修改模拟文件系统之外的文件
chroot
不是解决安全性问题。出于这个原因,人们往往混淆chroot
并jails
意味着同样的事情。他们没有。据说“监狱”一词是由比尔·切斯威克(Bill Cheswick)设置蜜罐来抓饼干时创造的:csrc.nist.gov/publications/secpubs/berferd.pdf
chroot jail
在我看来,这不是一个好主意吗?
“什么时候以及为什么要使用它?”
一种用途是测试脚本(引导路径是否为绝对路径)或运行您可能希望截取并记录的命令(可能不进行操作)的脚本(在不希望它们出现的环境中)实际在您的运行环境上运行。
例如,我有一个运行Linux的嵌入式设备,我想检查一些bash的运行情况,而不a)在实际设备上运行它(因为我的台式机上有更好的工具,并且不想对设备进行砌砖)b)运行它在我的桌面上是真实的(因为我不想弄乱我的桌面系统)
此外,您还可以发现使用了哪些命令或其他脚本文件,因为每当尝试运行“ chroot监狱”中不存在的命令或shell脚本时,运行都会错误退出。
(当然,要想全力以赴,您可以在QEMU或Docker或VM内运行,但这将涉及创建VM映像等-还要做很多工作)