Help us understand the problem. What is going on with this article?

Apache2経由でSVNアクセス時にLDAPで認証し、認証済みユーザとして任意のLDAP属性をSVNに渡す

More than 5 years have passed since last update.

環境

  • CentOS 6.4
  • Subversion 1.6.11
  • Apache2 2.2.15 (2.2.3以下では、AuthLDAPRemoteUserAttribute ディレクティブ未実装)
  • OpenDJ 2.6.0
  • Oracle JDK 1.7.25

概要

  • mod_authnz_ldapを使用
  • LDAPに存在するユーザでBASIC認証を実施
  • SVNから送るコミットメールに乗せるコミットユーザ名をいい感じにする 具体的には、ApacheのREMOTE_USER環境変数を任意のLDAP属性にする

関連文献

Apache Module mod_authnz_ldap
http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html#authldapremoteuserattribute

事前準備

ミドルウェアセットアップ

httpdとsubversionのインストール
yum -y install httpd subversion mod_dav_svn

javaの導入は下記に譲って省略。
http://java.com/ja/download/help/index_installing.xml

OpenDJの導入も本稿の本意ではないので省略。
以降の記述に関わる部分は、
* ベース DN: dc=nt67,dc=org
* セットアップディレクトリは /opt/opendj/

OpenDJの設定内容
/opt/opendj# /opt/opendj/bin/status


>>>> OpenDJ LDAP 接続パラメータを指定します

管理者ユーザーのバインド DN [cn=Directory Manager]: cn=admin

ユーザー 'cn=admin' のパスワード: 

          --- サーバーの状態 ---
サーバーの稼動状態:   起動中
開いている接続数:    1

          --- サーバーの詳細 ---
ホスト名:        ldap.nt67
管理ユーザー:      cn=admin
インストールパス:    /opt/opendj
バージョン:       OpenDJ 2.6.0
Java のバージョン: 1.7.0_25
管理コネクタ:      ポート 5444 (LDAPS)

          --- 接続ハンドラ ---
アドレス:ポート     : プロトコル : 状態
-------------:-------:---
--           : LDIF  : 無効
0.0.0.0:161  : SNMP  : 無効
0.0.0.0:636  : LDAPS : 無効
0.0.0.0:1389 : LDAP  : 有効
0.0.0.0:1689 : JMX   : 無効
0.0.0.0:8080 : HTTP  : 無効

          --- データソース ---
ベース DN:    dc=nt67,dc=org
バックエンド ID: userRoot
エントリ:      1
レプリケーション:  

LDAPのエントリ情報

LDAPのディレクトリ設定情報

entry.ldif
dn: dc=nt67,dc=org
objectClass: dcObject
objectClass: organization
dc: nt67
o: nt67.org

dn: ou=User,dc=nt67,dc=org
objectClass: organizationalUnit
ou: User

dn: cn=user001,ou=User,dc=nt67,dc=org
objectClass: person
objectClass: inetOrgPerson
cn: user001
sn: user001_sn
userPassword: user001
mail: user001@nt67.org

dn: cn=user002,ou=User,dc=nt67,dc=org
objectClass: person
objectClass: inetOrgPerson
cn: user002
sn: user002_sn
userPassword: user002
mail: user002@nt67.org

dn: cn=user003,ou=User,dc=nt67,dc=org
objectClass: person
objectClass: inetOrgPerson
cn: user003
sn: user003_sn
userPassword: user003
mail: user003@nt67.org

SVN設定

/etc/httpd/conf.d/subversion.conf
<Location /repos>
   DAV svn
   SVNParentPath /var/www/svn

   AuthType Basic
   AuthBasicProvider ldap 
   AuthzLDAPAuthoritative off
   # 認証済みユーザ名として mail属性を設定する
   AuthLDAPRemoteUserAttribute mail
   AuthName "Auth for nt67.org"
   # 認証用文字列として cn を、あわせてmail属性を引っ張ってくる。
   AuthLDAPUrl ldap://ldap.nt67:1389/ou=User,dc=nt67,dc=org?cn,mail
   Require valid-user
</Location>

結果

コミットするときの認証として、cn属性のユーザ名を使う。
コミットログには mail 属性が設定される。

commit
svn commit -m "first commit" --username user001 --password user001

svn log
------------------------------------------------------------------------
r1 | user001@nt67.org | 2013-08-17 23:09:13 -0700 (土, 17  8月 2013) | 1 line

first commit
------------------------------------------------------------------------

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away