我正在尝试为 Linux 系统(ubuntu)创建一些沙箱软件。我的主要目标是找出哪些文件是由我选择的 bash 脚本执行的,而不是实际让它运行它们。我还想防止对系统进行更改,因此运行脚本会认为他有能力写入文件但实际上没有。我不想在低权限下运行 bash 脚本,因为如果它尝试更改某些内容,它将无法运行。请不要建议通过虚拟机运行它,这对我来说太慢了。
我唯一想到的是挂钩任何写入系统调用,因此当它尝试写入文件时,系统将返回成功但不执行任何操作。还挂钩任何执行系统调用以捕获脚本执行的所有程序,并防止执行其他文件,同时将成功返回给脚本。但我必须知道如何做到这一点。
有任何想法吗?提前致谢。
尝试使用带有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,然后附加到原件上。