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

Tob*_*ler 5 linux networking chroot lxc namespace

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

Mar*_*iae 8

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

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

 ip netns exec NAME_OF_THE_NET_NS /bin/bash
Run Code Online (Sandbox Code Playgroud)

后面可以跟着一组常用的命令,

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
Run Code Online (Sandbox Code Playgroud)

现在你的 chroot 有一个 IF。

但接下来的问题是:你不认为使用 Linux 容器(LXC、OpenVZ、VServer)会更快更简单吗?带有接口的 chroot 与 Linux 容器不是一回事吗?通常,当不关心安全问题时,这就是我要走的路。

编辑:

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

 ssh -b ip.address.tobin.to
Run Code Online (Sandbox Code Playgroud)

而对于服务器,您需要使用说明

 ListenAddress ip.address.tobind.to
Run Code Online (Sandbox Code Playgroud)

在文件 /etc/ssh/sshd_config.conf 中。通过这种方式,您已强制主机仅使用一个接口。然后进入chroot jail,使用其他界面。我对busybox 的功能不太了解,所以我不能断言这会起作用。但它会起作用,如果这是普通电脑中的 chroot jail。