前職の退職間際にRedmineのLDAP認証を試したのでそのやり方。
OpenLDAPは全く知らないのですが、おおよそ似たようなものかと…。

目次

  1. 前提
  2. 属性って何指定するの?
  3. 設定項目
  4. 各項目詳細説明
    1. LDAPフィルタ
    2. あわせてユーザーを作成
    3. ログイン名属性
    4. 名前・苗字属性
  5. パスワード運用から切り替える場合
    1. LDAP認証設定を2つつくる
    2. 登録済みユーザーの設定を変える
    3. ログイン名を変更する
    4. その他
  6. 注意点

前提


  • Redmine 2.5.2
  • ActiveDirectory

属性って何指定するの?


いくつかの項目で属性を指定する項目があるが、どういった属性があって何を指定すればよいかわからない場合は「ADexplorer」というADサーバの中身が覗けるツールがある。(ActiveDirectory前提)

ドメインに参加しているPCで接続して中身をみることで、何という属性にどういった値が格納されているか確認することができる。それを見ながら設定するとよいかと。

設定項目


Redemineの管理からLDAP認証を選択する。

各入力項目は以下のような感じ

項目名 入力内容 サンプル
名称 任意 LDAP1
ホスト IPアドレスもしくはホスト名 xxx.xxx.xxx.xxx(IPアドレスは変わる可能性があるのでホスト名のほうが良いと思われる)
ポート デフォルトだと389 389
アカウント ActiveDirectoryに登録されてるユーザ test@sample.com
パスワード ActiveDirectoryに登録されてるユーザのパスワード password
検索範囲 ActiveDirectoryのルートを指定? DC=xxxx,DC=xxxx …. みたいな感じになるかと
LDAPフィルタ LDAPクエリを記述することで接続可能な人を制限できる department=*購買 *
タイムアウト タイムアウトの秒数 10000
あわせてユーザを作成 ユーザが存在しない場合に新規で作成される。 ユーザーを自動で作成するならチェック入れる
ログイン名属性 ActiveDirectoryの属性を指定 sAMAccountName
名前属性 ActiveDirectoryの属性を指定 givenName
苗字属性 ActiveDirectoryの属性を指定 sn
メール属性 ActiveDirectoryの属性を指定 mail

各項目詳細説明


次に、わかりにくい項目について

LDAPフィルタ

ここにLDAPクエリを記述することでアクセスする人を制限することができる。

例えば下記のように書けば、ActiveDirectoryの「department属性」に「購買」という文字が含まれているユーザのみ接続可能になる。

1
department=*購買*

ただし、チケット20703に起票されているように、マルチバイト文字含むクエリを書いた場合に認証できないという問題があった模様。(修正済み)

2.5.2ではこのバグがあったため、マルチバイト文字を含むクエリを設定した場合は「ユーザ名もしくはパスワードが無効です」のメッセージと共にログインできなかった。

LDAPクエリは「or」や「and」の記述もできる。

あわせてユーザーを作成

ユーザーが存在しない(ログイン名属性で指定したユーザ名)がない場合に、初回ログインと同時に自動でユーザーが作成される。

既に存在しているメールアドレスでかつ異なるユーザー名(ログイン属性)でログインした場合、「メールアドレスは既に存在しています」と登録するメールアドレスの変更を促される。

ログイン名属性

ログイン時のユーザ名に使用する属性を指定する。
一般的にはメールアドレスかメールアドレスの@より前を指定するハズ。

  • メールアドレスを使う場合は「mail」
  • メールアドレスの@以前の場合は「sAMAccountName」

それ以外の属性でもできるはずだが、ふつうはやらないかと。

名前・苗字属性

ここで指定した属性の値がRedmineの名前と苗字で登録される。(あわせてユーザーを作成を指定した場合)

  • 名前は「givenName」
  • 苗字属性は「sn」

もちろん、上記以外の属性も指定できる。

パスワード運用からLDAPに切り替える場合などで、既にユーザー作成していてそちらのユーザーの名前・苗字が指定した属性の値と異なる場合は既に登録されている名前・苗字が優先される。(上書きされない)

パスワード運用から切り替える場合


退職間際にちょろちょろ試しただけなので、もっといい方法があるかも….

LDAP認証設定を2つつくる

他のやり方があるのかもしれないが、「あわせてユーザーを作成」を設定している場合、登録済みユーザーがLDAP認証でログインできない。(なんで??)

逆にチェックを外すと新規ユーザーが自動作成されない。

LDAP認証設定は複数作成できるので「登録済みユーザー向けのLDAP認証設定」と「新規ユーザー向けのLDAP」の2つを作成する。
設定の異なる箇所は「あわせてユーザーを作成」にチェック入れるかどうかだけ。

これで、登録済みユーザーは「あわせてユーザーを作成」にチェックの入っていないLDAP認証設定でログインでき、新規ユーザはその逆でログインできるようになる。

登録済みユーザーの設定を変える

LDAP認証設定を作成した場合、ユーザーの個人設定画面に「認証方式」という項目が表示されるようになる。

  • 内部の場合は「ユーザー名/パスワード」方式になる。
  • 作成したLDAP名称を選択することでそれに応じたLDAP認証になる。

両方を併用することはできない模様。

前述の「LDAP認証設定を2つつくる」で作成した「あわせてユーザー作成」にチェックが入っていないほうの認証設定を選ぶ。

ログイン名を変更する

LDAP認証設定画面で設定した「ログイン属性」にあわせて「ログイン名」を変更する。
例えば、ログイン属性に「sAMAccountName」を設定している場合は「ログイン名」をメールアドレスの@以前に変更する。

その他

前述の通り、名前・苗字は既に登録済みのものが優先されるので特に意識しなくてよい。

注意点


  • ActiveDirectoryに接続できなくなる可能性(IP変わったとか)もあるので、管理者権限を持ったパスワードでログインできるアカウントが一つはあった方がいい。
  • 認証設定は「auth_sources」というテーブルに格納されている。