程序通过 chroot Jail 运行会出现编码错误?

程序通过 chroot Jail 运行会出现编码错误?

我是监狱新手chroot;到目前为止我已经使用设置了 bash本教程,并且我已经能够通过ssh使用公钥保护的用户登录。

SSH 配置负责运行 chroot Jail:

AllowUsers <username>
Match User <username>
        ChrootDirectory "/home/<username>"

/etc/sshd_config

基本上,我获取了列出的每一个依赖项并将其复制到/home/username/<rest-of-the-path-to-dependency-file>可执行文件中,并对可执行文件执行相同的操作。

linux-vdso什么也没做它不遵循相同的规则

我在监狱里唯一能做的就是cd执行程序,我的 shell 提示符如下所示:

-bash-4.4$

我添加了另一个程序,并以与上面教程相同的方式添加ldd依赖项并将可执行文件复制到 IU 找到的目录中

当我运行该程序时,它会创建一个目录和文件夹/.config/taskell/config.ini以及几个其他文件。

但是当程序运行时它给了我一个与编码相关的错误该文件的/home/username/.config/taskell/config.ini: hGetContents: invalid argument (invalid byte sequence),但是当我直接在计算机上的 bash shell 中运行它时,它工作正常。

设置 chroot 监狱是否改变了 shell 或该程序解释其正在读取的文件的方式?该-bash-4.4$提示似乎表明有某种默认设置,当我最初使用常规提示登录时,这些默认设置并不存在。

此外,我正在尝试在 WSL Ubuntu 18.08 上执行此操作,这似乎与我链接的编码问题有关。

我希望能够运行的唯一三个命令是我尝试运行的命令 、gitvim,但我从这个命令开始,但运气不佳。

答案1

使用容器代替 chroot,例如 docker(还有很多其他容器):

  • 它做了更多的事情:chroot、命名空间隔离、cgroup 等。
  • 它为您管理它。
  • 对于 docker,有预先构建的镜像。

但是,我看到您所要求的,但是可以通过简单的用户隔离更轻松地解决:每个用户都有一个单独的帐户。然后,您可以使用强制访问控制(例如应用程序装甲)来增强这一点。

然而,使用 WSL 会使所有这一切变得复杂。 WSL 是 MS-Windows 上的 Gnu/Linux。 WSL 是由 Linux 取代的 Gnu/Linux。我不确定 WSL2 是否好很多。我们正在讨论的所有内容都是在 Gnu/Linux 的 Linux 部分中完成的,如果不运行真正的 Gnu/Linux 系统,则最容易无法工作(或以不同方式工作)。共享文件系统是一个很大的不兼容领域。它使得使用文件权限来隔离用户变得困难。

我听说 docker 在 MS-Windows 上工作,我认为它是通过将 Gnu/Linux 放入虚拟机中来实现的(但我不确定)。

相关内容