CGI-BBS > 電子掲示板 > 簡易BBS > 簡易BBSエクセレント。ファイル所有者がを変わってしまう?


カレッヂ
カレッヂ


質問者 マッカラン  投稿日 6/12(水) 20:20:44
簡易BBSエクセレント1.30について。アップしたファイルの所有者がを変わってしまう?


簡易BBSエクセレント Version 1.30についてお聞きしたんですが、
掲示板の設置や作動に問題はありません。
普通に書き込み出来て、普通に削除も出来ます。

しかし掲示板から書き込んだデータの「保存場所」のディレクトに
FTPソフトを使って見に行ってもファイルの一覧が表示されません。
「bbs.cgi」など自分でアップしたファイルは表示されるんですが、
CGI経由したデーターが表示されないようです?


サーバー管理者に聞いたところ↓

#「お客様のご使用の画像を作成するCGIが、画像データの所有者の変更をしている可能性がございます。
#お手数ですがお客様の画像を作成するCGIを、ファイルの所有者が変更されないように
#(または正規の所有者に変更するように)修正をして頂けますでしょうか。」

パーミッションなどの設定も問題ないと思うんですが(^_^;)
お知恵を拝借したいと思いまして書き込んで下ります。
どなたか情報は無いでしょうか?よろしく御願いします。

プロバイダ参照:
サーバのOS:(未選択)
パソコンのOS:(未選択)
エディタ:EmEditor
FTPソフト:Nextftp
サーバ移転:していない
改造:していない
CGI習熟度:(未選択)

回答者 しあわせのツボ  [削除]  投稿日 6/12(水) 21:02:19
変わってしまうのではなく、はじめから自分のものではないのです。

環境について何も書いてないので断定はできませんが
(次回からは入力してください)、
多くのサーバでは、CGIはそれを設置したユーザ名ではなく
「nobody」「www」「apache」等のユーザ名で実行されます。
そのCGIが作ったファイルは、当然nobodyなりwwwなりの所有物で、
CGIの所有者(すなわち自分)と言えど所有権はありません。

ところで、具体的に何かお困りですか?
質問者 マッカラン  [削除]  投稿日 6/12(水) 21:27:20
しあわせのツボさん。回答ありがとうございます。

サーバーは「Apache/1.3.22」らしいです(一応非公開なのかな?)

で、具体的に困ってる事と言うのは、掲示板から書き込んだデータの保存場所の「data」ディレクトリに
FTPソフトで見に行っても表示されないということです。
以前は問題なく表示できていたのですが、現在は管理者に所有者変更をお願いしなければいけないので
管理(バックアップ等)が事実上難しくなっています。

それで、管理者に「以前は表示できていたと思うんですが」との連絡したんですが
何度も「サーバーの設定を変えたのが原因では無いでしょうか?」と質問してもご使用のCGIが問題だと言われまして・・・
それで客観的に見てスクリプトが原因なのかそれともサーバー側の設定の問題なのか知りたかったわけです。

それで。↓検索していたら見つけました。

>Apacheにsu_execモジュールを追加すると、
>ユーザディレクトリ(/~xxxx)でのCGIの実行が、そのユーザのID(xxxx)で行われるよ
>うになります
http://www.nishimoto-site.net/archiver/ML/php-ML/199805/msg00000.html 
http://www.nishimoto-site.net/archiver/ML/php-ML/199805/msg00001.html 
http://www.nishimoto-site.net/archiver/ML/php-ML/199805/msg00002.html 



Apacheの事は全然知らないんですが、モジュールの設定をしてもらえば、
以前の様に問題なくFTPに表示されると言う解釈でよろしいでしょうか?
大変恐縮ですがご教授願えれば幸です。
ふぅ〜。なんか解決の糸口が見えたようで今日は安心して休めそうだなぁ(笑)
回答者 しあわせのツボ  [削除]  投稿日 6/12(水) 22:02:11
全く見えないというのも妙ですが…。

chownという関数を使えば、CGIによって所有者を変更することができます。
suexecの導入は相当渋い顔をするでしょうから、まずは自力解決の方向で。
質問者 マッカラン  [削除]  投稿日 6/12(水) 22:13:39
以前は何ら問題なく見えていたんですがね・・・
ところで「chown」というのはどのように使うのでしょうか?
一応以前試したような気がするんですが、使い方が良く分からなかった(^_^;)
ご存知でしょうか?

回答者 しあわせのツボ  [削除]  投稿日 6/13(木) 14:04:38
perlからなら、chown(ユーザID, グループID, 対象ファイル); です。
質問者 マッカラン  [削除]  投稿日 6/13(木) 16:04:20
毎回回答して頂きましてありがとうございます。


>perlからなら、chown(ユーザID, グループID, 対象ファイル); です。

これは「簡易BBSエクセレント」の「bbs.cgi」に組み込めばいいんでしょうか?
下のような設置だと仮定した場合、「data」ディレクトリ内の全てのファイルの所有者変更したい場合どうしたらいんでしょうか?
「chown -R xxxx, data;」
(ユーザー名xxxxだと仮定して)


#       /2002/  (CGIプログラムを設置するディレクトリ)
#          |
#          |-- /data/ <777>
#          |-- /tmp/ <777>
#          |
#          |-- bbs.cgi <755> 
#          |-- cgi-lib217.pl <644> 
#          |-- crypt.cgi <755> 
#          |-- jcode.pl <644> 


ただ、ネットの情報を見てるとchownはスーパーユーザーじゃないと
使用できない場合が多いようですが、私は一般ユーザーなのでダメでしょうかね?
回答者 しあわせのツボ  [削除]  投稿日 6/13(木) 18:11:01
現在の所有者であれば、chownは可能だと思います。
やったことがないのでわかりませんが。

私だったら、
readdirで該当ディレクトリの一覧を取得し
順番にchownでそのファイルを操作する
というCGIを作って設置し
ブラウザから叩く
という作業をします。

コマンドラインが使えるなら、man chownを参照してください。
質問者 マッカラン  [削除]  投稿日 6/13(木) 21:54:54
返信ありがとうございます。

FTPの保存場所(data)に行ってもファイルが表示されないので、
そのファイルは私名義ではないと思います。
chownは自分名義のファイルなら変更できる可能性があるような気がしますが、
自分のディスクスペースにあるファイルと言えども名義が自分の物ではないので
変更は難しいのではないでしょうか?どうなんでしょう?



↓でディレクトリ内の一覧を取得しファイルの存在は確認できました。
しかしchownでそのファイルを操作する方法は私の考えが及びません(^_^;)
ちなみにtelnetは禁止なのでコマンドラインは使えません。
--------------------
#!/usr/bin/perl

  $dir = './data';

  opendir(DIR, $dir) or die;
  @file = sort readdir(DIR);
  closedir(DIR);

print << "END_OF_HTML";
Content-type: text/html

<HTML>
<HEAD>
</HEAD>
<BODY>
END_OF_HTML

  foreach(@file) {
    print "$_<BR>";
  }

print << "END_OF_HTML";
</BODY>
</HTML>
END_OF_HTML

  exit(0);
--------------------
回答者 しあわせのツボ  [削除]  投稿日 6/13(木) 23:43:40
いや、CGI名義になっているならCGIから操作してやればいい、ということです。
CGIでさえあれば、そのファイルを作成した以外のCGIでもユーザは同じです。

例で
print "$_<BR>";
となっている所を
chown(ユーザ名,,$_);
のようにするとどうでしょうか。
質問者 マッカラン  [削除]  投稿日 6/14(金) 10:54:42
しあわせのツボ 様

昨日CGIがサーバーエラーで使えなかったので、
今、FTPを見てきましたら今まで見ることの出来なかったファイルが表示されていました。
管理者にお願いはしていたんですが、どうやら設定を変えて下さったようです?
今のところ連絡は来てないんですが試しに書き込みをしてみましたが問題はないようです。

それと、教えて頂いたように書き換えをして所有者が私のファイルを
他の名義に書き換えできるかやってみましたが出来ませんでした(^^ゞ
(xxxというユーザーと仮定して)

毎回親切に対応して頂きましてありがとうございました。
大変助かりました。m(_ _)m
----------------
#!/usr/bin/perl

  $dir = './data';

  opendir(DIR, $dir) or die;
  @file = sort readdir(DIR);
  closedir(DIR);

print << "END_OF_HTML";
Content-type: text/html

<HTML>
<HEAD>
</HEAD>
<BODY>
END_OF_HTML

  foreach(@file) {
    print "chown(xxx,,$_)<BR>";
    
    
  }

print << "END_OF_HTML";
</BODY>
</HTML>
END_OF_HTML

  exit(0);
----------------
回答者 しあわせのツボ  [削除]  投稿日 6/14(金) 11:29:51
chownとprintしても意味がありませんよ。
printを外してchownだけ書いてください。

まあ解決したのならそれでいいのですが。
質問者 マッカラン  [削除]  投稿日 6/14(金) 15:11:15
あ、printを外してですか(苦笑)頭が回ってませんでした(^^ゞ
外してやってみましたが、変更されないようですので
うちのプロバイダはchownが使えないのかもしれませんね。
しかし解決できましたのでこれで今日はゆっくり出来ます。

しあわせのツボ 様 ありがとうございました。

返信(回答)する


Web裏技