如何在不影响文件系统的情况下运行 bash 脚本?

Sht*_*tut 2 bash scripts

我正在尝试为 Linux 系统(ubuntu)创建一些沙箱软件。我的主要目标是找出哪些文件是由我选择的 bash 脚本执行的,而不是实际让它运行它们。我还想防止对系统进行更改,因此运行脚本会认为他有能力写入文件但实际上没有。我不想在低权限下运行 bash 脚本,因为如果它尝试更改某些内容,它将无法运行。请不要建议通过虚拟机运行它,这对我来说太慢了。

我唯一想到的是挂钩任何写入系统调用,因此当它尝试写入文件时,系统将返回成功但不执行任何操作。还挂钩任何执行系统调用以捕获脚本执行的所有程序,并防止执行其他文件,同时将成功返回给脚本。但我必须知道如何做到这一点。

有任何想法吗?提前致谢。

mur*_*uru 5

尝试使用带有chroot. 首先,决定您想要 chroot 的路径,并确保它存在,对于您将覆盖的路径/(这是修改的位置)也是如此:

mkdir -p /chroot
mkdir -p /tmp/tmproot
Run Code Online (Sandbox Code Playgroud)

我选择了一个目录,/tmp/因为它tmpfs在我的系统上(可能不建议,但对我来说没问题),因此任何更改都不应到达磁盘。您可以使用 asquashfs并将其安装在某个地方,并将其用作覆盖层,但我认为这存在只读的问题。

现在:

$ mount -t overlayfs -o lowerdir=/,upperdir=/tmp/tmproot overlayfs /chroot/
$ chroot /chroot/ /bin/bash -l
root:/$ touch test
root:/$ ls
...  sys  test  tmp  ...
root:/$ logout
$ ls /
...  sys  tmp  ...
$ ls /tmp/tmproot/
root  test
Run Code Online (Sandbox Code Playgroud)

如果您使upperdir独立于物理磁盘(也许通过使用tmpfs),这应该可以保护lowerdir.

请注意创建一个root文件夹 - 这是我的.bash_history. 复制一份原件.bash_history,然后附加到原件上。