bash
ユーザーにパスワードを要求し、それに渡す必要があるスクリプトを作成していますopenssl
。openssl
パスワード自体を読むことはできますが、プログラムを2回実行する必要があり、ユーザーに2回尋ねたくありません。スクリプトは次のとおりです。
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
それでは、両方のインスタンスにパスワードを安全に渡すにはどうすればよいですか?
ベストアンサー1
入力時に別のファイル記述子にパスワードを渡します(暗号化用に一度、復号化用に一度)。PASS
環境にエクスポートしないでください。
read -sp 'Enter password. ' PASS
printf '%s\n' "$PASS" |
openssl enc -d -aes-256-cbc -kfile /dev/stdin -in file.old |
sed ... | {
printf '%s\n' "$PASS" |
openssl enc -e -aes-256-cbc -kfile /dev/stdin -in /dev/fd/3 -out file;
} 3<&0
システムにない場合は、次のものを/dev/fd
使用できます。-pass
ディスカッションopenssl
開いたファイル記述子から読み取るパスワードを知らせます。
printf '%s\n' "$PASS" | {
printf '%s\n' "$PASS" |
openssl enc -d -aes-256-cbc -pass fd:0 -in file.old |
tr a-z A-Z | tee /dev/tty | {
openssl enc -e -aes-256-cbc -pass fd:3 -out file; }
} 3<&0