次回の CentOS に Subversion を導入する では単純に over http の SVN 環境を導入したけど、
実際にソースを公開して、一方でソースを更新するにはアクセス制限をしとく必要がある。
今回は svn+ssh を構築して、 ssh アクセスでの更新のみを許可する環境を作ってみた。
まず svn ユーザとグループを作成する。
グループ名は svnusers とし、ユーザはとりあえず svn とした。
# groupadd svnusers # useradd svn -g svnusers -s /bin/bash
ユーザを作成したら、これらのユーザが作成するファイルのパーミッションの初期値が 775 になるように umask を 002 にする。
これは他の svn ユーザが作成したファイルでも svnusers に属していれば更新を可能にするため。
# /home/svn/.bashrc
# User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi umask 002
次に前回作成した親レポジトリディレクトリの属性を変更する。
変更内容としては、所有者を root:svnusers に変更し、パーミッション値を 775 に変更する。
# chown -R root:svnusers /home/svn # chmod -R 775 /home/svn
これで apache からの更新は不可能になった。
ただ、このままでは apache は更新できないことが分からずに、エラーアクセスをし続けるので、 apache 側の設定も変更してやる。
# vi /etc/httpd/conf.d/subversion.conf
<Location /repos> DAV svn SVNParentPath /home/svn # # # Limit write permission to list of valid users. <LimitExcept GET PROPFIND OPTIONS REPORT> # # Require SSL connection for password protection. # # SSLRequireSSL # deny from all # AuthType Basic # AuthName "Authorization Realm" # AuthUserFile /path/to/passwdfile # Require valid-user </LimitExcept> </Location>ここまで行ったらサーバの設定を再読み込みさせて、テストで ci を実行。
# service httpd reload $ export SVN_EDITOR=vi $ svn ci Test/Form1.cs svn: Commit failed (details follow): svn: MKACTIVITY of '/repos/Test/!svn/act/2dac59ce-9332-0410-8cf3-f8372563886f': 403 Forbidden (http://www.enjoitech.jp)良さそう。
$ svn list svn+ssh://svn@localhost/home/svn/Test Enter passphrase for key '/home/svn/.ssh/id_rsa': App.ico AssemblyInfo.cs Form1.cs Form1.resx WindowsApplication2.csproj WindowsApplication2.sln何となくできてるっぽい。 ci も試す。
$ svn ci Test/Form1.cs Enter passphrase for key '/home/svn/.ssh/id_rsa': Sending Test/Form1.cs Transmitting file data . Committed revision 3.
オッケー。
これで、開発者は svn+ssh 、その他は over http でやるという環境が完成。
基礎が無かったので、結構道のり長かったよ。
Subversion Dev: svn+ssh Setup Mini-tutorial
redemption in a blog - Setting up svnsync-ed (mirrored) SVN repositories on Ubuntu (part 1 of 2)