我们的产品需要在精密的服务器上执行一个未知的 bash 脚本,以达到某个目标。这个 bash 脚本是用户提供的。我们有兴趣确保只允许特定命令,而不允许所有其他命令。此外,我们需要用其他命令替换一些命令。
因此,例如,我们想执行脚本并允许以下命令:echo cat awk
但不允许任何其他命令(我们不想在此处提供特定列表)。
此外,如果脚本包含命令 cp,我们希望捕获它并重定向到不同的命令(可以使用别名完成)。
知道这是如何完成的吗?
Gil*_*il' 18
在虚拟机中运行脚本没有 100% 安全,这可能会阻止脚本实现其目标。但是有两个功能可以帮助您。如果您担心脚本是由恶意人员编写的,那么这些功能还不够;但是,如果您只是担心脚本可能会对您的系统造成不良影响,因为它是由粗心的程序员编写的,或者出于不同的目标,那么这两个功能中的任何一个都提供了一个不错的沙盒环境。
您可以通过调用 bash as来运行受限制的 shellbash -r。我向您推荐 bash 手册以获取详细说明;基本思想是脚本不能调用不在 中的命令,$PATH不能更改$PATH,不能重定向到文件或从文件重定向,以及一些更多的限制。这设置起来相当简单,但是如果未知脚本太复杂而您无法查看,则可能会使用受限制的 shell 中禁止的很多东西。
你可以设置一个chroot jail。这个想法是建立一个目录树/some/root并在认为这/some/root是整个文件系统的环境中运行脚本(chroot更改根的缩写)。设置目录树后,将脚本(复制到/some/root/myscript)作为chroot /some/root /bin/bash /myscript. 例如,您将/some/root/bin使用您想要允许的命令设置一个目录,并且 chroot 程序会将此目录视为/bin. 您需要在 chroot 中复制执行程序所需的所有内容:库、数据文件、bash脚本本身等。脚本可能需要/proc安装在 chroot 中;你可以用像这样的命令来做到这一点mount -t proc proc /proc。
如果您需要为脚本提供整个目录树,例如/var/example,您有多种选择。您可以在/some/root. 您可以创建硬链接(如果它们适用于您的应用程序并且 chroot 位于同一文件系统中)。在 Linux 上,您可以在 chroot 内部mount --bind /var/example /some/root/var/example“移植” /var/example。请注意,符号链接无法工作,因为链接的目标是在 chroot 内确定的。
请注意, chroot 不提供绝对的安全性,尤其是针对以 root 身份运行的进程。例如,root 进程可以在 chroot 中创建一个设备文件并通过它访问整个磁盘。chroot 进程仍然可以建立网络连接(您可以通过在 chroot 中不包含任何网络程序并确保不受信任的程序无法创建文件并使其可执行或覆盖现有可执行文件来禁止这种情况)。
| 归档时间: |
|
| 查看次数: |
5626 次 |
| 最近记录: |