質問箱/5248

カテゴリエラー・トラブル
サマリLDAP認証利用時のアクセス制御不具合
バージョン1.5.1
投稿者Laud?
状態完了
投稿日2016-12-14 (水) 14:03:34

質問

  • PukiWikiのバージョン:
     1.5.1
  • PukiWikiが稼働しているOS種類、バージョン:
     CentOS7.2.1511
  • PukiWikiを稼働させているWEBサーバー種類、バージョン:
     Apache 2.4.6-45
  • PukiWikiが使用するPHPバージョン:
     7.0.14
  • LDAPサーバ:
     Samba4.2.3(ActiveDirectory(機能レベル2008 R2)として構築)
  • 不具合内容
    AD上の「Wiki」グループに所属している「test」ユーザでログイン後、閲覧許可されたユーザであるのに「閲覧できません」と表示される。
  • 設定内容
    https:// pukiwiki.osdn.jp/?PukiWiki/Authentication/LDAP
    上記ページを参考に設定を行いました。
    $auth_type = AUTH_TYPE_FORM;
    $ldap_use_account = 1;
    $ldap_server = 'ldap:// 192.168.0.1:389';
    $ldap_base_dn = 'ou=Users,dc=example,dc=local';
    $ldap_bind_dn = 'example\ldap';
    $ldap_bind_password = '12345678';
    $auth_provider_user_prefix_ldap = 'ldap:';
    $read_auth = 1;
    $read_auth_pages = array(
     '##'  => 'ldap:Wiki',
    );
  • ディレクトリ構成
    example.local
     Users
      ldap
      test
     Groups
      Wiki
  • 切り分け内容
    下記のとおり設定を変更したところ、「test」ユーザでの閲覧は可能になりました。
    また、「test」ユーザ以外のユーザは閲覧不可となることは確認しています。
    $read_auth_pages = array(
     '##'  => 'test',
    );

回答

  • PukiWiki1.5.1のリリース時、Samba4では動作確認していませんでした。
    ActiveDirectory由来のLDAPの場合、LDAP_MATCHING_RULE_IN_CHAINを使ってグループのネストに対応しています。 msdn.microsoft.com/en-us/library/aa746475(v=vs.85).aspx
    調べたところ、Samba 4.2 ではこのLDAP_MATCHING_RULE_IN_CHAINは動作しないようでした。bugzilla.samba.org/show_bug.cgi?id=10493 Samba 4.4以降でのサポートになっています。
    お使いのSambaは4.2ということなので、動作しません。検索時のActiveDirectoryモードをOFFにすれば、通常のmemberOf属性での検索になります。lib/plugin.phpを以下のように変更してみてください ('is_ad' => false) 。
    1階層のグループ(ユーザーのmemberOf属性に該当グループが入っている状態)であれば動作すると思います。 (こちらでは試せていません) -- umorigu 2016-12-14 (水) 19:23:09
    • 試しました。12/14(Wed) 19:23 のコードでは動きませんでした -- umorigu 2016-12-15 (木) 01:55:04
  • Samba 4.4.1は Microsoft Active Directoryと同じように動作しました。以下のように変更すると、LDAP_MATCHING_RULE_IN_CHAINを使わなくなるので Samba 4.2でも動くはずです ($fmtを上書き) -- umorigu 2016-12-15 (木) 01:57:00
    diff --git a/lib/auth.php b/lib/auth.php
    index 271da4c..1c6811c 100644
    --- a/lib/auth.php
    +++ b/lib/auth.php
    @@ -673,6 +673,7 @@ function get_ldap_groups_with_user($ldapconn, $user, $is_ad) {
        if ($is_ad) {
          // LDAP_MATCHING_RULE_IN_CHAIN: Active Directory specific rule
           $fmt = '(&(sAMAccountName=%s)(memberOf:1.2.840.113556.1.4.1941:=%s))';
    +      $fmt = '(&(sAMAccountName=%s)(memberOf=%s))';
        }
        $user_gfilter = sprintf($fmt,
          pkwk_ldap_escape_filter($user),
  • dev:BugTrack/2409にも登録しました -- umorigu 2016-12-15 (木) 09:18:32
  • 早速のご回答ありがとうございます。
    ご教示いただいた方法にて意図したとおりのアクセス制御が実現出来ました。
    ただ、下記の値を変更する必要がありました。
    変更前の設定では、「Groups」OU配下が検索範囲外であったため、合致するエントリが見つからなかったものと思われます。 -- Laud? 2016-12-15 (木) 18:51:38
    変更前
     $ldap_base_dn = 'ou=Users,dc=example,dc=local';
    変更後
     $ldap_base_dn = 'dc=example,dc=local';
  • 解決してよかったです。$ldap_base_dn は調整する必要がありますね -- umorigu 2016-12-20 (火) 19:58:15


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-20 (金) 12:54:08
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.218 sec.

OSDN