Answers:
最简单的方法是使用仅包含您希望脚本能够运行的命令的chroot监牢。然后,您通过调用chroot
目录的包装程序运行脚本,然后执行脚本。
在虚拟机中运行脚本并不能百分百安全,这可能会阻止脚本实现其目标。但是有两个功能可能会对您有所帮助。如果您担心脚本是由恶意人员编写的,那么这些功能还不够;但是,如果您只是担心脚本是由粗心的程序员编写的,或者出于不同目的而编写的,那么脚本可能会对系统造成不良影响,那么这两个功能都可以提供一个不错的沙箱环境。
您可以通过将bash调用为来运行受限shellbash -r
。我请您参考bash手册以获取详细说明;基本思想是该脚本无法调用不在中的命令,$PATH
无法更改$PATH
,无法重定向到文件或从文件重定向以及更多限制。设置起来相当简单,但是如果未知脚本过于复杂以至于您无法查看,则很可能会使用受限外壳程序中禁止使用的许多内容。
您可以设置chroot监狱。这个想法是建立一个目录树,/some/root
并在一个认为/some/root
整个文件系统(chroot
是更改根目录的缩写)的环境中运行脚本。设置目录树后,将脚本(复制到/some/root/myscript
)运行为chroot /some/root /bin/bash /myscript
。例如,您将/some/root/bin
使用要允许的命令来设置目录,并且chroot程序会将该目录视为/bin
。您需要在chroot内部复制执行程序所需的所有内容:库,数据文件,bash
脚本本身等等/proc
。您可以使用像这样的命令来执行此操作mount -t proc proc /proc
。
如果需要使整个目录树可用于脚本,请说/var/example
,您有几种选择。您可以在下进行复制/some/root
。您可以进行硬链接(如果它们适用于您的应用程序,并且chroot在同一文件系统中)。在Linux上,您可以mount --bind /var/example /some/root/var/example
“移植” /var/example
到chroot中。请注意,符号链接不起作用,因为链接的目标是在chroot内部确定的。
请注意,chroot不能提供绝对的安全性,尤其是对于以root身份运行的进程。例如,根进程可以在chroot内部创建设备文件,并通过该文件访问整个磁盘。chroot进程仍可以建立网络连接(您可以通过在chroot内不包括任何网络程序并确保不受信任的程序无法创建文件并将其设置为可执行文件或覆盖现有的可执行文件来禁止此连接)。
grep
,awk
,units
,等我需要手动复制每个bin文件和所有的依赖关系或有一些方便的黑客告诉明确什么utils的应在chroot环境工作?