【问题标题】:"history -c" doesn't work when called inside a script?“history -c”在脚本中调用时不起作用?
【发布时间】: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


【解决方案1】:

不要试图清除历史记录——尽管这是在命令行上传递密码的最明显方式,但该操作会产生错误的安全感:Passwords given on即使完全不涉及历史记录,通过在同一台机器上运行的其他进程(即使在不受信任的帐户下!)也可以轻松捕获命令行。

此外,正如您所注意到的,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.

【讨论】:

  • 你能解释一下如何通过系统环境传递密码比直接在命令行传递密码更安全吗?即我不确定password="hunter2" aesencrypt data.txtaesencrypt data.txt hunter2 更安全。在这两种情况下,我都必须在完整命令中包含密码。
  • @HurricaneFist,是的,它在命令中都是双向的,但是即使命令行参数是,其他用户也看不到环境变量。尝试从其他帐户查看ps auxwww;你会看到只有aesencrypt data.txt 出现,没有password 部分。
  • (另外,如果您阅读 bash 手册,您会注意到有很多选项可以抑制敏感命令的历史记录——如果您打开适当的标志,只需使用空间会将其排除在历史之外......但不会将其排除在ps之外。
  • ...查看sshpass 的文档,如果您想了解一些人如何做到这一点,这些人已经相当努力地想尽其所能,同时满足与生俱来的要求-bad-for-security 常见请求。
  • (再一次,最好的选择是从 TTY 读取密码;当你做某事时,SSH 就是这样做的像使用 sshpass 一样糟糕)。
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 2014-06-23
  • 1970-01-01
相关资源
最近更新 更多