No.1ベストアンサー
- 回答日時:
ちょっとディレクティブを眺めてみましたが、ご希望の設定は無理なような気がします。
結局、例えばPerlで書かれたスクリプトもインタプリタであるperlコマンドというバイナリファイルが実行されますし。
それにテキストなのかバイナリなのかはそのファイルに一度アクセスしないと分かりませんのでCGIが動作するたびにそれが行われるのは個人的にどうかとは思いますが。
また、そういう設定が出来たとして、URLに含まれるCGIのファイルはスクリプトファイルだが、実際動作するのはその中から起動されるバイナリファイルという事をやられたら設定は意味ないですよね。
ご回答ありがとうございます。
後半の文章で、バイナリ禁止が意味を成さないことに気がつきました。
確かに、おっしゃる通りですね。
バイナリもスクリプトCGIも許可する方向で設定することにします。
No.2
- 回答日時:
suexecを使用する形であれば可能ですが、C言語の知識と、
Apacheのアップデートごとにsuexecのメンテナンスが必要になります。
相当昔のバージョンでやったことがあるのですが、ソースを紛失してしまったので、やり方だけでも・・・
1. 以下のような行のようなものを探す
if ((cmd[0] == '/') || (!strncmp(cmd, "../", 3))
|| (strstr(cmd, "/../") != NULL)) {
log_err("invalid command (%s)\n", cmd);
exit(104);
}
2.コマンド名を一度変数にコピー
char cmds[256];
strncpy(cmds,cmd,256);
3.最初のスペースを¥0にする
if(strchr(cmds,' ')) {
*strchr(cmds,' ')='\0';
}
4.そのファイルの最初の3文字を読み込む
#本来は、Apache用のファイルI/O関数を使ってください。
FILE *fp;
char testbuff[4];
if((fp=fopen(cmds,"r")) != NULL) {
fread(testbuff,3,1,fp);
fclose(fp);
5. 3文字が、「#!/」でなければエラー
testbuff[4]='\0';
if(strcmp(testbuff,"#!/") != 0) {
exit(104);
}
}
ここでの注意ですが・・・
以下のようなSSIも禁止にしてしまいますl。
<!--#exec include="/bin/cat testfile"-->
で、shellを経由してしまうと、バイナリも実行できてしまいます。
#!/bin/sh
./chat.cgi.main
↑の実態はバイナリ
最小限食い止めるだけであれば、こんな方法でも効果があります。
No.3
- 回答日時:
また、以下のような方法も考えられます。
1.suexec環境
必須です。汗
2.コンパイル環境を阻止する。
ユーザーをある1つのユーザーにまとめておき
コンパイラ等は、chmod 705 にしておく。
対象コマンドは、gcc,g77,make,yacc,g++....(まだ沢山)
Web上からtelnetもどきができてしまうことを考慮してのことです。
3.perlのみ許可するのであれば?
mod_perl環境にするのも手かな?汗(このあたりは詳しくないです)
他にも
・マイナーなOSを使う、例えばNetBSDとか、意外と・・・
バイナリ互換がきつくなります。
・OSのソースを書き換えてしまう
ld-linux.so とか必ず読みそうなライブラリの名前を変えてしまう等
(もちろん、アプリケーション等もすべてソースから構築です)
・いっそのこと高いけど、CPUをItaniumにする?バイナリがほとんど転がっていません。
難しいことばかりですが、#2の回答(後から追加 汗)のsuexecの改造と、この回答の1,2以外の内容でやろうとしても
効果はあったとしても、極端な手間がかかるって所でしょうか。
#1さんのいわれる、ファイルのアクセスの必要性ですが、#2の方法であれば
1ファイルオープンしたとしても現在のサーバーでは大した負荷ではないと思われます。プロセスを新規に実行しているわけでもないので・・・
すみません、、、お礼が送れてしまいました・・・。
というか、はじめのお礼をした時点では確かに見当たらなかったのですけれど、気づかなかったというのは・・・。
とにかくすみません、こんなしっかりとした回答までいただいておいて。以後気をつけます、ありがとうございました。
本題のほうですが、作業量が結構膨大なようですね。
大変そうですが挑戦してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンの再起動の後、真っ暗
-
10年前のパソコンってどうなん...
-
デバイスマネージャ上のどこで...
-
パソコンについて
-
パソコン
-
嫁が市役所のパソコン有償譲渡...
-
パソコン初心者です。 今日中古...
-
中古PCを売る時、OS(Windows11...
-
中古のパソコンにMicrosoft Off...
-
中古の外付けHDDがヤフオクやメ...
-
pc9821で外付け5インチfddを取...
-
中古ノートPCの電源を押すとこ...
-
ノートPCの裏蓋のネジが取れな...
-
ゲーム用PCの購入を考えていま...
-
ノートPCの画面が半分映らなく...
-
このパソコン安いですか?ヤフ...
-
win11の起動時間、他を早くした...
-
パソコンがとてつもなく重くな...
-
Blu-ray対応のPCかどうか知りた...
-
ネットで中古パソコンを購入し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows 11の欠陥について
-
デバイスマネージャ上のどこで...
-
10年前のパソコンってどうなん...
-
パソコンに詳しい方、教えてく...
-
なんでこのレッツノートの中古...
-
中古PCを売る時、OS(Windows11...
-
中古の外付けHDDがヤフオクやメ...
-
ノートPCの画面が半分映らなく...
-
ネットで中古パソコンを購入し...
-
ノートPCの裏蓋のネジが取れな...
-
パソコン
-
至急お願いします。ノートパソ...
-
画面が黄色い 改善法
-
pc9821で外付け5インチfddを取...
-
ブルースクリーンが出てくる原...
-
i7-4790のパソコンwindows11を...
-
パソコンについて
-
ゲーム用PCの購入を考えていま...
-
Inspiron 3647 もらったデスク...
-
中古品のグラボやCPUの動作チェ...
おすすめ情報