Bash は環境変数を標準入力に安全にパイプします。

Bash は環境変数を標準入力に安全にパイプします。

環境変数にパスワードが格納されています。

read -s passwd
export passwd

欠点:使用echo $passwd

これで、パスワードを許可するコマンドstdin(例kinit:)にパイプしたいと思います。ただし、bashがset -x有効になるとパスワードが漏洩します。

(warning: will leak password if set -x is enabled)
$ echo $passwd | kinit [email protected]

+ kinit [email protected]
+ echo secretpassword
...(kinit output)...

代替案:使用printenv passwd

printenvそれでパスワードをstdin、代わりに書いてみましたecho

(is this ok?)
$ printenv passwd | kinit [email protected]

+ kinit [email protected]
+ printenv passwd
...(kinit output)...

試みると、bash出力にパスワードが印刷されません。

Q:使用できますかprintenv

しかし、本当に安全ですか?パスワードを漏らすことができるbash設定はどこにありますか?

set -x編集:stdout / stderrで印刷することが修正されたとは思わないでください。

ベストアンサー1

を使用すると、printenv変数をエクスポートする必要があります。つまり、変数をスクリプト内の他のコマンドに公開する必要があります。ただし、変数のエクスポートと入力としての使用の間に他のコマンドがなく、使用後すぐに設定を解除すると、誤ってログにダンプされる可能性が低くなります。

Bashを使用している場合は、次の文字列を使用できます。

kinit [email protected] <<<"$passwd"

ここにある文字列はset -x出力に含まれず、変数をエクスポートする必要はありません。

$ bar=abc
+ bar=abc
$ cat <<<"$bar"
+ cat
abc

ただし、ここの文字列は一時ファイルを生成するため、潜在的な漏洩の原因と見なすことができます。

おすすめ記事