[ REDMINE ] 運用中の Redmine のユーザアカウントを Active Directoryと認証連携する

[ REDMINE ] 運用中の Redmine のユーザアカウントを Active Directoryと認証連携する

はじめに

オープンソース製のプロジェクト管理ツールRedmine は開発者のみならず、様々な業種でも活用されています。
今回は、既存で稼働しているRedmineの認証部分をActive Directoryサーバと連携を行い、ID管理の効率化を図りたいと思います。

作業環境

 
以下の環境はすでに構築済みでの前提で本作業を進めます。

  • Redmineサーバ
  • ActiveDirectoryサーバ

※1 今回の事例では両サーバ上にある、ID情報は異なっている状態なので、ID情報をActiveDirectory側に統一させます

例 山田 太郎さん

  • Redmine側のID情報: Taro Yamada
  • ActiveDirectory側のID情報: User001

事前準備

なにはともあれ、作業前の状態でバックアップを取得します。

cd /var/tmp/
mysqldump -uroot -p redmine > redmine.dump

次に、RedmineサーバからActiveDirectoryサーバに問い合わせを行い、応答が返ってくるか確認します

# ldapsearch -x -D "user001@example.local" -w PASSWORD -h 192.168.100.10 -b "cn=Taro Yamada,ou=myusers,dc=example,dc=local" "(objectclass=*)"  | grep sAMAccountName
sAMAccountName: user001

Redmine(管理画面側)の設定

「管理 -> LDAP認証 -> 新しい認証方式 」の画面にて、以下の項目を入力します。

名称:任意でOK (例: ActiveDirectory)
ホスト:ADサーバのIPアドレス (例: 192.168.100.10)
ポート:389(デフォルト)
LDAPS:チェックしない
アカウント:CN形式で入力 (例:CN=Administrator,CN=Users,DC=example,DC=local)
パスワード:上記アカウントのパスワード
検索範囲:CN形式で入力 (例:DC=example,DC=local)
LDAPフィルタ:特に入力なし
タイムアウト:特に入力なし
あわせてユーザを作成:チェックする


ログイン名属性:sAMAccountName
名前属性:givenName
苗字属性:sn
メール属性:mail

設定が終了したら、「保存」ボタンを押し、認証方式一覧画面に戻ります。
この時、「テスト」を押すとActiveDirectoryサーバに接続テストが行われます。

ここまでは、新規でRedmineサーバを利用し、ActiveDirectoryサーバを連携するまでの手順です。
Redmineにログインする際に、Redmine上にユーザが存在しなければ、ActiveDirectory認証用のユーザが発行されます。

Redmine(データベース側)の設定

ここからは、既存ですでに登録されているRedmineユーザの認証方式をActiveDirectory認証に切り替える手順を記載します。

まずはRedmine上のデータベースにあるユーザ情報を確認します。

mysql> select id,login,auth_source_id,type from users WHERE type = 'User' LIMIT 10 ;
+----+-------------------+----------------+------+
| id | login             | auth_source_id | type |
+----+-------------------+----------------+------+
| 16 | yamada_taro       |           NULL | User |
| 17 | mertie_nader      |           NULL | User |
| 18 | davon_predovic    |           NULL | User |
| 19 | cydney_jacobs     |           NULL | User |
| 20 | marcella_kiehn    |           NULL | User |
| 21 | damion_bode       |           NULL | User |
| 23 | josiane_hackett   |           NULL | User |
| 24 | rosario_bauch     |           NULL | User |
| 25 | ardella_wiegand   |           NULL | User |
+----+-------------------+----------------+------+

Redmineのデフォルトの認証方式では「auth_source_id」がNULL扱いになっています。
ActiveDirectory認証に切り替える場合は、以下のUPDATEコマンドで変更を行います。

mysql> UPDATE users SET auth_source_id = '1' WHERE type = 'User' ;

mysql> select id,login,auth_source_id,type  from users WHERE type = 'User' LIMIT 10 ;
+----+-------------------+----------------+------+
| id | login             | auth_source_id | type |
+----+-------------------+----------------+------+
| 16 | yamada_taro       |              1 | User |
| 17 | mertie_nader      |              1 | User |
| 18 | davon_predovic    |              1 | User |
| 19 | cydney_jacobs     |              1 | User |
| 20 | marcella_kiehn    |              1 | User |
| 21 | damion_bode       |              1 | User |
| 23 | josiane_hackett   |              1 | User |
| 24 | rosario_bauch     |              1 | User |
| 25 | ardella_wiegand   |              1 | User |
+----+-------------------+----------------+------+

次に、ActiveDirectoryサーバ上にあるID情報と統一を行う為、個別に login 情報名を変更して、既存のパスワードハッシュを NULL へ更新します。
この作業を行う事で、ActiveDirectoryサーバにあるID情報と同じになるので、認証ができるようになります。

mysql> UPDATE users SET login = 'user001' WHERE id = '16' ;   # yamada_taro
mysql> UPDATE users SET login = 'user002' WHERE id = '17' ;   # mertie_nader
mysql> UPDATE users SET login = 'user003' WHERE id = '18' ;   # davon_predovic
mysql> UPDATE users SET login = 'user004' WHERE id = '19' ;   # cydney_jacobs

mysql> select id,login,auth_source_id,type  from users WHERE type = 'User' LIMIT 10 ;
+----+-------------------+----------------+------+
| id | login             | auth_source_id | type |
+----+-------------------+----------------+------+
| 16 | user001           |              1 | User |
| 17 | user002           |              1 | User |
| 18 | user003           |              1 | User |
| 19 | user004           |              1 | User |
| 20 | user005           |              1 | User |
| 21 | user006           |              1 | User |
| 23 | user008           |              1 | User |
| 24 | user009           |              1 | User |
| 25 | user010           |              1 | User |
+----+-------------------+----------------+------+


mysql> UPDATE users SET salt = NULL WHERE type = 'User' ;

これで諸処の設定は完了です。
ログイン画面にて、ActiveDirectoryで設定している認証情報でログインができれば、終了となります。

まとめ

ActiveDirectoryサーバと認証連携を行うことで、ID管理の効率化が図れました。
作業記録的な内容となってしまいましたが、何かのご参考になれば幸いです。

参考文献

LDAP認証 & Redmine Guide 日本語訳

[amazonjs asin=”4822279952″ locale=”JP” title=”Redmine超入門 増補改訂版 (日経BPムック)”]

[amazonjs asin=”4822298280″ locale=”JP” title=”ひと目でわかる Active Directory WindowsServer 2012 R2版 (TechNet ITプロシリーズ)”]