逃离 chroot()

Escaping from chroot()

我正在使用 C 语言在 UNIX 环境中开发网络服务器。目前,我已经完成了对进程的限制,但现在我无法使用系统日志和记录到文件选项,这基本上是由于更改了根路径。

程序的新根路径是它的目录。我无法从它逃脱到真正的根“/”以使用这些功能并再次返回监狱根路径。

是否有其他替代方案或解决方案?

如果您的根目录是工作目录,请不要使用 chroot,并删除您使用的所有相对路径开头的“/”,或添加“.”。在这之前 '/'。 仅当您想像系统根一样完全工作时才使用 chroot。

使用chroot()的全部意义在于让真正的根无法访问,如此简单的公式:如果你能破解它,你就不需要它。

因此,您应该改为在您的 chroot 环境中访问 syslog。如何? chroot() 之前 openlog()。在那之后,你可以 syslog() 即使你不能再 openlog() 它了。

如果两个环境都在同一个文件系统上,您可以使用硬链接,以便在 chroot 环境下您可以看到文件 "outside"。配置一切正常工作可能不是那么容易,但这是可能的。改变你的观点:不要试图逃避 chroot,尝试将东西包含进去。