记录 shell 会话是否加密?

记录 shell 会话是否加密?

我使用 记录所有 shell 活动script,但担心这些日志文件中有相当多的密码和其他秘密内容。

有谁知道以加密方式记录 shell 会话的任何方法吗?是否有一些类似的实用程序script与 GPG 集成?

答案1

您可以将日志文件放入加密的保管库中,而不是加密单个文件。

或者也许让script写入 fifo,用 gpg 读取该 fifo,然后让 gpg 进行加密并将其写入文件。

答案2

如果您正在使用bash,您可以使用您的脚本使用 gpg 或其他东西~/.bash_logout来加密日志文件。script

.bash_logout需要知道日志的文件名是什么。例如,不只是运行script filename,而是myscript运行.bashrc.

function myscript() {

  # Very primitive option handling. This really needs to pass any script
  # command-line options on to script.
  # Left as an exercise for the reader and the getopts documentation :)
  if [ -n "$1" ] ; then
    SCRIPT_FILENAME="$1"
  else
    SCRIPT_FILENAME="$USER-$(tty)-$(date +%s)"
  fi
  readonly SCRIPT_FILENAME
  export SCRIPT_FILENAME

  script "$SCRIPT_FILENAME"
}

然后在 .bash_logout 文件中:

  if [ -n "$SCRIPT_FILENAME" ] && [ -e "$SCRIPT_FILENAME" ] ; then
      gpg --batch --yes  -r 'YOUR-EMAIL-OR-ID' -e "$SCRIPT_FILENAME"
      shred "$SCRIPT_FILENAME" # or any other file secure-erase tool.
      rm -f ""$SCRIPT_FILENAME"
  fi

安全警告: 这使得您的系统容易受到任何可以在 shell 环境中设置 SCRIPT_FILENAME 变量的东西(例如源脚本)的影响。攻击者可以将其设置为您的用户 ID 具有写入权限的任何文件。 (当然,如果攻击者可以像您一样运行任何内容,则他们可以自己覆盖该文件)

您可以通过在您的而不是在函数中将$SCRIPT_FILENAME其设置为只读来避免这种情况。这将使得 myscript 函数无法使用不同的文件名。~/.bashrcmyscript

或者您可以将所有打字稿存储在一个目录中(例如/home/username/typescripts/)。然后 .bash_logout 脚本可以检查:

  • 文件名以该目录的绝对路径开头,
  • 文件名不以.gpg
  • ../文件名中没有s
  • 文件名不是符号链接
  • 文件名的 inode 计数 = 1
  • ETC

在加密、粉碎和删除之前。

另一个安全警告:

谨防。即使自行承担风险,也不要使用代码示例。我的例子仅供参考。

虽然其中的一小部分已经单独测试,但尚未作为一个完整的功能系统进行测试。这个答案是不是旨在提供完整的解决方案。旨在为您提供自己探索和实施的想法。

相关内容