「バージョン管理」カテゴリーアーカイブ

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

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

Subversion:サービスとリポジトリを作り直した


前回は勉強のため解説通りにPathを設定しましたが、自分に合うように作り直しました。

リポジトリの削除

ファイラでフォルダごと削除。

新しいリポジトリの作成

svnadmin create d:\Repositories\test\

サービスの停止

sc stop 【サービス名】

サービスの削除

sc delete 【サービス名】

【サービス名】 → svnserve

サービスを登録し直す

sc create svnserve binpath= "【svnserveのPath】 --service --root 【新リポジトリのPath】" displayname= "【表示名】" depend= tcpip start= auto

サービスの開始

sc start 【サービス名】

コマンドプロンプトでの操作です。あまり使いこなしていなかったですが結構便利ですね。

svnserveでWindowにSVNサーバをインストール


svnserveを利用する形でSubversionをインストールしました。結構苦労しましたが、単純にPathの記述ミスが痛かった・・。

ダウンロード

Subversionにはいくつかパッケージがあり自分にあったものを使うと良いようです。Apacheの以下のサイトからパッケージを選んでダウンロードしました。

・CollabNet
・SlikSVN
・VisualSVN
・WANdisco
・Win32Svn

Apache Subversion Binary Packages

このサイトにCollabNetのインストーラをダウンロードしてくださいとあったのでhttp://www.collab.net/downloads/subversionよりダウンロード。

このパッケージはsvnserveを Windows サービスとしてセットアップし、セキュリティのために SASL を使う場合に必要となるいくつかのツールも含んでいるとのことです。

インストール

ダウンロードしたファイルをインストール先パスを指定して実行。

リポジトリの作成

svnserveを稼働する前に[TortoiseSVN] → [リポジトリを作成]でc:/reposTestRepoにリポジトリを作成しました。解説を読みながら作業する時はできる限りその通りにフォルダなども作ったほうが間違いが起こりづらくていいので解説の通りに作成。

svnserveをサービスとして起動

sc create svnserve binpath= “【svnserveのPath】 –service –root c:/repos/TestRepo/” displayname= “【表示名】” depend= tcpip start= auto

【svnserveのPath】 → 例:c:/svnserve/svnserve.exe

【表示名】 → 例:Subversion

Windowsの[管理ツール]でサービス(services.msc)を開始。

動作確認

ここではまりました。TortoiseSVNのリポジトリブラウザにsvn://localhost/repos/TestRepo/と入力して実行すると酷い目に。

存在しないリポジトリを延々と探し続けたためか、CPUがうなりを上げて温度73度を超えましたとか警報が出てアプリが固まってしまいタスクマネージャで強制的に終了させる事態となってしまいました。

EclipseのSubversiveからSVNリポジトリにアクセスしてみると、「ロケーション情報が誤って指定されています」「svn: No repository found in svn://localhost/repos/TestRepo/’」とダイアログが表示されてうまくいかず。

結局、Pathが間違っていたようです。「svn://localhost/TestRepo」と入力したらTortoiseSVNのリポジトリブラウザからでもSubversiveからでもうまくいきました。