我编写了一个bash脚本来调用Python脚本,该脚本使用AES加密私有数据,将文件路径和256位密码作为唯一参数。加密完成后,它会清除历史记录,因此密码不会就位,以防我将终端打开。它看起来像这样:
#!/bin/bash
python aesencrypt.py "$1" "$2"
history -c
echo "" > ~/.bash_history
~/.bash_history
文件被清除得很好,但如果我在运行此脚本后运行history
,那么我的所有历史记录仍然存在(直到我退出终端)。这里有什么我想念的吗?
不要试图清除历史记录 - 尽管这是在命令行上传递密码最明显的方式暴露它,该操作给出了一种错误的安全感:命令行上给出的密码通过其他进程捕获是微不足道的即使没有历史记录,也可以在同一台机器上运行(即使在不受信任的帐户下!)
此外,正如您所注意到的,shell只能修改自己的内存中状态,而不能修改启动它的单独进程的内存状态(它可能根本不是相同的shell,或者根本不是shell!)。
相反,修改Python程序的调用约定以直接从TTY(如SSH所做)或从环境中读取密码。对于后者,用法可能如下所示:
# assumes you renamed aesencrypt.py to aesencrypt, ran chmod +x, and gave a valid shebang
password="somePassword" aesencrypt outFile
...并且您希望修改Python脚本以执行以下操作:
#!/usr/bin/env python
import os, sys
filename = sys.argv[1]
password = os.environ['password']
# ...put the rest of your logic here.