普段は file:// だったり http(s):// 経由でSVNにアクセスしていますが、svn:// 経由のアクセスを行う場合も時々あります。その時は svnserve.conf を調整してユーザー認証を設定できますが、少し嵌った事もあり、メモ。なお以下の説明はSubversionの1.5.6ベース(TortoiseSVNなら1.5系列)。 ** svnserve.confと認証周りのデフォルト値 svnadmin createでリポジトリを作成された、conf/ディレクトリの中は conf/ svnserve.conf passwd authz のようになっています。svnserve.conf が、svnserveによる svn:// 経由でのアクセスで使われる設定ファイルになります。passwd はユーザ一覧, passwd はアクセス許可設定ファイルになります。 svnserver.confのユーザ認証周りで今回のメモに関連する項目は、生成直後は次のようになっています。 [general] ... # anon-access = read # auth-access = write ... ### Uncomment the line below to use the default password file. # password-db = passwd ... ### Uncomment the line below to use the default authorization file. # authz-db = authz ... 分かりづらいのですが、 ''anon-access と auth-access はコメントアウトされているものがデフォルト値'' になっています。 逆に、password-dbとauthz-dbは、"Uncomment..." とあるようにコメントアウトされていれば未設定として扱われます。 今回嵌ったのは、password-dbとauthz-dbはコメントアウトを外さないと適用されない事に気づかず、コメントアウトしたまま、passwdやauthzファイルを弄くり回し、「おかしい・・・checkoutはできるのに、checkinでどうしても認証に失敗する・・・」と悩んでいたわけです。 ** checkoutは誰でもOK、checkinは認証されたユーザだけ。特に細かいアクセス制御は不要の時 svnserve.conf : [general] ... # anon-access = read # auth-access = write ... ### Uncomment the line below to use the default password file. password-db = passwd となります。「checkoutは誰でもOK、checkinは認証されたユーザだけ。」というのは、anon-accessとauth-accessのコメントアウトされているデフォルト値で実現されていますので、後は、認証するユーザ一覧のpasswdファイルをpassword-dbに設定して、コメントアウトを外すだけです。 password-dbにはフルパス指定も出来るので、複数リポジトリでユーザを一元化したい場合はどこか共通のpasswdファイルをフルパスで指定することで対応できると思います。 ** checkoutもcheckinも認証ユーザだけ。特に細かいアクセス制御は不要の時 svnserve.conf : [general] ... anon-access = none # auth-access = write ... ### Uncomment the line below to use the default password file. password-db = passwd "anon-access" を none にすることで、認証ユーザのみcheckoutできるようになります。 ** checkoutフリー、認証ユーザのみcheckin, 細かいアクセス制御が必要の時 svnserve.conf : [general] ... # anon-access = read # auth-access = write ... ### Uncomment the line below to use the default password file. password-db = passwd ... ### Uncomment the line below to use the default authorization file. authz-db = authz authz-dbをコメントアウトし、authzファイルを指定します。 ** リポジトリ毎ではなく、svnserve全体でsvnserve.confを統一したい場合 リポジトリディレクトリ毎のconf/svnserve.confではなく、svnserve全体で設定を統一したい場合は、svnserveの起動時にsvnserve.confを指定します。 例: $ svnserve -d -r /opt/SVNREPOS --config-file /opt/.svnserve/svnserve.conf こうしておけばpassword-dbとauthz-dbも自然と全リポジトリ共通の設定となりますので、ユーザ管理(password-db)とアクセス制御(authz-db)も一元管理が可能となります。