No.1ベストアンサー
- 回答日時:
ちょっとディレクティブを眺めてみましたが、ご希望の設定は無理なような気がします。
結局、例えばPerlで書かれたスクリプトもインタプリタであるperlコマンドというバイナリファイルが実行されますし。
それにテキストなのかバイナリなのかはそのファイルに一度アクセスしないと分かりませんのでCGIが動作するたびにそれが行われるのは個人的にどうかとは思いますが。
また、そういう設定が出来たとして、URLに含まれるCGIのファイルはスクリプトファイルだが、実際動作するのはその中から起動されるバイナリファイルという事をやられたら設定は意味ないですよね。
ご回答ありがとうございます。
後半の文章で、バイナリ禁止が意味を成さないことに気がつきました。
確かに、おっしゃる通りですね。
バイナリもスクリプトCGIも許可する方向で設定することにします。
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ファイルオープンしたとしても現在のサーバーでは大した負荷ではないと思われます。プロセスを新規に実行しているわけでもないので・・・
すみません、、、お礼が送れてしまいました・・・。
というか、はじめのお礼をした時点では確かに見当たらなかったのですけれど、気づかなかったというのは・・・。
とにかくすみません、こんなしっかりとした回答までいただいておいて。以後気をつけます、ありがとうございました。
本題のほうですが、作業量が結構膨大なようですね。
大変そうですが挑戦してみます。
ありがとうございました。
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
↑の実態はバイナリ
最小限食い止めるだけであれば、こんな方法でも効果があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI 古ーくからフリーのtree.cgi掲示板を利用させてもらって来ましたが、最新でなにか復活できないか? 2 2023/04/07 10:43
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- UNIX・Linux Linuxサーバーのパーティション・ディレクトリの推奨見積もりについて 3 2023/01/17 00:46
- 美術・アート トレパク疑惑をかけられにくくするには ここ最近いわゆるトレパク警察のいいがかりがが厳しくなったようで 1 2023/08/21 09:59
- CGI 「CGIにより定義されていない」とは・・・ ? 3 2023/01/01 12:00
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンについて
-
デバイスマネージャ上のどこで...
-
パソコンがとてつもなく重くな...
-
ドスパラの通販サイトで、core ...
-
ノートPCの裏蓋のネジが取れな...
-
フリマでノートPCを買う時の注...
-
7年前に購入しましたHP丿-トパ...
-
どちらを購入します?
-
Lubuntuでフォントをインストー...
-
パソコン初心者です。 今日中古...
-
海外仕様のPC用アダプターは使...
-
Inspiron 3647 もらったデスク...
-
47000時間使ったHDDのせり
-
パソコンからDVDが観れなくなり...
-
USBメモリ増設アダプターについて
-
Windows11のノートパソコンを中...
-
ネットで中古パソコンを購入し...
-
至急お願いします。ノートパソ...
-
中古のLenovoのL570を購入しま...
-
外出先でノートPCに充電できる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
デバイスマネージャ上のどこで...
-
パソコン
-
Blu-ray対応のPCかどうか知りた...
-
中古のノートパソコンを買いた...
-
なんでこのレッツノートの中古...
-
47000時間使ったHDDのせり
-
中古PCを売る時、OS(Windows11...
-
自作PCが不調 対策方法
-
ゲーム用PCの購入を考えていま...
-
パソコン修理
-
ノートPCの裏蓋のネジが取れな...
-
中古のノートパソコンで↓って性...
-
ネットで中古パソコンを購入し...
-
Amazonの整備済み品としてパソ...
-
中古でいいノートパソコンあり...
-
パソコンの買い替え
-
Windows11のノートパソコンを中...
-
中古の外付けHDDがヤフオクやメ...
-
中古ノートパソコンの買い方の...
-
A4サイズくらいのノートPC買お...
おすすめ情報