"history -c" не работает при вызове внутри скрипта? - PullRequest
0 голосов
/ 28 апреля 2019

Я написал скрипт bash для вызова скрипта Python, который шифрует личные данные с использованием AES, принимая в качестве единственного аргумента путь к файлу и 256-битный пароль.После того, как шифрование выполнено, он очищает историю, поэтому пароль не сохраняется, если я оставляю терминал открытым.Это выглядит примерно так:

#!/bin/bash

python aesencrypt.py "$1" "$2"
history -c
echo "" > ~/.bash_history

Файл ~/.bash_history очищается очень хорошо, но если я запустил history после запуска этого скрипта, тогда вся моя история все еще там (пока я не выйду из терминала).Здесь что-то мне не хватает?

1 Ответ

2 голосов
/ 28 апреля 2019

Не пытайтесь очистить историю - даже если это самый очевидный способ, которым передача пароля в командной строке разоблачает его, это действие дает ложное чувство безопасности: пароли, указанные наКомандная строка тривиальна для захвата через другие процессы, работающие на той же машине (даже под ненадежными учетными записями!) даже без истории вообще.

Более того, как вы заметили, оболочка может изменять только свою собственную Состояние в памяти, а не состояние в памяти отдельного процесса, который запустил его (который может даже не быть той же самой оболочкой или оболочкой вообще!).


Вместо этого,измените соглашение о вызовах вашей программы 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.
...