• 締切済み

Apacheの設定

Apacheを使って、無料レンタルサーバーを運営しています。 現状、CGIやPHPを使える設定になっています。 Apacheの設定で、ディレクトリごとにsystem関数など、ssh等危険なプログラムを呼び出す文言を強制停止し、それが含まれている場合に500エラーを返す設定をしたいのですが、どういう設定をすれば、できますか? CGIやPHPの利用を不可にはしたくないです。 よろしくお願いします。

みんなの回答

回答No.4

> 目的としては、シェルシステムを止めたいんですが…… 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でリソースを完全に分離するといった方法を考えたほうが よいのではないでしょうか。

回答No.3

systemコールを全面禁止すると機能しないCGIも出てくるでしょうから docker (コンテナ)使って OSのリソースと各ユーザーのリソース(ファイルシステムとか)を分離させて phpからsystem()やexec()されても 自リソース以外には操作できないようにする っていうのが綺麗じゃないですかね。

humu01jp
質問者

補足

目的としては、シェルシステムを止めたいんですが……

  • agehage
  • ベストアンサー率22% (2552/11347)
回答No.2

phpで危険な関数を実行禁止にできます ディレクトリごと個別に設定を変えたいならuser.iniを利用します

回答No.1

それは、Apacheの設定でやるのではなくFWもしくは WAFでやるものでしょう。 まあ「OSコマンドインジェクション」は サーバ単体で防止可能ですが、 sshなどの禁止はFWやルータ・L3SWのACLなどで 防ぐほうが簡単で正当でしょう。 リターンコードを「500」なりに決めつけたいなら、 ロードバランサの導入が最適ですが・・ CGIやPHPというか総称してCGIですが、 それらの利用の可不可というより、 攻撃の検知や遮断をしたいならWAFなどを構築するのですが、 「500」を返せるかどうかは、そのアプライアンスによるでしょう。 サーバ単独で頑張りたいなら「勉強をして下さい」 としか、言いようがありません。 そのほう(勉強するほう)が面白いですが、攻撃を食らうと 確実に「死にます」断言できます!! 復旧も見据えて構築しましょう。

関連するQ&A

  • PHPとApacheの設定について

    Win2000でPHPとApacheの設定を試みています。phpinfo()関数を指定のディレクトリに入れて、アクセスしてもPHPのバージョンに関する情報が出てきません。代わりに、「Index Of/」と書いて、いろいろな言語でApacheの設定ができたときに出てくる「あなたの予想に反してこのページが見えていますか?」と書いたページへのリンクが出て、最後に「Apache/2.0.53 (Win32) PHP/5.0.5 Server at localhost Port 80」と書いてあります。エラーのチェックをしてみても、エラーは出てきません。何が原因なのか検討もつかない為、何かおわかりの方がいらっしゃいましたら、ぜひアドバイスをお願いいたします。

    • 締切済み
    • PHP
  • apache2.2の設定について

    あるディレクトリでsite_available中のファイルの設定が <Directory /var/hogehoge> Options ExecCGI -FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> となっているのですが、現在このhogehoge中のディレクトリでimageというディレクトリに置かれたgifファイル(すなわちvar/hogehoge/image/○○○.gif)をcgiとして認識されています。 これを回避するためにimage以下の場合はcgiではなくgifで認識させるようにしたいのですが、どうすればよいのでしょうか? apacheはdebian系のapache2.2系です。 宜しくお願い致します。

  • Apacheの設定について

    OSはRedhatLinux7.1 Apache_1.3.26 php-4.2.3 mysql-3.23.52 を使っています。 WebサーバにApacheを使っており、 今は /usr/local/apache/htdocs の下に直接ファイルやディレクトリを置いてブラウザから見ています。 しかし、例えば、 /home/master/public_html の下に置いてあるファイルやディレクトリもブラウザから見えるようにするにはどのようにすればよいのですか? apacheの設定を変えればよいのかなと思うのですが、どこをどのように変えればよいのかわからず困っています。 アドバイスお願いします。

  • Apacheでcgi-binを隠すには

    Apacheの設定でcgiの実行ディレクトリをcgi-binに限定(DocumentRootでのcgi実行は不可)した場合、 アドレスはhttp://hoge.hoge/cgi-bin/となりますが、 これをhttp://hoge.hoge/で実行しているかのように隠蔽(偽装)する方法はないでしょうか?

  • Apache2 - CGIで出力されたファイルの所有者を変更するには?

    Gentoo LinuxでApache2を動かしています。 Apache2の質問です。 UserDirで実行された(mod_userdirで処理される)CGIまたはPHPスクリプトが出力するファイル/ディレクトリの所有者を、リクエストされたユーザディレクトリのuid, gid へ自動的に変更する方法を教えてください。 レンタルサーバーではこのような動作を見掛けるし一般的だと思うのですが設定方法がわかりません。 よろしくお願いします。

  • Apacheの設定について

    WindowsXP SP2 のローカルでCGIを動作させるために  http://www.adminweb.jp/apache/ を参考に下記を試みました。 (1)Apache ダウンロード・インストール・接続確認   「http://localhost/」へアクセスして「It works!」表示確認    (htdocs ディレクトリの index.html) (2)ActivePerlインストール    perl -v perl -h で動作確認 (3)CGI用エイリアスの設定    ScriptAlias /cgi-bin/ "C:/SERVER/Apache/cgi-bin/" (4)以下の test.pl を C:/SERVER/Apache/cgi-bin/ に設置    ------------------------------------------------------    #!C:/Perl/bin/perl.exe print "Content-type: text/html;\n\n"; print "<html><body><h1>test cgi</h1></body></html>\n";   -------------------------------------------------------    http://localhost/cgi-bin/test.pl の実行で    「Internal Server Error」になってしまいます。 どこの設定が間違っているのか見当がつきません。 何卒ご指導宜しくお願い致します。

  • apacheのCGI設定について教えてください。

    CGIの勉強のために、古いパソコンに fedora core 4 をインストールしてapache でローカルのテスト用サーバーにしようとしています。 /var/www/html に設置した簡単な perl CGI は動くのですが、同じものをユーザーのホームディレクトリに設置すると、internal server error になってしまいます。 ***** 以下 httpd.confの抜粋です。***** #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride All Options Includes ExecCGI FollowSymLinks SetHandler cgi-script </Directory> AddHandler cgi-script .cgi .pl ************************************** サーバーのエラーログを見ると Premature end of script headers: test.cgi となっています。htmlをprintしているだけのスクリプトで、/var/www/html では動くので、apache の設定の問題かと思っています。 ちょっとカテゴリーが違うかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • apache・cgiの設定?

    phpの勉強をしようと思い、apacheとphpをインストールしまいした。 ついでに、cgiの設定も試みてみました。 それで、掲示板を設置してアクセスしてみたのですが、開いた掲示板に表示されるgifアイコンが表示されません。(gifアイコンは、掲示板下の/imagae/に格納されています。) apache等の設定が悪いのでしょうか?また、cgiを設置したcgi-binフォルダー以下を表示すると、 Forbidden You don't have permission to access /cgi-bin/ on this server. と表示されます。 どなたか、ご指導お願い致します。

    • 締切済み
    • CGI
  • Apache(Ver 2.4.4)の設定のエラー

    おはようござます。 Win VISTAです。 Apache(Ver 2.4.4)の設定をしています。(XAMPP 1.8.3) いろいろと参考書を見ながら、意味もわからずhttpdファイル(C:\xampp\apache\conf\httpd)のセキュリティの設定変更をしていますが、 「Access forbidden! 要求されたディレクトリへのアクセス権限がありません。 インデックスドキュメントが存在しないか、 ディレクトリの読み込みが許可されていません。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。」 というエラーが出て困っています。 セキュリティの設定の変更までは、正常にインストールされているとの確認画面が出ていましたので、この変更のミスが原因としか考えられません。 何とど宜しくお願いします。 ============================================================= httpdファイル(C:\xampp\apache\conf\httpd)の内容(変更後です) <変更前の内容はバックアップをとっていませんのでわかりません・・・・> <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "C:/xampp/htdocs" <Directory "C:/xampp/htdocs"> ・ ・ ・ # Order allow,deny # Allow from all Order deny,allow Deny from All Allow from localhost 127.0.0.1 # AllowOverride All ・ ・ # Require all granted </Directory> ・ ・ ・ <Directory "C:/xampp/cgi-bin"> AllowOverride None Options None # Order allow,deny # Allow from all Order deny,allow Deny from All Allow from localhost 127.0.0.1 # Require all granted </Directory> ============================================================= (C:\xampp\apache\conf\extra\httpd-xampp)<このファイルは全く書き換えていません。> <Directory "C:/xampp/php"> AllowOverride None Options None Require all denied <Files "php-cgi.exe"> Require all granted </Files> </Directory> ・ ・ ・ <Directory "C:/xampp/cgi-bin"> <FilesMatch "\.php$"> SetHandler cgi-script </FilesMatch> <FilesMatch "\.phps$"> SetHandler None </FilesMatch> </Directory> <Directory "C:/xampp/htdocs/xampp"> <IfModule php5_module> <Files "status.php"> php_admin_flag safe_mode off </Files> </IfModule> AllowOverride AuthConfig </Directory> </Directory> Alias /licenses "C:/xampp/licenses/" <Directory "C:/xampp/licenses"> Options +Indexes <IfModule autoindex_color_module> ・ ・ </IfModule> Require all granted </Directory> =============================================================

    • ベストアンサー
    • PHP
  • apacheで SetEnvを設定してもCGIに設定されていない

    apache1.3.33を使っています。CGIに環境変数を渡したくて httpd.confに <VirtualHost 192.168.0.1:80> # 他の設定は省略 SetEnv MYPATH /foo/bar </VirtualHost> のように設定しています。 環境変数の確認のために、apache付属の printenv をprintenv.cgiに リネームして、virtualhostで指定しているディレクトリに配置しました。 これを呼び出すと、環境変数 MYPATH は設定されていません。 apacheで環境変数を設定するには上記の設定だけでは不十分でしょうか? アドバイスなどいただけたら幸いです。

    • 締切済み
    • CGI