Subversion:svnserveのセキュリティ(認証・アクセス制限)


svnserveはデフォルトでは誰もが「読み取り専用」でアクセスできるようになっています。チェックアウトや更新はできるけどコミットはできません。

設定を変更するにはリポジトリディレクトリ内のconf/svnserve.confファイルを使用します。

誰でも書き込めるようにする

[general]

anon-access = write

パスワードでアクセス制限する

パスワードファイルの作成

リポジトリを作成すると自動的にsvnserve.confファイルなどと一緒にpasswdというファイルが生成されます。このファイルをエディタで開くと以下のようになっているので、ここにユーザ名とパスワードを追加します。

[users]
# harry = harryssecret
# sally = sallyssecret

ユーザ名とパスワードの追加

[users]
# harry = harryssecret
# sally = sallyssecret
taro = ****** # 適当なパスワードを設定

svnserve.confファイルの設定

[general]
password-db = passwd
realm = test repos # 自由に定義してOK
anon-access = none
auth-access = write

password-dbにはユーザ名とパスワードが記述されているファイルへのPathを指定します。realmには「認証用の名前空間」となるような文字列を入力します。

anon-accessは認証されていないユーザ、auth-accessは認証されたユーザに対してのものです。read(読み出し許可),write(読み書き許可),none(すべて禁止)の3つから選ぶことができます。

もっと詳細なアクセス制御をしたい場合はApacheを使ったほうがいいと思います。

はまった点

 anon-access = none
 auth-access = write
 realm = My First Repository

上のような設定で試すと下のようなエラーが発生して苦労しました(TortoiseSVN)。

Unable to connect to a repository at URL 'svn://localhost/test'
D:\Repositories\test\conf\svnserve.conf:19: Option expected

コードの先頭に空白があったのでダメだったようです。デフォルトのコードをコメントアウトしたら普通に空白が残ってしまうので注意が必要。これを取り除けばいいだけですが、空白一つで動かなくなるとは・・。