【发布时间】:2019-09-17 09:41:27
【问题描述】:
我编写了一个 bash 脚本来调用 Python 脚本,该脚本使用 AES 加密私有数据,将文件路径和 256 位密码作为唯一参数。加密完成后,它会清除历史记录,这样密码就不会放在那里,以防我让终端保持打开状态。它看起来像这样:
#!/bin/bash
python aesencrypt.py "$1" "$2"
history -c
echo "" > ~/.bash_history
~/.bash_history 文件被清除得很好,但如果我在运行此脚本后运行history,那么我的所有历史记录仍然存在(直到我退出终端)。我在这里有什么遗漏吗?
【问题讨论】:
-
当然不会——它会清除运行脚本的shell的历史,这与启动脚本的shell的历史不同。启动脚本的 shell 甚至根本不是 bash —— 它可能是 zsh 或 dash,或者它可能是由文件管理器或其他甚至没有 的外部/C 程序启动的/i> “历史”的概念。
-
无论如何,在命令行上传递密码是非常不安全的,即使根本没有历史记录。同时运行的任何进程都可以从进程树中嗅出它,并且存在专门用于记录和保留该历史记录的程序。直接从 TTY 读取您的密码——甚至 stdin 比命令行更安全;环境变量也是如此。
-
(好吧,我不知道环境变量安全在 Windows 上,但在过去的一两年的 UNIX 中,它们只暴露给同一个用户帐户,而命令行程序参数对于在同一台机器上的每个帐户下运行的每个程序都是可见的,除非您已经竭尽全力,例如使用单独的进程命名空间)。
标签: windows bash git-bash mingw-w64