3

我有一个运行时会产生敏感内容的 shell 脚本。它位于一个只有少数用户有权访问的盒子上。但是,我还通过以下方式添加了分层混淆以防止未经授权的使用:

  1. 脚本必须以 root 身份运行
  2. 必须向脚本传递特定的命令行参数才能产生任何输出
  3. 脚本已由 shell 编译器“ shc ”编码,以从普通用户(那些不知道使用 TRACE 或 STRINGS 仍查看实际代码的用户)屏蔽事实 #1 和 #2。

然后添加一层实际的安全性以再次保护更高级的用户和系统管理员,我还使用 gpg 加密了脚本。

我的问题是——是否有一个我可以运行的 gpg 命令(或其他加密方法)提示输入解密密码,并解密脚本并仅在内存中运行它(不将文件的解密版本保存到文件系统)?

我意识到敏感信息在执行时可能仍然存在于未受保护的内存中,我将单独解决。

4

3 回答 3

3

您可以通过以下方式捕获解密的输出

decrypted=$(gpg -d ...)

然后您可以评估结果

eval "$decrypted"
于 2013-02-01T17:26:31.850 回答
0

与 choroba 的答案对比的另一个简单选项:

将解密的输出保存到/dev/shm/. (在几乎所有 Linux 发行版上,默认情况下它都是一个 in-ram tmpfs 文件系统。)设置 atrap以在脚本退出时删除文件。

于 2013-02-04T20:01:40.947 回答
0

很有可能我可以改进它,但这是另一个想法,您可以执行脚本而不是像 choroba 的示例中那样评估它。它允许您传递参数...

bash <( gpg -d ... ) arg1 arg2

...不过,它“覆盖”了解释器。即我会用bash -ue. 取决于脚本以及您是否自己编写它们,可能会或可能不会有问题:)

于 2013-12-09T15:11:37.307 回答