- ベストアンサー
UNIX+Apache構成でのWEBアクセスについて
- UNIX・Apache2の環境下でのWEBアクセスについて質問があります。特定の状態のファイルをプログラムによって閲覧したいのですが、所有者がApacheユーザではないため操作ができないか疑問です。
- Apacheのbasic認証を利用してファイルを閲覧する方法を検討していますが、所有者がApacheユーザではないため、ファイル操作ができない可能性があります。一つのディレクトリ内でユーザに閲覧させるファイルを操作する場合、どのような対処方法が良いのでしょうか?
- UNIX・Apache2の環境下でwebドキュメントフォルダ配下に格納された特定のファイルをプログラムによって閲覧したい場合、所有者がApacheユーザではないため、ファイル操作ができないか心配です。一つのディレクトリ内でユーザに閲覧させるファイルを操作する場合、対処方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
結果的にお望みと思われる事は出来ますが 質問の文面どおりの事は出来ません。 何故なら.cgiの実行IDは一人のユーザーIDもしくはApache(等)の いずれかですが 例えば.cgiの所有者がsatouであれば cccc.xlsは読めますが aaaaとbbbbはアクセスできませんので ##以下、仮に全てユーザーsatouとして書きます## *1.Suexecの場合に利用可能な方法 全てのxlsと.cgi =owner:satou パーミッション:700 SuexecのCGIは実行ID:satouですので全てのxlsが読めます CGI以外の普通にアクセスする場合の実行IDはApache(等)ですので.xlsに直接アクセスは出来ません *2.Suexecではないが.htaccessの機能が自由に使える場合 全てのxls=owner:satou パーミッション:704 (または604) .cgi=owner:satou パーミッション:705 .htaccessに <Files ~ "\.xls$"> Order allow,deny Deny from all </Files> などと記述する。 これは通常.htaccess自体にはアクセス出来ないようになっていますがその方法をxlsに対して使うものです CGIからのfile読み込みはこれの影響を受けません 但し、同じサーバー内の他のユーザーのCGIからも同様に読めます *3. .htaccessも自由には使えないが拡張子.cgiはCGIアプリケーションとしてどこでも置ける パーミッションなどは2.と同様 拡張子.xlsを.cgiに変えればaaaaなどに直接アクセス すれば当然サーバーエラーになりますので読めません 以下は2.と同じ
その他の回答 (3)
- umasikajiro
- ベストアンサー率67% (545/803)
#2の補足に対する返信ですが 結論から言えば、専用サーバー(自宅サーバーも含む) 等でroot権限をあなたがお持ちで有れば、それも可能でしょう ただ効率的かどうかとなると、、、 xlsを置くたびに、いちいちrootになってchownコマンドで ownerとgroupを書き換えなくては行けませんのでねえ $ENV{'REMOTE_USER'} が 例えばsaitouであっても owner:saitouのfileに対し owner権限でアクセス出来る分けではないことは理解されましたよね? 私がやるとしたら例えば saitou-aaaaa.xls suzuki-bbbbb.xls satou-ccccc.xls 等と言うように ユーザー名-希望のfile名 と言うfile名にして CGIプログラムの中で$ENV{'REMOTE_USER'} がsaitouの場合は 頭にsaitou-がつくfileだけを読み込み対象として、 CGIの画面に表示するfile名は- から後ろの aaaa.xls とすれば良いのではないかと思いますね
お礼
丁重なご解答ありがとうございます。 確かにGroupの変更を随時するのは面倒ですので、 umasikajiro様のユーザ名-ファイル名.拡張子での 処理をメインに実施したいと思います。 初心者的な質問に詳細な情報を頂き本当にありがとうございます。 自分自身にも大変ためになりました。
- umasikajiro
- ベストアンサー率67% (545/803)
しつこく書いて済みませんが、自分への覚書も兼ねて、、 #1の*2について .htaccessでBASIC認証をするためにはhttpd.confの AllowOverride に AuthConfig が必要 <Files ~ "\.xls$"> Order allow,deny Deny from all </Files> を記述するためには AllowOverride にLimit が必要 従って*2を実現するためには AuthConfigとLimitの両方が許可されていないと無理 AllowOverride All でも勿論OK
- umasikajiro
- ベストアンサー率67% (545/803)
あ、で、肝心の > Apacheのbasic認証を利用し、ログインしたユーザ名 ごとに対応したfileを読み込むには下記1,2,3、のいずれかを設定の上でCGIの中で ユーザー名と対応fileのデータベースが出来る用にしてから (Perlなら)環境変数 $ENV{'REMOTE_USER'} を読んで if分岐などして表示させれば出来ますね
補足
umasikajiro様 丁重なご回答ありがとうございます。 ユーザでの概念はこの内容で理解できたのですが、 逆にcgiと各ファイルのGroupでの処理は実現出来るのでしょうか? 以下、例ですが... ・Apacheのユーザ ・www/www(owner/Group) ・利用者ユーザ ・saitou/user(owner/Group) ・suzuki/user(owner/Group) ・satou/user(owner/Group) ・ ファイル名 owner group パーミッション aaaaa.xls saitou www *** bbbbb.xls suzuki www *** ccccc.xls satou www *** とした場合、上述の3つのファイルのGroupはapacheになり cgiとしてはapacheのwww(owner?Group?)でアクセスすると 思いますが、このapacheでファイルを参照し cgiで$ENV{'REMOTE_USER'} とファイルのownerと一致したのも を対象に処理をする。と言う事が出来れば、特に大きなConfig変更が なく動作出来るのかな?と思われますが、初心者的なご質問で 申し訳ありませんが宜しくお願い致します。
お礼
ご返信が大変遅くなり申し訳ありませんでした。 umasikajiro様の詳細なご回答で理解できました。 本当にありがとうございました。