Jenkinsの設定からメール設定情報を引き抜く
Jenkinsサーバの中からメール設定(SMTP設定)を引き抜く手法について、実験してみたことのメモです。
注意:
本手順は管理権限を濫用した行為とみなされる場合があります。また、認証情報に個人情報が含まれる場合、濫用とみなされるか否かに関わらず、本手順を適用しないようにして下さい。(システム管理権限者としての最低限の責務です。)
本題
前提
環境はWindows10です。Jenkinsは最新版を使いました。
環境変数JENKINS_HOMEを確認する
{JenkinsのURL}/systemInfo
にブラウザでアクセスします。JENKINS_HOME
環境変数を確認します。(ページ内検索して下さい)
設定を抜き出す
- コマンドプロンプトを管理者権限で立ち上げます。
(スタートメニューでcmd
と打ち、Ctrl + Shift + Enterを入力します。(エクスプローラではCtrl+Shiftを入力しながらのEnterは管理者権限での実行になります。)) - 先程抜き出した
JENKINS_HOME
にcdします。 hudson.plugins.emailext.ExtendedEmailPublisher.xml
をエディタで開きます。*1notepad hudson.plugins.emailext.ExtendedEmailPublisher.xml
code hudson.plugins.emailext.ExtendedEmailPublisher.xml
<mailAccount></mailAccount>
で挟まれた部分をメモします。
smtpPasswordを復号する
この手順は、上記mailAccountが個人情報を含んでいないと確信できるときにのみ適用して下さい。 個人情報を含んでいる可能性がある場合は諦めて下さい。
smtpPasswordはJenkinsのSecretクラス(以下参照)により暗号化されています。
jenkins/Secret.java at master · jenkinsci/jenkins · GitHub
これを復号するために、Jenkinsのscript consoleを使用します。
{JenkinsのURL}/script
にアクセスします。println(hudson.util.Secret.decrypt("暗号化されたsmtpPassword"));
を入力し、[実行] をクリックします。- 「結果」部分に復号されたパスワードが出力されます。
手順は以上ですが、下記に余談を続けます。
余談
管理権限者としての責務
Linux系ディストリビューションでよく使われる sudo
コマンドでは、初回のsudo時に下記のような教訓(?)が表示されます。
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
- 他人のプライバシーを尊重するように。
- 操作を打つ前に考えるように。
- 大きな力には大きな責任が伴う。
管理権限を行使する場合には常に頭の片隅においておくべきだと思います。 よく半寝で環境全壊させてるので説得力無いですが。私にsudoコマンドを打たせるべきではない。
Jenkinsの暗号化、復号化から読み取れる思想
一般的にサーバでの個人情報保管については大前提が3つあります。
- 必要なければ保管しない。(クレジットカード情報など、本当にやばい情報は責任取れないなら毎回入力させる。)*2
- どうしても保管する場合、復号が不要な場合にはハッシュ化などにより復号不可能な(非可逆な)暗号化を行う。
- どうしても復号が必要な情報を保管する場合、鍵と暗号化情報は一度に漏洩しにくい場所に保管する。
よくある「『パスワードを忘れました』ボタンを押したら生のパスワードがメールで送られてきました」なんていうのは2の観点から論外ですね。
Jenkinsのメールパスワードは3. の「どうしても復号が必要な情報」にあたります。
これの復号に必要な鍵は、設定ファイルと同じディレクトリの secret
ディレクトリに保管されているものだと思います。*3 なので設定ファイルのディレクトリが漏洩した場合、暗号化してあっても簡単に情報が漏洩してしまいそうです。*4
管理者的思想から見ればこれはあながち悪いものではなく、設定ファイルのディレクトリをバックアップしておけば、環境が壊れても暗号化情報を失うことはないというメリットはあります。ただ、これなら暗号化しなくてもいいのでは…とも思ってしまいますね。
おそらく可用性をなるべく維持した結果がこうなっているので、セキュリティは本当に難しいと思います。
以上。