freebsd:mod_dav_svn_mod_authz_svnでsubversionサーバの構築

文書の過去の版を表示しています。


mod_dav_svn+mod_authz_svnでSubversionサーバの構築

  • httpベースでSubversionリポジトリにアクセス。
  • httpベースでBASIC認証を用いてパスごとにSubversionリポジトリのアクセス制御。
  • http+SSLでBASIC認証を用いてパスごとにSubversionリポジトリのアクセス制御。
使用ソフト FreeBSD 9.0-BETA3
Apache 2.2.21
Subversion 1.7.0
サーバ名svnsvr
リポジトリパス /doko/soko/svn/repos
認証系のファイル置き場 /doko/soko/svn
$ sudo portinstall www/apache22
$ sudo echo 'apache22_enable="YES"' >> /etc/rc.conf
$ sudo portinstall devel/subversion

オプションでMOD_DAV_SVNにチェックが入ってなければチェックする。

以下の記述があるか確認。無ければ追加。

/usr/local/etc/apache22/httpd.conf
LoadModule dav_svn_module     libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module   libexec/apache22/mod_authz_svn.so
/usr/local/etc/apache22/Includes/subversion.conf
<IfModule dav_svn_module>
 
<Location /svn-repos>                  # リポジトリにアクセスする時のURL(http://svnsvr/svn-reposという風になる)
    DAV svn
    SVNListParentPath on
    SVNParentPath /doko/soko/svn/repos  # 実際のリポジトリのパス
</Location>
 
</IfModule>

文法チェック

Apacheの設定を弄ったら起動前にチェックすると吉。

$ apachectl configtest
Syntax OK
$ sudo chown -R www:www /doko/soko/svn/repos

Apacheを起動

$ sudo apacheclt start

して、ブラウザからリポジトリ(http://svnsvr/svn-repos/)にアクセスしてみる。設定に間違いがなければ、リポジトリのブラウズが出来るハズ。

閉じたネットワークで個人リポジトリとして使うなら、これだけでも十分かも(それならsvnserverでいいじゃん!っていうツッコミは無しで)。

必要な設定を追加する。

/usr/local/etc/apache22/Includes/subversion.conf
<IfModule dav_svn_module>
 
<Location /svn-repos>
    DAV svn
    SVNListParentPath on
    SVNParentPath /doko/soko/svn/repos
    Satisfy Any                                # 匿名ユーザーを許可
    Require valid-user                         # 匿名ユーザーに許可されてない操作は正規ユーザーを要求
    AuthType Basic                             # ベーシック認証を使う
    AuthName "Subversion Authorization"        # 認証領域の設定。設定を忘れると500エラーで小一時間苦しむことになるので注意。
    AuthUserFile /doko/soko/svn/htpasswd       # ベーシック認証のユーザーとパスワードファイル
    AuthzSVNAccessFile /doko/soko/svn/authz    # リポジトリのアクセス制御情報ファイル
</Location>
 
</IfModule>

<ilcode>AuthUserFile</ilcode>で指定したファイルにベーシック認証ユーザーを追加する。

$ sudo htpasswd -c /doko/soko/svn/htpasswd Decomo
New password: 
Re-type new password: 
Adding password for user Decomo

既にファイルがある場合、つまり2人目以降は-cオプションは付けない。さもないと新規作成扱いとなり、以前のユーザー情報が消えてしまう。

<ilcode>AuthzSVNAccessFile</ilcode>で指定したファイルに、リポジトリへのアクセス制御設定を記述する。

[groups]
admins = Decomo
devels = dev1, dev2
testers = tester1, tester2

[/]
@admins = rw
* = r

[Project1:/]
@devels = rw

[Project2:/]

[Project2:/for_tester]
@tester = rw

[secret:/]
Decomo = rw
* =

この例では、

  • adminsグループのメンバーはDecomo、develsグループのメンバーはdev1とdev2、testersグループのメンバーはtester1とtester2。
  • 全リポジトリのデフォルト権限は、ゲストユーザーを含む全ての人が読み込み権限を、adminsグループは加えて書き込み権限を持つ。
  • Project1リポジトリはdevelsグループも書き込み権限を持つ。
  • Project2リポジトリの権限はデフォルトだが、/for_testerディレクトリ以下はtestersグループも書き込み可能。
  • secretリポジトリはDecomoのみ読み書き可能。他人はアクセス不可。

という設定になる。

ここまでの設定が上手くいっていれば、Apache再起動後、パスごとのアクセス制御が有効になる。

認証やリポジトリとのやりとりが平文で行われるのはセキュリティ上よろしくないので、SSLを用いて通信路を暗号化する。

個人用途のリポジトリなので自己証明書を使う。

# openssl genrsa -aes256 2048 > /doko/soko/svn/secret.key
Generating RSA private key, 2048 bit long modulus
.........................................+++
...............................................................+++
e is 65537 (0x10001)
Enter pass phrase:(パスワード)
Verifying - Enter pass phrase:(パスワード)
# openssl req -new -key server.key >server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PRODUCTION KusoGA
Organizational Unit Name (eg, section) []:CA
Common Name (eg, YOUR name) []:svnsvr
Email Address []:(メールアドレス)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(入力しない)
An optional company name []:(入力しない)
# openssl x509 -in server.csr -days 3650 -req -signkey server.key > server.crt
Signature ok
subject=/C=JP/ST=Kanagawa/L=Yokohama/O=PRODUCTION KusoGA/OU=CA/CN=svnsvr/emailAddress=メールアドレス
Getting Private key
Enter pass phrase for server.key:(秘密鍵で入力したパスワード)
コメントを入力. Wiki文法が有効です:
 
  • freebsd/mod_dav_svn_mod_authz_svnでsubversionサーバの構築.1321029802.txt.gz
  • 最終更新: 2011-11-12 01:43
  • by Decomo