RedmineでLDAP認証用パスワードを暗号化

Redmineでは、ユーザーの認証にLDAPサーバーを使用できます。設定では、サーバー接続用に管理者自身のアカウントとパスワードを登録していることも多いと思います。

実は、初期設定のままだと、ここで入力したパスワードは『暗号化されずそのままデータベースに保存』されてしまいます。

LDAP認証設定のパスワード入力欄
Redmine LDAP認証の設定画面

A5:SQL Mk-2でデータベースの「auth_sources」を見ると、次のようにユーザーIDもパスワードも丸見えの状態です。

A5:SQL Mk-2でauth_sourcesを表示したところ
A5:SQL Mk-2でauth_sourcesを表示

MySQLのコマンドからでも同様です。

MySQLコマンドでパスワードを表示したところ
MySQLコマンドでパスワードを表示

今回は、Redmineの設定を変更して、このパスワードを暗号化する方法を紹介します。

暗号化の方法は、Redmineコントリビューターの前田剛さんからご教示いただきました(ありがとうございます!)。暗号化する機能自体は、Redmine1.2から実装されているとのことです。

なお、ユーザー情報のパスワードは初期設定のままでも暗号化されています。
ご安心ください。

A5:SQL Mk-2でusersを表示したところ
A5:SQL Mk-2でusersを表示
目次

今後入力するパスワードの暗号化

Bitnami Redmine for Windows を例に「今後入力するパスワードを暗号化する」手順を説明します。この設定変更後は、LDAP認証の設定画面で入力したパスワードは暗号化されて保存されます。

暗号化鍵の設定

Redmineのインストールフォルダ開きます。
インストールフォルダは「Bitnami Redmine Stack Manager Tool」から開くこともできます。

Open Application Folderをクリック
Bitnami Redmine Stack Manager ToolのWelcomeタブ

次のRedmineの設定ファイルをテキストエディタで開きます。

Redmineの設定ファイル
フォルダ: (インストールフォルダ)\apps\redmine\htdocs\config
ファイル:configuration.yml

次の個所を見つけます。

  # Key used to encrypt sensitive data in the database (SCM and LDAP passwords).
  # If you don't want to enable data encryption, just leave it blank.
  # WARNING: losing/changing this key will make encrypted data unreadable.
  #
  # If you want to encrypt existing passwords in your database:
  # * set the cipher key here in your configuration file
  # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
  #
  # If you have encrypted data and want to change this key, you have to:
  # * decrypt data using 'rake db:decrypt RAILS_ENV=production' first
  # * change the cipher key here in your configuration file
  # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
  database_cipher_key:

Google翻訳によると、次のようなことが書かれています。

# データベース内の機密データの暗号化に使用されるキー(SCMおよびLDAPパスワード)。
# データ暗号化を有効にしたくない場合は、空白のままにします。
# 警告:このキーを紛失/変更すると、暗号化されたデータが読み取れなくなります。
#
# データベース内の既存のパスワードを暗号化する場合:
# * 構成ファイルでここに暗号化キーを設定します
# * ‘rake db:encrypt RAILS_ENV = production’を使用してデータを暗号化します
#
# 暗号化されたデータがあり、これを変更する場合キー、次のことを行う必要があります。
# * 最初に ‘rake db:decrypt RAILS_ENV = production’を使用してデータを復号化します
# * 構成ファイルのここで暗号化キーを変更します
# * ‘rake db:encrypt RAILS_ENV = production’を使用してデータを暗号化します
database_cipher_key:

最後の行の「database_cipher_key」に、任意の暗号化鍵を追加します。
「:」の後に半角スペースを空けて入力します。

  database_cipher_key: OpenSesame!

Redmineのサービス再起動

Redmineのサービス一式を再起動します。
これ以降、LDAP認証の設定画面で入力したパスワードは暗号化されて保存されます。

Restart Allをクリック
Bitnami Redmine Stack Manager ToolのManage Serversタブ

入力済みパスワードの暗号化

先の「今後入力するパスワードの暗号化」だけでは、すでに入力されているパスワードまでは暗号化されません(※更新すれば暗号化されますが…)。

続けて「すでに入力されているパスワードも暗号化する」手順を説明します。

コマンドプロンプトの起動

コマンドプロンプトを起動して、コマンドファイルのあるディレクトリに移動します。
Windowsのスタートメニューの「Bitnami Redmine Stackを使用する」から、インストールディレクトリに移動した状態でコマンドプロンプトを起動できます。

Bitnami Redmine Stackを使用するをクリック
Windowsのスタートメニュー

コマンドファイルのあるディレクトリ:

(インストールフォルダ)\apps\redmine\htdocs\bin

> cd apps¥redmine¥htdocs¥bin

rakeコマンドの実行

bundle exec」を付けて、rakeコマンドを実行します。

> bundle exec rake db:encrypt RAILS_ENV=production

「bundle exec」を付けることによって、Gemfile.lockに書かれているインストール時のバージョンのgemが実行されます。付けなかった場合は、Gemfile.lockを無視してgemのバージョンが決定されるため、そのバージョンのgemがインストールされていないとエラーになります。

※ というか、Bitnamiの場合ほぼ100%エラーになるので必ず付けましょう(;^_^A

これで、すでに入力していたパスワードも暗号化されました。

暗号化されたauth_sourcesのaccount_password
A5:SQL Mk-2でauth_sourcesを表示

パスワードの復号化

暗号化したパスワードを元に戻す場合は、次の通りです。

rakeコマンドの実行

bundle exec」を付けて、rakeコマンドを実行します。

> cd apps¥redmine¥htdocs¥bin
> bundle exec rake db:decrypt RAILS_ENV=production

このコマンドによって、暗号化されていたパスワードが復号化されて平文に戻ります。

暗号化鍵の削除

Redmineの設定ファイル「configuration.yml」に追加した暗号化鍵を削除して、Redmineのサービス一式を再起動します。

あとがき

最後までご覧いただき、ありがとうございます。

暗号化や複合化する手段があるのは良いのですが、初期設定のままでは「パスワードが平文で保存される」こと自体問題だと思います。ユーザーのパスワードは初期設定のままでも暗号化されているので、「LDAPサーバー接続用のパスワードも同じ仕様でいいのでは?」と思います。

では、また。

コメント

コメントする

目次