虽然我可以简单地让例如sshd
在环境(“chrootenv”)中侦听与其父环境(“parentenv”)不同的端口,但让该环境拥有额外的 IP 和主机名并侦听chroot
会更方便sshd
那IP 的端口 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 地址