svnserveの認証と認可の設定をする。
上に続けて、ファイルを編集して、コミットしようとしたら、
Commit failed (detailes follow)
Connection is read-only
と怒られる。。
どうやら、リポジトリにあるconf/svnserve.confをいじる必要があるらしい。
とりあえず、以下の設定をしたい。
- AnonymouseユーザはReadOnly
- 認証されたユーザは書き込みできる。
- tagsディレクトリは認証されていようがいまいがReadOnly
まず、「AnonymouseユーザはReadOnly」「認証されたユーザは書き込みできる。」だが、これはデフォルトの振る舞いなので、わざわざ設定する必要はないが、一応、明示的に書いておく。
[/home/svn/repository/conf/svnserve.conf] [general] anon-access=read auth-access=write
Anonymouseユーザを拒否したければ、anon-access=noneとすればいい。
あとは、ユーザの定義。
svnserve.confを以下のように編集。
[/home/svn/repository/conf/svnserve.conf] [general] anon-access=read auth-access=write password-db=hogemoge.pwd realm=test relam
password-dbには、ユーザIDとそのパスワードを記述するためのファイル名を書く。上記の通りにかくと、svnserve.confと同じディレクトリにhogemoge.pwdというファイルを用意すればよい。
以下、hogemoge.pwdの内容。
[/home/svn/repository/conf/hogemoge.conf] [users] #USER=PASSWORD svn=xxxxxx masakas=xxxxxx
特に、svnserveを起動しなおすとかはしなくてもいいみたい。
これで、自マシンからコミットしてみるとユーザとパスワードを求められるので、入力すると、コミットが成功する。
特定のディレクトリにアクセス制御を設ける。
あとは、「tagsディレクトリは認証されていようがいまいがReadOnly」だけなんだけど、
リポジトリ中の特定のパスに対する詳細なアクセス制御は存在しません。多くのプロジェクトとサイトではこのレベルのアクセス制御は十分すぎるものです。しかしもしディレクトリごとのアクセス制御が必要なら、サーバプロセスとしてsvnserve のかわりに Apache を利用する必要があるでしょう。
とあり、svnserveにはそんな機能はないらしい。
しかし、pre-commitフックというものを使うと実現できるらしい。(以下の引用)
pre-commit フックを使ってファイルパス名ごとの書き込みアクセス制御を強制することができ ます。Subversion 配布パッケージには commit-access-control.pl と、より洗練された sophisticated svnperms.py スクリプトが含ま れていて、pre-commitスクリプトとして使うことができます。
けど、commit-access-control.plやら、svnperms.pyがなかったので、適当に見てみたら、リポジトリ内のhooksディレクトリにそれっぽいのがあった。
$ls /home/svn/repository/hooks/ ./ ../ post-commit.tmpl post-revprop-change.tmpl pre-commit.tmpl pre-revprop-change.tmpl start-commit.tmpl
そういうわけで、pre-commit.tmplをいじって、自前のフックを作ってみよう。
続きは、明日。。。