Redmineでは、ユーザーの認証にLDAPサーバーを使用できます。設定では、サーバー接続用に管理者自身のアカウントとパスワードを登録していることも多いと思います。
実は、初期設定のままだと、ここで入力したパスワードは『暗号化されずそのままデータベースに保存』されてしまいます。
A5:SQL Mk-2でデータベースの「auth_sources」を見ると、次のようにユーザーIDもパスワードも丸見えの状態です。
MySQLのコマンドからでも同様です。
今回は、Redmineの設定を変更して、このパスワードを暗号化する方法を紹介します。
暗号化の方法は、Redmineコントリビューターの前田剛さんからご教示いただきました(ありがとうございます!)。暗号化する機能自体は、Redmine1.2から実装されているとのことです。
なお、ユーザー情報のパスワードは初期設定のままでも暗号化されています。
ご安心ください。
今後入力するパスワードの暗号化
Bitnami Redmine for Windows を例に「今後入力するパスワードを暗号化する」手順を説明します。この設定変更後は、LDAP認証の設定画面で入力したパスワードは暗号化されて保存されます。
暗号化鍵の設定
Redmineのインストールフォルダ開きます。
インストールフォルダは「Bitnami Redmine Stack Manager Tool」から開くこともできます。
次の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認証の設定画面で入力したパスワードは暗号化されて保存されます。
入力済みパスワードの暗号化
先の「今後入力するパスワードの暗号化」だけでは、すでに入力されているパスワードまでは暗号化されません(※更新すれば暗号化されますが…)。
続けて「すでに入力されているパスワードも暗号化する」手順を説明します。
コマンドプロンプトの起動
コマンドプロンプトを起動して、コマンドファイルのあるディレクトリに移動します。
Windowsのスタートメニューの「Bitnami Redmine Stackを使用する」から、インストールディレクトリに移動した状態でコマンドプロンプトを起動できます。
コマンドファイルのあるディレクトリ:
(インストールフォルダ)\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
これで、すでに入力していたパスワードも暗号化されました。
パスワードの復号化
暗号化したパスワードを元に戻す場合は、次の通りです。
rakeコマンドの実行
「bundle exec」を付けて、rakeコマンドを実行します。
> cd apps¥redmine¥htdocs¥bin
> bundle exec rake db:decrypt RAILS_ENV=production
このコマンドによって、暗号化されていたパスワードが復号化されて平文に戻ります。
暗号化鍵の削除
Redmineの設定ファイル「configuration.yml」に追加した暗号化鍵を削除して、Redmineのサービス一式を再起動します。
あとがき
最後までご覧いただき、ありがとうございます。
暗号化や複合化する手段があるのは良いのですが、初期設定のままでは「パスワードが平文で保存される」こと自体問題だと思います。ユーザーのパスワードは初期設定のままでも暗号化されているので、「LDAPサーバー接続用のパスワードも同じ仕様でいいのでは?」と思います。
では、また。
コメント