Subversion1.5.2 svnserve.confでのセキュリティ保護と同じく、Apacheを使えばもっと高度な設定ができる。daily dayflowerさんの「Apacheで統合Windows認証を使う」みたいに統合Windows認証でNTLM認証とかを使えば、Windowsにログインするだけで簡単に使えるし。
前提条件としては、c:\svn_repositoryに「repo01」「repo02」とリポジトリが複数あるとする。
多分、svnserve.confはsvnserveを使う場合だけであって、Apacheを使う場合は、httpd.confだけで設定できるってことかな。
どっちの設定が有効になってるかわからなくならないように、svnserve.confを以下のようにコメントアウトしておいた。
[general] #anon-access = none #auth-access = write #password-db = passwd #authz-db = authz
htpasswdでのBasic認証
svnserveのpasswdを使っての認証と同じく、Apacheの/bin/htpasswdを使って認証を設定できる。
異なるのがパスワードが暗号化される点。
C:\Program Files\CollabNet Subversion Server\httpd\bin>htpasswd.exe -c -m c:\svn_repository\htpasswd fujihara New password: ******** Re-type new password: ******** Adding password for user fujihara
authzファイルを流用できるようにsvnserveでやったときと同じくユーザを追加。Subversion1.5.2をWindowsに入れると、Apacheも一緒に入ってくれるので(C:\Program Files\CollabNet Subversion Server\httpd)、そのconf/httpd.confを修正。
Dav svnを使うのでmod_dav_svn.soモジュールを有効にしておく。
LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so <Location /svn> DAV svn SVNParentPath C:\svn_repository AuthType Basic AuthName "Subversion Basic Auth" AuthUserFile C:\svn_repository\htpasswd Require valid-user </Location>
SVNParentPathにはリポジトリを置いているディレクトリしか指定できない。リポジトリ自体に設定すると、「Can’t open directory ‘C:\svn_repository\repo’: 指定されたパスが見つかりません。 」と怒られる。
Apacheを再起動して、「http://localhost/svn/repo」にアクセスすると認証画面がでる。認証に成功するとリポジトリ内が表示される。「http://localhost/svn/repo」にアクセスすると403になってしまうのでリポジトリ一覧は見れない。
リポジトリ一覧を表示する設定
SVNParentPath 設定するなら SVNListParentPath on も指定を参考にmod_dav_svnの設定でSVNListParentPathをonに設定する。
<Location /svn> SVNListParentPath on DAV svn SVNParentPath C:\svn_repository AuthType Basic AuthName "Subversion Basic Auth" AuthUserFile C:\svn_repository\htpasswd Require valid-user </Location>
これで「http://localhost/svn」にアクセスするとリポジトリ一覧が表示される。
ユーザを追加した場合にApacheの再起動は必要?
いらないみたい。毎回ファイルを読みに行ってるみたいです。
authzによるパスごとのアクセス設定
svnserveのときと同じようにauthzファイルを作成すれば可能。
httpd.confでmod_authz_svn.soを有効にしておく。
LoadModule authz_svn_module modules/mod_authz_svn.so
1ファイルですべてのリポジトリのアクセス設定をする
httpd.confの設定は以下になる。
<Location /svn> SVNListParentPath on DAV svn SVNParentPath C:\svn_repository AuthType Basic AuthName "Subversion Basic Auth" AuthUserFile C:\svn_repository\htpasswd AuthzSVNAccessFile C:\svn_repository\authz Require valid-user </Location>
AuthzSVNAccessFileを指定するとSVNParentPathである「http://localhost/svn」で403エラーとなった。
今回の場合、C:\svn_repositoryに複数のリポジトリがあるので、authzファイルを以下のようにした。1ファイルですべてのリポジトリを管理しているのが分かる。
[aliases] [groups] admin = fujihara leader = horikita general = nagasawa,aragaki [repo01:/] @admin = rw @leader = r @general = r * = [repo02:/] @general = rw
設定を書き換えた場合、Apacheを再起動しなくても設定は反映された。
リポジトリごとの設定ファイルでアクセス設定をする
Locationを複数書けばなんとやら。
<Location /svn> DAV svn SVNPath C:\svn_repository\repo01 AuthType Basic AuthName "Subversion Basic Auth" AuthUserFile C:\svn_repository\repo01\htpasswd AuthzSVNAccessFile C:\svn_repository\repo01\authz Require valid-user </Location> <Location /svn> DAV svn SVNPath C:\svn_repository\repo02 AuthType Basic AuthName "Subversion Basic Auth" AuthUserFile C:\svn_repository\repo02\htpasswd AuthzSVNAccessFile C:\svn_repository\repo02\authz Require valid-user </Location>
でも、これだとリポジトリを増やすたびにApacheを再起動しなければならなくなる。
Webブラウザでの閲覧
Apacheだと「http://localhost/svn」のようにブラウザに打ち込めばブラウザからリポジトリを眺めることができる。authzファイルを使えば、ブラウザからの閲覧も制限可能。
