Opened 15 years ago
Last modified 14 years ago
#11 deploy task
svn/tracへのアクセス権限を、http/httpsで変える — at Version 5
Reported by: | mitty | Owned by: | mitty |
---|---|---|---|
Priority: | blocker | Component: | configuration |
Keywords: | apache2 | Cc: |
Description (last modified by mitty)
目標
- via http
- anonymous相当の権限のみ取得
ログイン等による権限昇格不可(BASIC認証ヘッダ等が届いても無視する)- https側で認証を行っても、リバースプロキシではその認証情報はhttpまで渡ってこないため、http側(正確にはバックエンド側)で認証を行う必要がある
- => 権限を取得されてもPOST出来ないようにすることで書き換えを回避
- via https
認証済みアクセスのみ可書き換えに認証が必要
Trac
- fcgidはhttp側のVirtualHostで動かす
- https -- proxy -> http
- https側で、Tracの「ログイン」リンクをBASIC認証下にする
Change History (5)
comment:1 Changed 15 years ago by mitty
- Description modified (diff)
comment:2 follow-up: ↓ 3 Changed 14 years ago by mitty
- Status changed from new to assigned
comment:3 in reply to: ↑ 2 Changed 14 years ago by mitty
mitty への返信
整合性の問題
- 同じリポジトリに対して、同時にアクセスしてもリポジトリが破損しないか?
複数のVirtualHostから同じリポジトリへ同時コミット
- 次のような二つのVirtualHostを用意
- /etc/apache2/sites-available/test
ServerName test.local.mitty.jp <Location /svn/> DAV svn SVNParentPath /var/svn/inter SVNListParentPath on
- /etc/apache2/sites-available/test2
ServerName test2.local.mitty.jp 以下同じ
- /etc/apache2/sites-available/test
- それぞれのVirtualHostからcheckoutして実験
- svn co http://test.mitty.jp/svn/test
- svn co http://test2.mitty.jp/svn/test test2
- 結論は単一VirtualHostの時と同じ
- 変なエラーが出たりすることはなかった
- あくまで挙動しか調べていないので、内部(ファイルシステム等の下層)でちゃんとロックしているかは未調査
- 同じApache以下でVirtualHostを分けるのではなく、Apache自体を複数インストールした場合も未調査
- もっとも、「バージョン管理システム」の本質に関わるのでロックされていると思われる
comment:4 Changed 14 years ago by mitty
Trac側の対処法
solution 1
- http/httpsそれぞれでScriptAliasする
- http側の設定はPOST出来ないように制限する => wiki:TipAndDoc/project/trac#AccesscontrolwithApache
solution 2
- http側はScriptAliasで動かし、https側からはhttp側へリバースプロキシでアクセスするようにする
- http側の設定
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi DefaultInitEnv PYTHON_EGG_CACHE "/tmp" DefaultInitEnv TRAC_ENV_PARENT_DIR "/path/to/trac" # increase fcgi timeout value to wait slow cgi exec IPCCommTimeout 180 <Location /trac> AuthType Basic AuthName "Trac for mitty.jp" AuthUserFile /var/passwd/restrict/htpasswd <LimitExcept GET> Satisfy All Require valid-user Deny from all Allow from 127.0.0.1 </LimitExcept> </Location> <LocationMatch /trac/[^/]+/login> Satisfy All Require valid-user Deny from all Allow from 127.0.0.1 </LocationMatch>
- https側の設定
ProxyPass /trac http://localhost/trac ProxyPreserveHost On ProxyPassReverse /trac http://test.local.mitty.jp/trac <Proxy http://localhost/trac/> Allow from all </Proxy>
- ProxyPass -> localhostとすれば、IPアドレス変更時などでの設定書き換え要対応およびDNSに頼る必要を回避できる
- そのためProxyPreserveHostを使って、Hostヘッダをバックエンドへパススルーする
- ProxyPreserveHostを使ったために、バックエンドが返すHTTPリダイレクトはlocalhostでは「無い」ことに注意。ProxyPassReverseディレクティブには実際のHostヘッダを用いたURLが必要となる。
- a2enmod proxy_httpするのを忘れないこと
- http側の設定
comment:5 Changed 14 years ago by mitty
- Description modified (diff)
Note: See
TracTickets for help on using
tickets.
svn側の対処法
整合性の問題
単一VirtualHostに対する同時コミットは整合性が担保される