如何为 chroot 环境分配额外的 IP/主机名?

如何为 chroot 环境分配额外的 IP/主机名?

虽然我可以简单地让例如sshd在环境(“chrootenv”)中侦听与其父环境(“parentenv”)不同的端口,但让该环境拥有额外的 IP 和主机名并侦听chroot会更方便sshdIP 的端口 22。所以基本上我想设置一个chroot环境,使其表现得像网络中的单独主机。如何才能实现这一目标?或者这是什么LXC或者用户模式Linux(我缺乏经验)更适合?

答案1

通常,chroot 是关于“限制权限”,而不是授予用户自己的 IF 来玩......

但无论如何:如果您想做一些工作,您可以在新的网络命名空间中启动您的 chroot 环境。你找个介绍这里。然后是最后一个命令,该命令将您置于新的网络命名空间中,在上面的指南中是

 ip netns exec NAME_OF_THE_NET_NS /bin/bash

可以跟随通常的命令集,

sudo mount -o bind /proc /pathtochroot/proc
sudo mount -o bind /dev /pathtochroot/dev
sudo mount -o bind /dev/pts /pathtochroot/dev/pts
sudo mount -o bind /sys /pathtochroot/sys
sudo chroot /pathtochroot /bin/bash

现在你有了带有 IF 的 chroot。

但随之而来的问题是:你不认为使用Linux容器(LXC、OpenVZ、VServer)会更快、更简单吗?具有接口的 chroot 与 Linux 容器不是一样吗?一般来说,当不关心安全问题时,我就会这样做。

编辑:

好吧,我看到你的困境了。尽管如此,还有一种可能性。在同一张卡上创建两个虚拟接口,并确保它们都从 DHCP 获取 IP 地址。现在配置 ssh 以绑定到其中之一。您可以为 ssh 客户端和 ssh 服务器执行此操作。对于客户来说,指令是

 ssh -b ip.address.tobin.to

而对于服务器,您需要使用指令

 ListenAddress ip.address.tobind.to

在文件 /etc/ssh/sshd_config 中。通过这种方式,您可以强制主机仅使用一个接口。然后进入chroot监狱,并使用其他界面。我对 busybox 的功能不太确定,所以我不能明确地说这会起作用。但如果这是普通电脑中的 chroot 监狱,它就会起作用。

答案2

这个工具可能会很方便:

chname 使用新的系统主机名运行命令或交互式 shell

概要

chname 主机名 [命令 ...] 描述

使用新的系统主机名创建新的 utsname 命名空间并执行命令。这对于创建具有独立于系统其余部分的主机名的 chroot 特别有用。

此功能需要 Linux 2.6.19 或更高版本且 CONFIG_UTS_NS=y。

奇迹般有效。相对于 @MariusMatutiae 提出的答案中的配方的优点是它不需要设置namespace(添加 veth 等)。缺点 - 不允许为chrooted环境分配单独的 IP 地址

相关内容