- 締切済み
Apacheの設定
Apacheを使って、無料レンタルサーバーを運営しています。 現状、CGIやPHPを使える設定になっています。 Apacheの設定で、ディレクトリごとにsystem関数など、ssh等危険なプログラムを呼び出す文言を強制停止し、それが含まれている場合に500エラーを返す設定をしたいのですが、どういう設定をすれば、できますか? CGIやPHPの利用を不可にはしたくないです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- superside0
- ベストアンサー率64% (461/711)
> 目的としては、シェルシステムを止めたいんですが…… PHPのシェルだけ止めればいいのなら、php.iniで disable_functions = phpinfo,eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source みたいにして、禁止したい関数を書き並べればよいのでしょうけど、 それだけでは、perlの open(, "コマンド名 |" ) とか system("コマンド名 ....") とか ` `で囲んだコマンド呼び出しとかは、禁止できません。 それに、PHPでのシェルだけを禁止しても、 同じサーバーを使っている他人のファイルや OSの設定ファイルをパス指定して読み込んだり CGI系で作ったファイルがapache等の同じユーザー名になっている 他のサイトのファイルを削除できたり、上書きできてしまう危険は残ってしまいます。 (本人確認(入金)なしで利用できるレンタルサーバーだと 悪意のあるプログラムを設置されてしまっても ユーザーに責任追及できないので、抑止力も働かないでしょうし) 反対に、PHPでシステムコール系の関数を禁止してしまうと 外部コマンドを使う(悪意のない)PHPまでもが使えなくなってしまいます。 なので、シェルを禁止するという対策ではなく、 CGIやPHPの実行オーナーをapache(nobodyやwww-dataかも)といった 共通ユーザーでなく、各ユーザーの権限で動かすように設定するとか、 それでもOSのリソースを読める問題は残るので、 dockerでリソースを完全に分離するといった方法を考えたほうが よいのではないでしょうか。
- superside0
- ベストアンサー率64% (461/711)
systemコールを全面禁止すると機能しないCGIも出てくるでしょうから docker (コンテナ)使って OSのリソースと各ユーザーのリソース(ファイルシステムとか)を分離させて phpからsystem()やexec()されても 自リソース以外には操作できないようにする っていうのが綺麗じゃないですかね。
- agehage
- ベストアンサー率22% (2752/12072)
phpで危険な関数を実行禁止にできます ディレクトリごと個別に設定を変えたいならuser.iniを利用します
- Ultra-Hetare
- ベストアンサー率38% (204/526)
それは、Apacheの設定でやるのではなくFWもしくは WAFでやるものでしょう。 まあ「OSコマンドインジェクション」は サーバ単体で防止可能ですが、 sshなどの禁止はFWやルータ・L3SWのACLなどで 防ぐほうが簡単で正当でしょう。 リターンコードを「500」なりに決めつけたいなら、 ロードバランサの導入が最適ですが・・ CGIやPHPというか総称してCGIですが、 それらの利用の可不可というより、 攻撃の検知や遮断をしたいならWAFなどを構築するのですが、 「500」を返せるかどうかは、そのアプライアンスによるでしょう。 サーバ単独で頑張りたいなら「勉強をして下さい」 としか、言いようがありません。 そのほう(勉強するほう)が面白いですが、攻撃を食らうと 確実に「死にます」断言できます!! 復旧も見据えて構築しましょう。
補足
目的としては、シェルシステムを止めたいんですが……