我编写了一个bash脚本来调用Python脚本,该脚本使用AES加密私有数据,并将文件路径和256位密码作为唯一参数。加密完成后,它会清除历史记录,以防万一我将终端保持打开状态时密码不在此处。看起来像这样:
#!/bin/bash
python aesencrypt.py "$1" "$2"
history -c
echo "" > ~/.bash_history
可以很好地清除~/.bash_history
文件,但是如果我在运行此脚本后运行history
,则我的所有历史记录仍然存在(直到退出终端)。我在这里想念什么吗?
答案 0 :(得分:2)
不要试图清除历史记录-尽管这是在命令行中传递密码的最明显的方式,但该动作给人一种错误的安全感:即使完全不涉及历史记录,命令行也很容易通过同一台计算机上运行的其他进程捕获(即使使用不受信任的帐户!)。
此外,请注意,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.