自动解密并运行加密的bash脚本,而不将解密文件保存到文件系统

时间:2013-02-01 17:18:20

标签: bash encryption gnupg

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

  1. 脚本必须以root身份运行
  2. 脚本必须传递特定的命令行参数才能生成任何输出
  3. 脚本已由shell编译器“shc”编码,以掩盖普通用户(那些不知道使用TRACE或STRINGS仍然查看实际代码的用户)的事实#1和#2。
  4. 然后添加一层实际安全性以再次保护更高级的用户和系统管理员,我还用gpg加密了脚本。

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

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

3 个答案:

答案 0 :(得分:3)

您可以通过

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

然后您可以评估结果

eval "$decrypted"

答案 1 :(得分:0)

与choroba的答案形成鲜明对比的另一个简单选择:

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

答案 2 :(得分:0)

我很可能会对此进行改进,但这里有另一个想法,你执行脚本而不是像choroba的例子那样评估它。它允许你传递参数......

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

......但它“覆盖”了解释器。即我用bash -ue运行我的脚本。根据脚本以及您是否自己编写脚本,可能会出现问题,也可能不成问题。)