ログファイルが管理者じゃない人にクリアされてしまいました。

[上に] [前に] [次に]
匿名希望 1999/04/01(木) 21:04:58
自分のHPにチャットを設置していますが、
参加者(他人)が「ログを削除していいですか」と
発言し、次の瞬間全発言が全て消えてしまいました。
こんなことって、できるのでしょうか?
また、防止するにはどうしたらどうすれば良いですか?

スクリプトは、管理者削除機能などついていない、
いわゆる簡易チャットを使っています。

宜しくご教示下さい。

mo [E-Mail] 1999/04/01(木) 22:10:09
おそらく、ログファイル、あるいはログファイルのあるディレクトリの
パーミションが、他人も書き込み可になっていたのが原因だと思われます。
chmod 666 あるいは chmod 777 としているファイルは誰でも中身を消せます。
防止するには、ちょいと技が必要かも。

% mkdir logdir
% chmod 777 logdir

としといて、CGI で パーミション 644 の logdir/logfile を作成する。
その後、

% chmod 755 logdir

として、自分以外は logfile を消せないようにする。

じょん 1999/04/01(木) 23:12:16
追加質問させてください。
その「誰でも消せる」というのは具体的にどうやって消すのでしょう?
unlinkのコマンドをどうやって実行するんでしょう??

もしかしてその設置したチャットそのものに、たとえば発言欄に
特定の文字を入れるとクリアする機能がついていたという事は
ないでしょうか・・・

B-Cus 1999/04/01(木) 23:28:20
CGIが各ユーザ権限で動いているなら、moさんの書かれた方法でも
いいんでしょうが、もしnobody権限で動いているなら、根本的な
対策はないと言っていいでしょう。

僕なら管理者に「こういう事が起こったんですが」と報告して、
cgiwrapやsuExecを使って各ユーザ権限でCGIが動くように要望を
出します。もちろん管理者がそれに応じてくれるかどうかはわかりませんが…。

まぁ小手先の対策がないわけじゃないですけど…。
 - suidperlやsuidプログラムを使う
 - ディレクトリを711にして、その下にあるファイル名がわからないようにする
  さらにスクリプトを見てもファイル名がばれないようにする。

> unlinkのコマンドをどうやって実行するんでしょう??

必ずしも消す必要はなく、ファイルを書き換える権限があれば、
ファイルをクリアできるわけです。具体的な方法は、あまり
おおっぴらに書くべきことではないと思うので略。

B-Cus 1999/04/01(木) 23:40:26
> こんなことって、できるのでしょうか?

あ、一応書いておきますが、このいたずらをしたのは、(おそらく)
あなたのサーバにアカウントを持つユーザです。

一般的には、そのサーバに属していないユーザからは、こういうことは
できません。

mo [E-Mail] 1999/04/02(金) 12:25:09
>もしnobody権限で動いているなら、根本的な
>対策はないと言っていいでしょう。

確かに。
それにしても、こういったクラッキングが発生しているのは残念なことですね。

やま 1999/04/03(土) 00:35:45
> 具体的な方法は、あまりおおっぴらに書くべきことではないと思うので略。
他人のファイルを削除する方法など必要ありませんし知りたくもありませんが、
それを阻止する方法は是非知りたいところですね。
つい最近契約したサーバでは、自分のディレクトリの権限が'755'となっていて
他人のディレクトリも覗けるようになってしまっていました。
とりあえず、'705'に変更しました。これで他人から自分のディレクトリ以下
には行けないと思いますが、勝手に削除されないようにするにはこれで完璧なん
でしょうか。ちょっと不安です。

じょん 1999/04/03(土) 01:24:30
やっぱり「誰でも消せる」というのはそのサーバに属しているユーザと言うことと理解していいんでしょうか?>B-Cusさん

ところで具体的に匿名希望さんの設置したチャットって具体的にどれなでしょうかね?ちょっと気になります。

それにしても勉強になるなぁ!

うけけ 1999/04/03(土) 01:58:49
705だと、同じグループに所属する人は覗けないが、他人は覗けると思うぞ。
完璧な対応は
>cgiwrapやsuExecを使って各ユーザ権限でCGIが動くように
する(してもらう)以外ないでしょう。

B-Cus 1999/04/03(土) 06:49:50
> とりあえず、'705'に変更しました。

ディレクトリが755や705であることが問題なのでなく、
データファイルが666や606であることが問題なのです。

ファイルの書き換えの際には、そのディレクトリのパーミッションは
関係ありません(でもxビットは必要だけど)。そのファイル自体に
wビットが立っていれば書き換えられてしまいます。

> やっぱり「誰でも消せる」というのはそのサーバに属しているユーザと
> 言うことと理解していいんでしょうか?>B-Cusさん

です。全ユーザのCGIが同じ権限(nobodyとか)で動いているなら、ですけど。

> 他人のファイルを削除する方法など必要ありませんし知りたくもありませんが、

方向性としては非常によろしいんですが、セキュリティを考える上で
クラッカー(というにはレベルが低いけど)がどのような方法を使って
くるのかを知るのは とっても重要です。だって、それを知らないと
対策の立てようがないから。

# というのと同じで、サーバをクラックされたとき、どこの穴を
# 突かれたのかわからないのが一番困りますね。

B-Cus 1999/04/03(土) 07:00:29
> ディレクトリが755や705であることが問題なのでなく、

あっと、これはちょっと言いすぎたかな。できればディレクトリは
701か711にしておきましょう。そうすれば
 - そのディレクトリの下にどういうファイル/ディレクトリがあるかわからない
 - でもファイル名を指定すれば普通に読み書きできる
となります。

 % mkdir dir
 % echo test > dir/file
 % chmod 111 dir
 % ls dir
 ls: dir: Permission denied
 % cat dir/file
 test

でもしつこいようですけど、根本的にはcgiwrapやsuExecを(以下略)

羽崎 1999/04/04(日) 23:19:50
ちなみに、誰があなたのファイルを消したかなどのログが残っていれば、管理者に知らせて直ちに対策をとってもらったほうがあなたのサーバの今後の平和のためでもあります。(こういうログってあるのかな?)

[上に] [前に] [次に]