假设我有一个自定义 *ix 映像文件,我想用它来测试某些东西,无论是程序、网站还是其他需要放在隔离环境中的东西。如果我确保自己始终以非特权用户身份在实时系统中运行,那么它会像虚拟机中的客户系统一样安全吗?我不需要持久性。
作为扩展,有没有办法可以限制实时系统 chroot 到计算机的驱动器?
答案1
测试期间可能会出现问题(测试就是为了这个目的 :)),因此如果您错过了某些东西,则必须在“裸机”系统上重新安装。使用虚拟机,您只需使用新映像重新启动即可。请明智选择 :)
答案2
我无法评论,所以:@shards 您是否尝试过创建可启动的 USB 来使用?您可以让 root 没有密码登录,这样现有文件系统就无法在没有 root 权限的情况下挂载。额外的好处是 USB 将被加载到 RAM 中,因此不会有剩余文件。
对于基于Gnu/Linux:
Chroot 并非一项安全功能并且不应该这样使用。回答你的问题:
为了创造更多安全的 chroot 环境,创建一个包含 bash 或您喜欢的 shell、其链接库以及您需要的其他工具的目录。直接从刚刚引用的 wiki 页面:
# mkdir /chroot
# ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000)
libdl.so.2 => /lib/libdl.so.2 (0x40060000)
libc.so.6 => /lib/libc.so.6 (0x40063000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
创建链接到 bash 的共享库以及您将使用的任何其他可执行文件所需的目录:
# mkdir /chroot/bash
# mkdir /chroot/bash/bin
# mkdir /chroot/bash/lib
并将这些库复制到正确的目录。
不幸的是,我两次误读了这个问题,并且下面还有另一个与容器而不是 chroot 无关的答案。
最新的内核文档描述了如何防御幽灵,这是虚拟机中客户系统/非特权容器逃逸的主要问题之一。您可以使用以下命令了解处理器当前是否存在此类漏洞:
tail -n1 /sys/devices/system/cpu/vulnerabilities/* | sed 's/\/.*\///g'
并将结果与文档中描述的预期结果进行比较。
确保CONFIG_RETPOLINE
在内核中启用了,默认情况下应该是启用的。其他保护选项是CONFIG_STACKPROTECTOR_STRONG
和CONFIG_STRICT_DEVMEM
。您还可以启用其他选项,但发行版会因为性能权衡而将其关闭。
一个必不可少的步骤是将最新的微码固件内置到内核中、由 BIOS 加载或由 initramfs 加载,这将在每次启动时更新处理器微码。假设您保持系统更新,您的发行版很可能是最新的。作为参考,AMD motAMD 最新的微代码位于官方内核 git 树中,并且英特尔最新的微代码托管在 Github 上。允许将微码加载到 initramfs/cpio 的配置位于 下,但您可以选择通过指向正确的目录CONFIG_MICROCODE
将其与内核一起构建。CONFIG_EXTRA_FIRMWARE
您也可以选择使用以下方法重新编译 GCC英特尔的补丁-mzero-caller-saved-regs
这将允许您在编译内核时使用该参数。
您需要有一个支持Process Isolation
您的容器的 Windows 版本。
按相关性排序:
https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/faq
https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers
https://docs.microsoft.com/en-us/windows/win32/http/process-isolation
https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/containers-vs-vm
还需要让 Windows 保持更新与 Spectre/Meltdown 相关的安全补丁,这可能会允许虚拟机或容器逃脱。