電子書籍の厳選無料作品が豊富!

OSがUNIX・Apache2の環境下で以下の事が実施出来るのか
ご教授頂きたいと思います。

内容的には、webドキュメントフォルダ配下に以下の様な
状態のファイルを格納しておき、プログラム(cgi等)にて
ファイル一覧を表示し、閲覧(参照)したい。

 ・ ファイル名 owner group パーミッション
   aaaaa.xls saitou user 700
   bbbbb.xls suzuki user 700
   ccccc.xls satou user 700

想定しているプログラムは、
Apacheのbasic認証を利用し、ログインしたユーザ名と
ファイルのownerが一致した際に、print文でリンク(ドキュメントフォルダ/ファイル名)を
表示し閲覧をする。

様な事を考えてみたのですが、この内容が本当に良い事なのか?
ファイルの所有者がApacheユーザではないのでファイル操作する事も
出来ないのではないか?と言う疑問点があり
(ApacheユーザのGroupでアクセスをすれば可能?)、

上記の様に、1つのディレクトリ内にユーザに参照させても良い
ファイルを操作する際、どのような対処方法が好ましいか
ご教授頂けましたら幸いです。

初心者的な話で申し訳ありません。

A 回答 (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.と同じ
    • good
    • 0
この回答へのお礼

ご返信が大変遅くなり申し訳ありませんでした。
umasikajiro様の詳細なご回答で理解できました。
本当にありがとうございました。

お礼日時:2006/05/01 09:34

#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 とすれば良いのではないかと思いますね
    • good
    • 0
この回答へのお礼

丁重なご解答ありがとうございます。
確かにGroupの変更を随時するのは面倒ですので、
umasikajiro様のユーザ名-ファイル名.拡張子での
処理をメインに実施したいと思います。
初心者的な質問に詳細な情報を頂き本当にありがとうございます。
自分自身にも大変ためになりました。

お礼日時:2006/05/02 15:02

しつこく書いて済みませんが、自分への覚書も兼ねて、、


#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
    • good
    • 0

あ、で、肝心の


> 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変更が
なく動作出来るのかな?と思われますが、初心者的なご質問で
申し訳ありませんが宜しくお願い致します。

補足日時:2006/05/01 09:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!