【问题标题】:Automatically decrypt and run an encrypted bash script without saving decrypted file to file system自动解密并运行加密的 bash 脚本,无需将解密的文件保存到文件系统
【发布时间】:2013-02-01 17:18:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 创建一个小内存盘,格式化,挂载,保存文件,执行,格式化内存盘,释放内存盘。但我必须问...这种级别的保护真的有必要吗?

标签: bash encryption gnupg


【解决方案1】:

您可以通过

捕获解密的输出
decrypted=$(gpg -d ...)

然后您可以评估结果

eval "$decrypted"

【讨论】:

  • 感谢您的回复!只有在从加密脚本中删除命令行参数要求后,我才能让它工作。我不知道为什么我没有想到将命令的输出捕获到一个变量中!我可能不需要保留参数要求,但我猜如果我想把它们放回去,我必须调整 eval 命令中的语法。再次感谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    ...不过,它会“覆盖”解释器。 IE。我会用bash -ue 运行我的脚本。可能是也可能不是问题,具体取决于脚本以及您是否自己编写它们:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多