chroot Linux 实用程序可以修改进程的工作根目录,限制对文件系统其余部分的访问。这通常是为了安全、容器化或测试而完成的,通常被称为“chroot 监狱”。
Chroot 只做一件事——使用不同的根目录运行命令。正在运行的命令不知道它的监狱之外的任何东西都存在,因为它没有任何指向它的链接,并且据它所知,无论如何都在根文件系统上运行。根之上没有任何东西,所以该命令无法访问任何其他东西。
Chroot 不会对您的磁盘进行任何修改,但它可以使它从在其下运行的进程的角度来看看起来像那样。 Chrooting 进程完成与更改进程的挂载命名空间相同的事情,但比命名空间修改更高级别。
的主要用途是锁定系统守护进程,以便这些守护进程中的任何安全漏洞都不会影响系统的其余部分。例如,邮件代理 Postfix 可以配置为在 chroot 环境中运行,对用于与系统通信的目录的访问权限有限。这样,如果在 Postfix 中发现错误,它会影响 Postfix,而不是其他任何东西。
这对于像 FTP 这样的服务非常有用。如果您想为远程用户提供对系统部分的访问权限,chroot 进程是锁定访问权限的一种简单方法。
它也可用作“预算容器”,用于创建操作系统的子集并在隔离环境中运行应用程序,无论是用于测试、安全性还是易于开发。但由于 要求您手动将应用程序依赖项复制到监狱中,因此它并不适合所有情况。需要访问用户级资源并与之交互的进程在 chroot 监狱中无法正常工作,或者需要额外的配置,这可能会使整个设置更加不安全。但是,即使是像 Apache 和 MySQL 这样复杂的应用程序也可以在 chrooted 环境中运行,并考虑到所有依赖项。
虽然 监狱是一个额外的安全层,但 不应该是您唯一的安全工具。如果配置不当,越狱可能相对微不足道,chroot jail 只会更改挂载位置,不会影响其他名称空间。如果您想要更好的安全性,请使用命名空间或像 Docker 这样的容器化引擎。
要在受限目录中打开 shell,您可以运行:
sudo chroot /jail
但是,此命令将因新创建的 目录而失败,因为 将尝试从 加载 bash。这个文件不存在,这是 的第一个问题——你必须自己构建 jail。
对于某些事情,使用 复制它们就足够了:
cp -a /bin/bash /jail/bin/bash
但这只会复制 bash 可执行文件,而不是它的所有依赖项,这些依赖项还不存在于我们的监狱中。您可以使用 命令列出 bash 的依赖项:
ldd $(which bash) linux-vdso.so.1 (0x00007ffd079a1000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007ff000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa000) /lib64/ld-linux-x86-64.so.2 (0x00007f3390eb3000)
您可以手动复制它们:
cp /lib/x86_64-linux-gnu/libtinfo.so.5 /jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 /jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 /jail/lib/x86_64-linux-gnu/ cp /lib64/ld-linux-x86-64.so.2 /jail/lib64/
但这对于您可能希望在 下运行的每个命令来说都是一个主要的麻烦。如果您不关心您的 访问您的实际 和 目录(无法访问系统的其余部分),那么您可以使用 在你的 jail 中提供一个链接:
mount --bind /bin /jail/bin mount --bind /lib /jail/lib mount --bind /lib64 /jail/lib64
您也可以只复制整个 和 目录,这会占用更多空间,但对于安全性来说可能更好一些,尤其是当您使用 以运行您不希望弄乱系统文件夹的不安全进程。
现在一切都已复制,您应该能够再次运行 打开 bash。或者,您可以通过运行以下命令来运行任何其他命令:
sudo chroot /jail command
如果您正在通过 chroot bash 运行进程,您可以使用 或 Control+D 退出 shell,这将停止正在运行的进程。在 jail 中运行的进程在它们自己的环境中运行,并且无法访问系统上的其他进程。
不容易,除非他们以 root 身份运行。 Chroot 不会阻止对低级系统资源的访问(这需要 root 才能访问),因此,特权进程可以轻松逃脱监狱。
非特权进程有可能通过方法 和对 的另一个调用完全中断。如果您真的专注于安全性,您应该放弃对 系统调用的访问,或者使用 fork ,它会自动执行此额外的安全功能。
不是防弹安全工具,因为它没有完全容器化,不应被视为可以保护您的系统免受攻击者攻击的防火墙。然而,除非一个进程专门试图摆脱 chroot jail,否则 会为大多数进程完成其文件系统分区的工作,并且可以配置额外的安全措施来阻止主要越狱方法。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/11164.html