SubversionでWindowsドメイン認証を行うときのあれこれ
Subversion の話にイマドキどれだけの需要があるのかわからないけど書くよ。
Apache 2.2 を使う前提の話です。
Windows ドメイン認証をする
最初から入っている mod_authnz_ldap でも LDAP 認証はできるようなんだけれど、ユーザー名とパスワードをアクセス時に入力する必要があるようだ。ユーザー名とパスワードの入力なしに、ドメインにログインしている情報によって認証を行うには mod-auth-sspi モジュールを使用するという手がある*1。インストール方法は zip ファイルをダウンロードして展開した中の doc/INSTALL ファイルに書かれているので、ここでは詳述しない。
コミットした人のユーザー名をわかりやすい名前に変更したい
会社のドメインなんかだと、社員番号がユーザー名として使われているみたいなことが結構多いんじゃないだろうか。この場合、Subversion リポジトリのコミットの際にもこのユーザー名が使用されてしまうので、誰がコミットしたのかが非常に分かりづらい。これを解決するのにはフックスクリプトが使える。
post-commit.bat
REM REM users.txt に記述された内容に従って、コミットを行ったユーザーの名前を社員番号からローマ字名に変換します。 REM SET REPOS=%1 SER REV=%2 SET REPOS_URL=file:///%REPOS:\=/% SET USERS_FILE=C:\repository\svn\users.txt REM 変更者の取得 FOR /F "usebackq" %%i in (`svnlook author %REPOS% -r %REV%`) do SET AUTHOR=%%i REM 変更者をローマ字に変更する REM /F "TOKENS=1,2" %%I IN (%USER_FILE%) DO ( IF %AUTHOR%==%%I ( svn propset svn:author --revprop -r %REV% %%J %REPOS_URL% EXIT 0 ) )
pre-revprop-change.bat
REM propset を行うのに必要 exit 0
users.txt
0000000001 suzuki 0000000002 sato 0000000003 takahashi
フックスクリプト*2はリポジトリディレクトリー内の hooks ディレクトリー内に配置する。
リポジトリ内のアクセス制御をユーザーごとにパスベースで行いたい
これはちょっと難しい。mod_authz_svn を使うのがひとつの手段。
1.Subversion インストールディレクトリの bin/mod_authz_svn.so を Apache インストールディレクトリの modules ディレクトリ内にコピーする。 2.httpd.conf に以下の行を追加する。
LoadModule authz_svn_module modules/mod_authz_svn.so
3.同ファイルに AuthzSVNAccessFile ディレクティブを追加する。以下のような設定になる。
<Location /svn/test> DAV svn SVNPath C:\repository\svn\tsample SSLRequireSSL SVNReposName "サンプルリポジトリ" # Windows ドメイン認証の社員番号を元に AuthzSVNAccessFile で権限制御を行う。 AuthName "Sample Domain" AuthType SSPI SSPIAuth On SSPIAuthoritative On SSPIDomain Sample SSPIOmitDomain On # 実際には AuthzSVNAccessFile を使用した時点でこの設定は無効化されている Require valid-user Order allow,deny Allow from all AuthzSVNAccessFile "C:\repository\svn\sample\conf\authz" </Location>
4.authz ファイルで細かなアクセス許可を設定する。以下一例。
[aliases] suzuki = 0000000001 sato = 0000000002 takahashi = 0000000003 [groups] members = &suzuki,&sato developers = &takahashi [/] @members = r @developers = rw
ただ残念ながら mod_auth_sspi と mod_authz_svn は基本的に併用不可。無理に併用したこの設定では認証が無効になってしまい、すべてのユーザーがアクセス可能となってしまっている。ただし、authz ファイルで読み取り権限が与えられていない限り、リポジトリの内容を読み取ることは不可能。これで一応要件を満たしてる。