LDAP 認証¶
必要要件¶
- PHP LDAP 拡張が有効であること
- LDAP サーバー: - OpenLDAP - Microsoft Active Directory - Novell eDirectory
ワークフロー¶
LDAP認証が有効な場合、ログインプロセスは下記のように働きます:
- 最初に、データベースを使用してユーザーの認証を試みます。
- データベース内にユーザーが見つからない場合、LDAP認証を行います。
- LDAP認証が成功した場合、デフォルトではLDAPユーザーとしてマークされ、パスワード不要でログイン出来るローカルユーザーが自動的に作成されます。
LDAP サーバーから自動的にフルネームとEMailアドレスを取得します。
認証タイプ¶
タイプ | 概要 |
---|---|
ローカル ユーザー | Kanboardのデータベースにパスワードが保存されるユーザー |
リモート ユーザー | 別のシステムによって管理されるユーザー (例:LDAP サーバー) |
ご用心
推奨する認証方法は Proxy
です。
Anonymous モード¶
define('LDAP_BIND_TYPE', 'anonymous');
define('LDAP_USERNAME', null);
define('LDAP_PASSWORD', null);
これはデフォルトの値ですが、いくつかのLDAPサーバーはセキュリティ上の理由によりanonymous ブラウズを容認しません。
Proxy モード¶
特定のユーザーをLDAPディレクトリのブラウズに使用します:
define('LDAP_BIND_TYPE', 'proxy');
define('LDAP_USERNAME', 'my proxy user');
define('LDAP_PASSWORD', 'my proxy password');
User モード¶
この方法はエンドユーザーから供給された認証情報を使用します。
例えば、Microsoft Active Directoryはデフォルトではanonymousブラウジングを許容していませんが、proxyユーザーを使用したくない場合にこの方法が使用できます。
define('LDAP_BIND_TYPE', 'user');
define('LDAP_USERNAME', '%s@kanboard.local');
define('LDAP_PASSWORD', null);
このケースでは、 LDAP_USERNAME
定数はLDAPユーザーネームを使用するパターンマッチングになっており、例えば:
%s@kanboard.local
は、my_user@kanboard.local
に置き換えられますKANBOARD\\%s
は、KANBOARD\my_user
に置き換えられます
ユーザーのLDAPフィルター¶
設定パラメータの LDAP_USER_FILTER
は、LDAPディレクトリからユーザーを見つけるのに使用されます。
例:
(&(objectClass=user)(sAMAccountName=%s))
は、(&(objectClass=user)(sAMAccountName=my_username))
に置き換えられますuid=%s
はuid=my_username
に置き換えられます
その他の例は filters for Active Directory を参照願います。
Kanboardへのアクセスをフィルタリングする例:
(&(objectClass=user)(sAMAccountName=%s)(memberOf=CN=Kanboard Users,CN=Users,DC=kanboard,DC=local))
この例では、 "Kanboard Users" グループのメンバーだけがKanboardに接続できます。
Microsoft Active Directory の例¶
我々のドメイン名が KANBOARD
(kanboard.local) で、プライマリコントローラが myserver.kanboard.local
の場合を述べます。
最初の例はproxy モードです:
<?php
// LDAP 認証を有効にする (デフォルトは false)
define('LDAP_AUTH', true);
define('LDAP_BIND_TYPE', 'proxy');
define('LDAP_USERNAME', 'administrator@kanboard.local');
define('LDAP_PASSWORD', 'my super secret password');
// LDAP サーバーのホスト名
define('LDAP_SERVER', 'myserver.kanboard.local');
// LDAP プロパティ
define('LDAP_USER_BASE_DN', 'CN=Users,DC=kanboard,DC=local');
define('LDAP_USER_FILTER', '(&(objectClass=user)(sAMAccountName=%s))');
2つ目の例は user モードです:
<?php
// LDAP 認証を有効にする (デフォルトは false)
define('LDAP_AUTH', true);
define('LDAP_BIND_TYPE', 'user');
define('LDAP_USERNAME', '%s@kanboard.local');
define('LDAP_PASSWORD', null);
// LDAP サーバーのホスト名
define('LDAP_SERVER', 'myserver.kanboard.local');
// LDAP プロパティ
define('LDAP_USER_BASE_DN', 'CN=Users,DC=kanboard,DC=local');
define('LDAP_USER_FILTER', '(&(objectClass=user)(sAMAccountName=%s))');
OpenLDAP の例¶
我々のLDAPサーバーが myserver.example.com
で、すべてのユーザー情報が ou=People,dc=example,dc=com
に保存されているものとします。
この例は、anonymous bindingを使用します。
<?php
// LDAP 認証を有効にする (デフォルトは false)
define('LDAP_AUTH', true);
// LDAP サーバーのホスト名
define('LDAP_SERVER', 'myserver.example.com');
// LDAP プロパティ
define('LDAP_USER_BASE_DN', 'ou=People,dc=example,dc=com');
define('LDAP_USER_FILTER', 'uid=%s');
LDAPS (SSLによる暗号化) の例¶
いくつかの LDAP サーバーは "LDAPS" 接続 (ポート:636) のみに設定されます。これはTLSとは異なり、平分で開始されますが(ポート:デフォルトで389)、その後同チャンネル上で暗号化をセットアップします。
PHP に LDAPS 使用を指示するために、後述する例のようにLDAPサーバーの前に "ldaps://" のプレフィックスを付ける必要があります。
我々の LDAP サーバーは myserver.example.com
で、LDAPS経由でのアクセスのみ可能です。だいたいの場合はサーバー証明書の検証をしたくないので、TLSを使用したくありません。
この例は、anonymous bindingを使用します。
<?php
// LDAP 認証を有効にする (デフォルトは false)
define('LDAP_AUTH', true);
// LDAP サーバーのホスト名
define('LDAP_SERVER', 'ldaps://myserver.example.com');
// デフォルトでは、 ldaps:// 様式のURLには検証が必要ですfalseにすると検証をスキップします。
define('LDAP_SSL_VERIFY', false);
// LDAP START_TLS を有効にする
define('LDAP_START_TLS', false);;
Disable Automatic Account Creation¶
デフォルトでは、Kanboardはユーザーアカウントが見つからない場合に自動的にアカウントを作成します。
ユーザーアカウントを手動で作成する場合、Kanboardを使用する人を制限するためにこの動作を無効化できます。
LDAP_ACCOUNT_CREATION
の値を false
にするだけです:
// 自動的にユーザーアカウントを作成
define('LDAP_ACCOUNT_CREATION', false);
同期¶
デフォルトでは、Kanboard はユーザー名を除くすべてのフィールド (role, name, email...) を同期します。
この挙動を変更したい場合、この設定パラメータを使用してください:
// この例では、LDAPからKanboardにフィールド "username" と "role" を同期しません。
define('EXTERNAL_AUTH_EXCLUDE_FIELDS', 'username,role');
トラブルシューティング¶
SELinux の制限¶
SELinuxが有効な場合、ApacheからLDAPサーバーに届くようにしなければなりません。
- SELinuxをpermissiveモードか無効に切り替えることができます(非推奨)
- 全てのネットワーク接続を許容することができ、例えば
setsebool -P httpd_can_network_connect=1
か、それ以上の制限的なルールを持たせることができます。
いずれにせよ、Redhat/CentOSの公式文書を参照願います。
デバッグモード¶
LDAP認証が正しくセットアップできない場合、デバッグモードを有効にして、ログファイルを見ることができます。