我在我的 Ubuntu 14.04 机器上创建了一个 chroot 监狱施鲁特和反引导程序。
现在我想编写一个在本机环境和 chroot 之间来回切换的 shell 脚本。
当我直接在 shell 脚本中编写命令时,当我切换到 chroot 时,它会卡住。
例如:
...
sudo chroot /JAIL #folder to chroot
echo "Chrooted now"
...
我切换到 chroot 文件夹 /JAIL 但是,我没有在 echo 中得到输出。只有当我从 chroot 退出到主机时,才会打印此输出。我推断这可能与我们进入 chroot 监狱时更改用户有关。
所以,我尝试了这个问题中提到的解决方案如何在单个终端上快速切换用户? 我还读到此处文档但无法让他们工作。
理想情况下,我想要一个具有如下流程的 shell 脚本:
- chroot 入狱
- 在那里做点什么
- 移回主机
- 也在这里做点什么
- 返回 chroot,依此类推。
答案1
之所以在退出echo
后执行,sudo
与改变用户无关。
让我们简化一下脚本:
...
cat
echo "After cat"
...
该命令将在完成echo
后执行,就像您编写的所有其他命令序列一样。cat
如果您希望在 chroot 内执行某些命令,则必须将它们作为参数传递给 chroot。
如果您有/bin/bash
登录 shell,则命令
chroot /dir
相当于
chroot /dir /bin/bash -i
这意味着它启动一个交互式 shell。您可以通过创建可在 chroot 中访问的 shell 脚本或在命令行上指定来执行某些命令
chroot /dir /path/to/script
chroot /dir /bin/bash -c 'some commands; more commands'
chroot
尽管脚本或命令行都可以在后台启动进程,但程序将始终等待命令完成。
答案2
只需在 chroot 后写入命令:
chroot /jail /path/to/some/command <parameters>
第二行man chroot
:
NAME chroot - 使用特殊根目录运行命令或交互式 shell
概要 chroot [选项] NEWROOT [命令 [ARG]...]