Apacheの認証ユーザをLDAPとローカルファイルを共用しつつ、LDAPの条件式を設定したい場合

若手がハマっていたので、ビシッと解決した一緒にアレコレやってみたシリーズ。タイトルが長くなってしまったけど、メモっておく。

某所のApache + Subversionサーバで、LDAP認証&ローカルファイル認証を使っていたのですが、LDAPでさらに条件式を追加する必要があった模様。要件はLDAPで特定の"description"を持つユーザを認可したい、と。Apacheのバージョンは2.2系。

アカンかった例

どれどれと見てみたら、下記の様に設定してありました。

<Location /svn>
     DAV svn
     SVNParentPath /data/svn/repos
     SVNListParentPath On

     AuthType Basic
     AuthName "Subversion Server (LDAP)"
     AuthBasicProvider ldap file
     AuthBasicAuthoritative Off
     AuthzLDAPAuthoritative Off

     AuthLDAPUrl ldap://ldap-server/ou=hoge,dc=fuga,dc=example,dc=com?uid
     Require ldap-attribute description=subversion

     AuthUserFile /etc/httpd/conf/localuser.list
     Require valid-user

     <Limit GET OPTIONS PROPFIND REPORT MERGE>
         satisfy any
     </Limit>
</Location>

LDAPでダメだったら、ローカルファイルの認証に移るような感じにしたいんだけど、これだとRequireディレクティブが複数あって、ローカルユーザの方でもldap-attribute云々を見てしまいそうな気がしていて、うまく認証できてない気がする。

成功した例

ならば、AuthLDAPUrlディレクティブに条件を持たせようと思って、以下のように設定したところ、期待通りの挙動となりました。

<Location /svn>
     DAV svn
     SVNParentPath /data/svn/repos
     SVNListParentPath On

     AuthType Basic
     AuthName "Subversion Server (LDAP)"
     AuthBasicProvider ldap file
     AuthBasicAuthoritative Off
     AuthzLDAPAuthoritative Off
     AuthLDAPUrl ldap://ldap-server/ou=hoge,dc=fuga,dc=example,dc=com?uid??(&(description=subversion))

     AuthUserFile /etc/httpd/conf/localuser.list
     Require valid-user

     <Limit GET OPTIONS PROPFIND REPORT MERGE>
         satisfy any
     </Limit>
</Location>

めでたしめでたし! =͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́

参考


実用 Subversion 第2版

実用 Subversion 第2版

  • 作者: C. Michael Pilato,Ben Collins-Sussman,Brian W. Fitzpatrick,宮本久仁男(監訳),朝枝雅子,浜本階生
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/07/27
  • メディア: 大型本
  • 購入: 6人 クリック: 45回
  • この商品を含むブログ (20件) を見る