我是监狱新手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 上执行此操作,这似乎与我链接的编码问题有关。
我希望能够运行的唯一三个命令是我尝试运行的命令 、git
和vim
,但我从这个命令开始,但运气不佳。
答案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 放入虚拟机中来实现的(但我不确定)。