我想在jail运行一个应用程序,以便允许的用途只能连接到jailed env(应用程序),而我的盒子上没有其他任何东西。
但他们需要能够通过networking连接到监狱,并且只有一个公共ip被我的盒子使用。
我怎样才能让他人进入监狱?
根据您希望人们在监狱中连接的服务,您可以使用防火墙规则将公共端口上的传入公共stream量转发到监狱专用IP上的相应端口,也可以设置代理来执行这项工作为你 – 附带地给你的监狱增加一些保护。
我经常为运行Web服务器的监狱执行此操作。 监狱在私人IP地址,所以他们没有访问networking。 他们可以达到的唯一方法是使用在jailserver上运行的HTTP反向代理。 你可以使用Apache或者nginx作为反向代理,但是我更喜欢“简单”的“ 磅 ”。 您可以在ports / www / pound /中的ports树中find它。
其他服务也可以使用入站代理。 nginx可以用作IMAP代理 。 如果您希望能够在不closures的情况下升级IMAP,这非常方便。 只需代理它到第二个监狱,升级第一个监狱,然后切换服务到升级的监狱,这样你就可以升级待机。 由于运行一个监狱几乎没有比在服务器上本地运行某些东西更多的资源,所以您将获得虚拟化的所有好处,而不会影响性能。
如果你需要用户通过SFTP连接你的盒子,那么你需要使用一个非标准的端口(可能用防火墙规则和/或NAT来转发stream量),或者你可以设置SFTP帐户,以便他们将chroot到他们应该在的监狱目录。 这不会在监狱中运行SFTP服务器,但结果是一样的。
如果你需要通过SSH提供对监狱的shell访问,那么我怀疑你只有两个select。 首先,和SFTP一样,使用非标准端口和防火墙规则。 第二个更复杂的选项是在你的监狱服务器上使用一个shell账户,该账户在账户的.ssh/authorized_keys文件中有魔术variables。 看看“AUTHORIZED_KEYS FILE FORMAT”部分下的man sshd 。
简而言之,您可能需要为将连接到您的键设置类似command="command"的内容。 不好的一面是,任何连接的人都需要提前获得公钥。 而你的客户显然需要设置密钥。 但最重要的是,你可以在你的监狱主机上创buildshell账户,或者jexec进入监狱,或者运行另一个到达那里的ssh。
您可以使用不同的端口进行访问,或使用内部IP让人们使用ssh / vpn隧道。