UNIXの設定ファイル中の平文パスワードを暗号化してセキュアにする方法
UNIX系の設定ファイルの中にパスワードを書くのは、あまりにインセキュアで躊躇われる。
たとえばCUIメーラーの雄 mutt で Gmail を使う場合、~/.muttrc
に
# ~/.muttrc for Gmail set imap_user = "YOUR.EMAIL@gmail.com" set imap_pass = "パスワード" set smtp_url = "smtp://YOUR.EMAIL@smtp.gmail.com:587/" set smtp_pass = "パスワード"
といった具合にパスワードを書く必要がある。
参考:
brew - mutt + Gmailを使ってCUIでのメール環境を作る - Qiita
いくらなんでもセキュリティ的にアレすぎるので、平文のパスワードを暗号化してセキュアにしよう。
大抵のUNIXの設定ファイルには、外部ファイルを読み込む source
コマンドが実装されている (source
できない設定ファイルはクソすぎる)。従って
- 設定ファイルのパスワード部分を、外部ファイルの
plain.txt
に分離 plain.txt
を暗号化してpass.rsa
にする- アプリケーションの起動時に
pass.rsa
を復号化しつつ、元の設定ファイルにsource
する
という手続きを踏むことになる。
.muttrc
を例に順番に説明しよう。
1. パスワード部分を plain.txt
に分離
set imap_pass = "パスワード" set smtp_pass = "パスワード"
を外部のplain.txt
に保存する。
2. plain.txt
を暗号化して pass.rsa
にする
次に plain.txt
を暗号化する。
こういう場合には openssl
を使うのが便利だ。
その辺の詳しい事情は以前の記事にまとめてある。
暗号化のやり方だけを抜粋すると、コマンドラインで以下のコマンドを叩けばよい。
# plain.txt というテキストファイルを暗号化して pass.rsa に書き込むコマンド $ openssl rsautl -encrypt -inkey ~/.ssh/id_rsa -in plain.txt > pass.rsa
これでpass.rsa
が作成されるはずだ。
もしエラーが出た場合には、ssh-keygen
すれば多分解決する。
詳しい話はシェルスクリプトの平文パスワードをセキュアにする方法 - 余白の書きなぐりを参照。
3 pass.rsa
を復号化しつつ、元の設定ファイルにsource
する
最後に pass.rsa
を復号化して、.muttrc
に読み込む作業が残っている。
これは .muttrc
を以下のように書き換えることで実現できる。
# ~/.muttrc for Gmail set imap_user = "YOUR.EMAIL@gmail.com" set smtp_url = "smtp://YOUR.EMAIL@smtp.gmail.com:587/" source "openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in pass.rsa |"
source
の使用は設定ファイルによってマチマチなので個別に対応せねばならないが、
多くの場合は上記のように source "openssl ... |"
で正しく動くと思う。