スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

Webページとリポジトリを同一系統のパスにした場合の懸念点と対策

Webサーバでホームページを運用しつつ、同じドメインでApache連携できる構成管理ツールのSubversionも運用したい場合、公開部分とBasic認証で隠したい部分が出てくると思いますが、いろいろ気になった点についてメモをまとめておきます。まぁ、できるなら別々のドメインで運用した方がいいかもしれませんが・・

以下のような環境と設定を前提として話を進めていきます。



Apache/2.2.3のhttpd.confの設定は
/var/www/html
配下をWebサイトとして公開しており、配下全域に403エラー404エラーErrorDocumentディレクティブで独自のページを引っかけるようにしています。

<Directory "/var/www/html">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride all
Order allow,deny
Allow from all
ErrorDocument 403 http://myserver.com/403.html
ErrorDocument 404 http://myserver.com/404.html
</Directory>


subversion.confの設定は、
/var/www/html/private/svn
配下をリポジトリを作成するフォルダとし、Basic認証をかけてます。なので、/var/www/html/private/svn 配下は部外者に見られたくない個所ということです。

<Location /svn>
DAV svn
SVNParentPath /var/www/html/private/svn

AuthType Basic
AuthName "Prototype"
AuthUserFile /etc/.svn
Require valid-user
</Location>


構成管理ツールのクライアントソフトはTortoiseSVNを扱うことにします。

まず、この前提だけだとBasic認証のかけ方に問題があります・・
TortoiseSVNなどでリポジトリにアクセスする場合は、

http://myserver.com/svn/pj


というURLを打ち込めば、確かにBasic認証はかかっており、ブラウザで同様のパスを指定した場合もユーザ名とパスワードを求めるダイアログが表示されます。

しかしながら・・ブラウザで、

http://myserver.com/private/svn/pj


とアクセスした場合は、ユーザ名とパスワード名を要求されることなく、参照できてしまいます。subversion.confの設定でBasic認証をかけたからと言って、絶対パスだと見えてしまうということです。なので、新たに、.htaccessファイルを作成して、

AuthType Basic
AuthName "Prototype"
AuthUserFile /etc/.svn
Require valid-user


と記述し、下記パスにアップロードしてやる必要があります。(もしくは、privateディレクトリへ)

http://myserver.com/private/svn


これで、

http://myserver.com/private/svn/pj


のアクセスはBasic認証をクリアしてからになります。

ここで1つの疑問があるかもしれません。それなら、最初から.htaccessファイルのみアップロードで大丈夫ではないのか?と・・
試しに、.htaccessファイルを残しsubversion.confに記述しているAuthType Basic~Require valid-userを削除してApacheを再起動させてやります。再びWebブラウザで下記パスを開いてみると、

http://myserver.com/private/svn/pj


Basic認証のユーザ名とパスワードが要求され、先ほどと同様ですが、TortoiseSVNから

http://myserver.com/svn/pj


にアクセスするとユーザ名とパスワードを要求されなくなりました。というわけで、このような構築方法だとBasic認証の記述が2重に必要だということです。

また、クライアントパソコンで新規作成したファイルをTortoiseSVNからコミットをかけると、

Error: Commit failed (details follow):
Error: Repository moved temporarily to 'http://myserver.com/404.html'; please relocate


というエラーが表示されます。表示されているエラーのURLからも、httpd.confErrorDocumentディレクティブが怪しいということがわかりますね。実際、httpd.confErrorDocumentの行をコメントアウトすれば、このエラーは出なくなります。このような安直な解決策を紹介しているサイトもありますが、httpd.confErrorDocumentを消してしまうと、せっかく用意している403.htmlや404.htmlのエラー用ページの意味が無くなります。

次のやり方がベストかどうかわかりませんが、基本的に部外者に対してBasic認証で守られているという前提で、リポジトリへのアクセス個所だけErrorDocumentを無効化してみます。
subversion.confErrorDocumentを以下のように記述し、httpd.confの動作を上書きしてやります。

<Location /svn>
DAV svn
SVNParentPath /var/www/html/private/svn

AuthType Basic
AuthName "Prototype"
AuthUserFile /etc/.svn
Require valid-user

ErrorDocument 403 .
ErrorDocument 404 .


</Location>


このように記述することで、403エラー404エラー時に表示するページはカレントのままになり、TortoiseSVNでコミットを行うと、うまくいきます。

これらの結果から、ブラウザから「http://myserver.com/svn/pj」「http://myserver.com/private/svn/pj」の2系統のアクセス方法があることや、設定が少し煩雑になることから、Webページとリポジトリが同一系統のパスにあるのは好ましくないですね。

特にセキュリティを気にしない場合はいいですが、冒頭で述べたように理想は別のドメインで運用する方がいいかもしれません。しかし、ドメイン+サーバ代などの費用が発生し容易ではない場合は、せめて「http://myserver.com/private/svn/pj」からのアクセスを無くすために、下図のように/var/www/html配下以外のパスへフォルダを移して、直接参照できないようにし、

svnfolder2.jpg

subversion.confの設定では、移動させた先を参照するよう設定すれば、

<Location /svn>
DAV svn
SVNParentPath /var/www/private/svn

AuthType Basic
AuthName "Prototype"
AuthUserFile /etc/.svn
Require valid-user

</Location>


リポジトリの移動は以下の手順を参照。
Linux CentOS低予算自宅サーバ奮闘メモ Subversionの履歴を保持したままリポジトリを移動

これによりシンプルな構成にできると思います。もっといいやり方がありましたらご教授ください。

tag : subversion apache 403エラー 404エラー ErrorDocument httpd.conf subversion.conf Basic認証 .htaccess TortoiseSVN

このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

プロフィール

白鯖

Author:白鯖
安い寄せ集めの部品で構築し、CentOS5をインストールしました。主に、Webサーバ、アプリケーションサーバとして運用中。ハードの知識はあまり無いプログラマですが、全部自前で作るのは、手間はかかるけど、レン鯖より面白いです。

ハードウェア構成

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
Max TDP控え目なCPU
安くて静音なクーラー
検索フォーム
ユーザータグ
RSSフィード
はてな
スポンサード リンク
おすすめ書籍
twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。