Mysqlのパスワードを含むファイル「credential.txt」があります。このテキストファイルを呼び出してパスワードを取得する別のスクリプトがあります。セキュリティ上の理由から、パスワードを直接保存したくありません。そのために、Triple-DES Cipher暗号化を使用してファイルを暗号化しました。
openssl des3 -salt -in credential.txt -out credential.des3
次に、シェルスクリプトから、credential.des3から暗号化されたパスワードを取得し、それを変数に格納します。参照記事から、ファイルを復号化し、復号化したパスワードを別のファイルに保存する方法が示されています。
openssl des3 -d -salt -in credential.des3 -out unencrypted-data.file
問題は、復号化されたファイルをシステムに保存したくないことです。復号化の出力をキャプチャしたい。私のシェルスクリプトはcronjobsを使用して実行するように自動化されているため、ユーザーにパスワードの指定を要求できません。パスワードを復号化して次のような変数に保存する方法はありますか?
var = $(decrypted_pass)
シェルスクリプトで必要に応じて使用します。
以下のコマンドを試してみましたが、機能しません。
var = $(openssl das3 -salt -in credential.des3)
あなたは使うことができます
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
を使用して適切なタイミングで実際の作業を行うことです。その場合でも、スクリプトがクラッシュした場合、スクリプトは自動的に再起動されません(とにかく、スクリプトを再起動するにはパスワードを手動で入力する必要があります)。
いずれにしても、メモリにあるシークレットは、スワップがある場合は書き出される可能性があることに注意してください。 (そのため、暗号化されたスワップを使用する場合があります。)