環境
- 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
------------------------------------------------------------------------