「Subversion」ユーザごとにリポジトリに対する権限を設定する方法

Subversionリポジトリごとにユーザに権限を設定する方法について調べたので、その時のメモ。

まず、Subversion のインストールを行なう ( なんでインストールからやねんとなりますが、過去のエントリー
にインストール書いたものがなかったのでご了承ください )。今回は yum でやった。

yum install subversion

リポジトリを作成しておく。

mkdir /var/www/svn/repo1
svnadmin create /var/www/svn/repo1

適当な作業ディレクトリで "リポジトリのチェックアウト" - "ファイルの追加" - "コミット" を行なっておく。

svn checkout file:///var/www/svn/repo1/
echo aaa > aaa.txt
echo bbb > bbb.txt
svn add aaa.txt bbb.txt
svn commit -m "add aaa.txt bbb.txt"


Apache と連携して使いたいので、その設定を行なう。ApacheCentOS に同梱のものを使います。
yum で mod_dav_svn をインストールする。

yum install mod_dav_svn

Apache の設定ファイル ( /etc/httpd/conf.d/subversion.conf ) を以下のように編集。
サンプル的な記述があらかじめあるので、そいつベースに必要な部分を書き換える感じで。

<Location /repos>
   DAV svn
   SVNParentPath /var/www/svn

   # Limit write permission to list of valid users.
   # 読み取りに関しても認証したいのでコメントアウトしておく
   #<LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL

      AuthType Basic
      AuthName "Subversion Test"
      AuthUserFile /var/www/svn/.htpasswd
      Require valid-user

      AuthzSVNAccessFile /var/www/svn/authzsvn.conf
   #</LimitExcept>
</Location>

/var/www/svn/.htpasswd とかをここに置くのはよくないと思うけど、まぁ検証なのでわかりやすい場所に。

.htpasswd にユーザ hoge を追加。

htpasswd -b -c -m /var/www/svn/.htpasswd hoge hoge

authzsvn.conf に、ひとまず以下の設定を追記

[/]
hoge = rw

上記設定が終わったら、Apache を起動して Web ブラウザから "http://XXX.XXX.XXX.XXX/repos/repo1"
にアクセスしてみる。ちゃんと Basic 認証が機能してユーザ/パスワードを入力するとリポジトリが見れる。


ここからが本題 ( 長かった ) のユーザごとにリポジトリの権限を設定する方法について。
こんな感じの設定を行なう。

・hoge は repo1 の読み込み/書き込みが可能 repo2 へはアクセスできない
・uga は repo1 へはアクセスできない repo2 の読み込みは可能

ユーザ uga を追加

htpasswd -b -m /var/www/svn/.htpasswd uga uga

authzsvn.conf を以下のように書き換える。

[repo1:/]
hoge = rw

[repo2:/]
uga = r

ちゃんと設定できてそうな感じ。

また、グループごとに権限を設定することも可能みたい。
例えば、上記の権限と同様で hoge が dev1 グループに uga が dev2 グループの所属している場合、
以下のような設定も可能。ユーザごとに設定する手間が省けるので楽ですな。

[groups]
dev1 = hoge
dev2 = uga

[repo1:/]
@dev1 = rw

[repo2:/]
@dev2 = r


長くなりましたが、以上です。