执行脚本而不解密它们

执行脚本而不解密它们

我有一组脚本(bash、ruby、python),想要将所有内容放入一个类似文件的容器中,这样我就可以在很多服务器上部署这个容器。该脚本需要防止其他用户(包括 root 用户)的访问。所以我的想法是创建一个包含所有敏感脚本的加密容器,并在启动时将其安装到 RAM 中。但是安装此容器后,有权访问该文件的每个人都可以从系统访问这些文件。

是否有某种技术可以将解释脚本(bash,ruby,...)部署到系统上并且没有人可以随时看到其内容?我不想运行一些“混淆”脚本。

答案1

不可能使正在执行该程序的用户无法读取该程序。特别是,root 可以读取所有文件。

你所要求的毫无意义。您可以将加密的容器放在计算机上,其管理员将无法读取它。但是,如果您想使用位于该容器中的内容,则需要解密该内容,然后管理员才能读取它。

您可以使用文件权限来保护文件免受非 root 用户的访问。加密对此没有什么用处:加密仅在某人有权访问包含数据的介质时才对保护数据有用(例如,保护存储在磁盘上的数据免遭访问该磁盘的人的侵害,或者保护传输中的数据免受其他人的侵害)。可以窃听通信频道的人)。

如果您不希望人们能够复制您的软件,那么首先就不要向他们提供您的软件。您也许可以安排软件的敏感部分在您自己的服务器上运行,并且只发送一些愚蠢的客户端。如果您想限制客户运行的副本数量,请通过法律合同来实现。

答案2

这取决于你所说的混淆是什么意思。这是一种允许您将脚本包装在可编译程序中的方法,允许您将它们转换为二进制可执行文件。编写一个如下所示的 C 程序:

#include <stdio.h>
#include <stdlib.h>


        文件 *sh;

        sh = popen("/bin/sh", "w");            // 使用“/bin/bash”如果你需要,
                                               // 或任何你需要的解释器。
        if (sh == (FILE *)NULL) {
                错误(“popen”);
                退出(1);
        }
        /* 在此处嵌入您的脚本。 */
        fprintf(sh, "x 为红蓝绿\n");
        fprintf(sh, "做\n");
        fprintf(sh, " echo x = \"$x\"\n");
        fprintf(sh, "完成\n");
        /* 脚本结束。 */
        fclose(sh);

如果它不仅仅是几行,将其存储为字符串数组可能更易于管理。然后编译这个程序。

  • 如果您希望程序/脚本可由非 root 用户执行,请将二进制文件设置为仅执行(例如,模式 710 或 711)。
  • 当然,无论其模式如何,root 都能够读取该文件。虽然二进制可执行文件乍一看只是一个二进制可执行文件,但使用命令提取脚本文本很简单strings。您可以通过添加一些脚本文本的轻量级伪加密来稍微缓解这个问题C 程序;例如,一些微不足道的事情,例如将每个字节与一个常量(最好是设置了 0x80 位的字节)进行异或。这不能提供真正的安全;由于程序必须包含“解密”脚本的逻辑,因此任何分析师都可以做同样的事情。这仅提供了一点“通过默默无闻的安全性”。

没有任何解决方案是万无一失的,因为(至少对于 shell 脚本来说)用户将能够通过ps在另一个窗口中使用来查看正在运行的命令;但这只能让他们对剧本有片断的了解。

当然,如果你的脚本的逻辑真的很敏感,那么真正的答案是将其翻译成可编译的语言。

(改编自避免用户破坏和使用脚本.)

相关内容