web-dev-qa-db-ja.com

http_proxyでプレーンテキストのパスワードを回避する

私は企業のファイアウォールの背後にいて、プロキシの分野で多くの苦痛をもたらしています。私が機能することがわかった主なアプローチは2つあります。

  1. (コマンドラインから)HTTPSおよび外部SSHの場所に接続できないという犠牲を払ってCntlmを使用します。 (Cntlmでは、PassNTLMv2を使用してユーザー名とパスワードをハッシュできるため(プレーンテキストを避けます)、プロキシとしてhttp://localhost:3128/を設定し、「実際の」プロキシにリダイレクトします。前述したように、HTTPSと外部SSHに接続できませんこの方法を使用します。)
  2. ユーザー名とパスワードをプレーンテキストでhttp_proxy変数に入れます。ただし、ユーザー名とパスワードをプレーンテキストで入力します。

明らかに、セキュリティが問題でなければ、私はオプション2を使用します。

私は.babrunrcでこれを行うことで解決策の一部を見つけました(私はBabunを使用していますが、基本的には少し余分なCygwinですが、.bashrcまたは.zshrcでも同じです)

export http_proxy="http://`echo "Y21hbjpwYXNzd29yZA==" | base64 -d`@20.20.20.20:20/"

このようにして、私のパスワードは少なくともエンコードされます。誰かが私のコンピュータに来てecho $http_proxyと入力した場合、私のパスワードが表示されますが、これを回避する方法はないと思います。

これに対する代替アプローチはありますか?それとも、文字列をエンコードするのではなく暗号化する方法ですか?それを回避する方法がなかった場合、プロンプトを開くときにパスワードを入力してもかまいません。

7
Captain Man

Base64を使用しても意味がありません。これは単純な変換です。暗号化されたデータと一緒に保存されているキーで暗号化を使用することも、それがまだ単なる変換であるため、役に立ちません。誰かが設定ファイルにアクセスすることを心配している場合は、設定ファイルに含まれていないキーで暗号化する必要があります。つまり、ログイン時にパスワードを入力する必要があります。

独自に作成するのではなく、既存の暗号化メカニズムを使用してください。

Linuxでは、ファイルの暗号化を使用する場合、ホームディレクトリを eCryptfs で暗号化するか、Linuxのディスク暗号化レイヤー(dm-crypt、cryptsetupコマンド)でディスク全体を暗号化するか、作成します encfs を使用したファイルごとの小さな暗号化ファイルシステム。後者の場合は、encfsファイルシステムをマウントし、そこに格納されているスクリプトを実行するスクリプトを用意します。

Windowsでは、ファイルを TrueCrypt / VeraCrypt に配置します。

または、パスワードマネージャーを使用します(もちろん、マスターパスワードを設定します)。 Gnomeのパスワードマネージャー(gnome-keyring)は、コマンドラインから secret-tool ユーティリティ。 Seahorse は、キーリングを探索および変更し、マスターパスワードを設定するための便利なGUIを提供します。

secret-tool store --label='Corporate web proxy password' purpose http_proxy location work.example.com

export http_proxy="http://cman:$(secret-tool lookup purpose http_proxy location work.example.com)@192.0.2.3/"

これにはD-Busが必要でした。これは通常Linuxでデフォルトで利用可能です(ほとんどの最新のデスクトップ環境では必要です)が、Cygwinで手動で起動する必要があります(正確にはわかりません)。

¹ またはその他の秘密情報を提供する。スマートカードに保存されます。

私は解決策を見つけました:openssl enc -aes-128-cbc -a -dミックスへ。 ただし、 受け入れられた回答 で述べたように、このオプションはおそらくあまり安全ではありません。

まず、ユーザー名とパスワードのコンボ(またはbase64でエンコードされたもの)をここに挿入します。

echo "<put it here>" | openssl enc -aes-128-cbc -a

パスワードの入力を2回要求します。このパスワードは、毎回入力する必要があるパスワードですhttp_proxyが設定されています。

次に、.babunrc(またはどこに置いても)、

export http_proxy="http://`echo "<output from above command>" | openssl enc -aes-128-cbc -a -d`@20.20.20.20:20/"

入力がbase64でエンコードされている場合は、代わりにこれが必要になります。

export http_proxy="http://`echo "<output from above command>" | openssl enc -aes-128-cbc -a -d | base64 -d`@20.20.20.20:20/"

<output from above command>に改行がありました\nはそれで動作します。

8
Captain Man