web-dev-qa-db-ja.com

環境変数内でパスワードを暗号化する方法は何ですか

値をエクスポートする前に、ユーザー名とパスワードを設定するために使用するこのファイルがあります。

#!/bin/bash
echo -n "User:";
read user
echo -n "Password:";
read -s password

export http_proxy=http://$user:$password@$domain:$portnum

if curl -silent http://www.google.com | grep authentication_failed;
then
        echo NO CONNECT
        unset http_proxy
else
        echo OK
fi

historyprintenv、およびexport -p設定した値を確認できます

さらに、$ password内に暗号化された形式のパスワードが必要ですが、その値にはパスワードが逐語的に含まれています。

私はopensshを使用してパスワードをソルトしたり、Perlのcrypt()を使用してハッシュを印刷したりすることに慣れていますが、私の目的では、その使用法がわかりませんか?ヒントはありますか?

1
kmassada

historyコマンドからの出力に表示されるパスワードであなたが言及した問題を再現することができません。

printenvおよびexport -pからの出力に表示されるパスワードは意図したとおりに機能しています。これらのコマンドは環境変数を表示し、そこにhttp_proxy文字列を配置します。

環境変数は子プロセスによって自動的に継承されますが、他のプロセスには継承されません。同じセキュリティドメイン内のプロセスにしか表示されないため、これが大きな懸念事項であると考える理由がわかりません。

ただし、環境変数に入れるのをやめて、代わりに通常のシェル変数を使用することもできます。その場合、子プロセスには継承されません。 curlに環境変数へのアクセスを許可したい場合は、環境変数をその1つのコマンドだけに渡し、他のすべてのコマンドには渡さないようにすることができます。

#!/bin/bash
echo -n "User:";
read user
echo -n "Password:";
read -s password

proxy="http://$user:$password@$domain:$portnum"

if http_proxy="$proxy" curl -silent http://www.google.com | grep authentication_failed;
then
    echo NO CONNECT
else
    echo OK
fi
3
kasperd

むしろ、現在のユーザーだけが読める安全なファイルにパスワードを保存する必要があります。

次に、そのファイルコンテンツをパイプするか、ターゲットアプリが提供するメカニズムを使用します。

imho curlは、そのようなオプションを提供します。

0
Nils