Я пишу bashскрипт, и мне нужно спросить у пользователя его пароль и передать его openssl. Хотя opensslсам пароль могу прочитать, мне нужно два прогона программы, и я не хочу спрашивать пользователя дважды. Вот сценарий:
cp file{,.old}
read -sp 'Enter password. ' PASS; echo
export PASS
# decode | edit | encode
openssl enc -d -aes-256-cbc -k "$PASS" -in file.old | \
sed ... | openssl enc -e -aes-256-cbc -k "$PASS" -out file
unset PASS
Это небезопасно, так как пароль легко получить, посмотрев на командную строку; кто-то может прочитать это ps, например.
opensslможет прочитать пароль из переменной окружения, так что я могу заменить -k "$PASS"с -pass env:PASS, но это по - прежнему не безопасно; переменные окружения любого процесса могут быть прочитаны свободно (опять же, это psможно сделать).
Итак, как я могу безопасно передать пароль для двух opensslэкземпляров?
psчитает среду процесса /proc/<pid>/environ, но у этого файла есть 0600разрешения, поэтому только пользователь root и пользователь, выполняющий процесс, могут читать среду процесса. Я бы сказал, что это довольно безопасно.