web-dev-qa-db-ja.com

シェルスクリプト:暗号化されたパスワードを復号化し、変数に保存します

Mysqlのパスワードを含むファイル「credential.txt」があります。このテキストファイルを呼び出してパスワードを取得する別のスクリプトがあります。セキュリティ上の理由から、パスワードを直接保存したくありません。そのために、Triple-DES Cipher暗号化を使用してファイルを暗号化しました。

openssl des3 -salt -in credential.txt -out credential.des3

リファレンス: https://linuxtidbits.wordpress.com/2009/01/12/encryptingdecrypting-a-file-easily-with-a-couple-bash-scripts/

次に、シェルスクリプトから、credential.des3から暗号化されたパスワードを取得し、それを変数に格納します。参照記事から、ファイルを復号化し、復号化したパスワードを別のファイルに保存する方法が示されています。

openssl des3 -d -salt -in credential.des3 -out unencrypted-data.file

問題は、復号化されたファイルをシステムに保存したくないことです。復号化の出力をキャプチャしたい。私のシェルスクリプトはcronjobsを使用して実行するように自動化されているため、ユーザーにパスワードの指定を要求できません。パスワードを復号化して次のような変数に保存する方法はありますか?

var = $(decrypted_pass)

シェルスクリプトで必要に応じて使用します。

以下のコマンドを試してみましたが、機能しません。

var = $(openssl das3 -salt -in credential.des3)

2
Rose

あなたは使うことができます

pass=$(openssl des3 -d -salt -in credential.des3)

(出力ファイルが指定されていない)

しかし、ここでの問題は、cronからスクリプトを実行していることです。データの一部をcronからスクリプトに環境変数を介して渡すように手配することはできますが、そのパスワードをファイルシステムに保存せずにcronに渡す簡単な方法はありません( crontabファイル、ほとんどの場合)。

プレーンテキストのパスワードが永続的なストレージにぶつからないようにするには、tmpfsファイルシステム(Linux)に保存するように設定できます。 mount -t tmpfs tmpfs /path/to/mount/point、またはfstabの同等のものを使用してマウントできます。また、システムがすでにtmpfsを使用して/tmpを使用している可能性もあります。

もう1つの方法は、プレーンテキストのパスワードを保持するスクリプトを継続的に実行し、sleepを使用して適切なタイミングで実際の作業を行うことです。その場合でも、スクリプトがクラッシュした場合、スクリプトは自動的に再起動されません(とにかく、スクリプトを再起動するにはパスワードを手動で入力する必要があります)。

いずれにしても、メモリにあるシークレットは、スワップがある場合は書き出される可能性があることに注意してください。 (そのため、暗号化されたスワップを使用する場合があります。)

2
ilkkachu