Apache2 で、CGI ソースが表示されちゃう件の対応(Debian APT パッケージ編)

例えば、

http://www.exsample.com/cgi-bin/test.cgi

にアクセスすると、

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";

のような、CGI プログラムのソースが表示されてしまう。

さて、今回は Debian 系のパッケージ、いわゆる APT パッケージの Apache 2.4 を入れてみた。
RedHat 系世界の住民の俺から見ると、頭がおかしいんじゃないか?と思うような Apache 設定ファイルの構成である。

てか、俺は Apache に関しては「ソースからインストール派」なので、RPM パッケージの Apache の設定ファイル群にもイラっとさせられるんだけどね(笑)
まあ、この辺は宗教問題なのでこれ以上の言及は控えておきましょう(笑)

CGI プログラムのソースが表示されてしまう件に話を戻す。

まず、VirtualHost 設定の該当部分。

/etc/apache2/sites-available/www.exsample.com.conf の中に、

    ScriptAlias /cgi-bin/ "/usr/local/share/apache/cgi-bin/"

    <Directory "/usr/local/share/apache/cgi-bin">
        AllowOverride All
        Options +ExecCGI

        AddHandler cgi-script .cgi .pl

        Require all granted
    </Directory>

という記述あり。

なんか、ScriptAlias と Handler/ExecCGI の設定が二重にされてますけど(^^;
まあ、ScriptAlias してるんだから +ExecCGI は不要だと思うけど、現行、これで問題なく動いているので、とりあえずこれで良しとする(笑)

で、実際に CGI module を読み込んでるんかいな?と確認してみると、

# apache2ctl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)
 setenvif_module (shared)
 status_module (shared)

ありり?cgi_module がロードされてませんねえ。

# ls -la /etc/apache2/mods-available/cgi.load
-rw-r--r-- 1 root root 58  7月  6  2016 /etc/apache2/mods-available/cgi.load

cgi.load というファイルはあるので、こいつのシンボリックリンクを /etc/apache2/mods-enabled の下に作ってやる。

ln コマンド使って手動でやればすぐだが、せっかくなので a2enmod コマンドを使ってみる。
これ、シンボリックリンクを作ってくれるだけのコマンドのようだ。こんなコマンドの使い方を覚えている暇があれば、さっさと手動でリンクしちゃった方が早いじゃんとか言いながら笑ってはいけない。Debian 信者からむっちゃこのコマンドの正当性を説明されるで(笑)

# ls -la /etc/apache2/mods-enabled/*cgi*
ls: /etc/apache2/mods-enabled/*cgi* にアクセスできません: そのようなファイルやディレクトリはありません
# a2enmod cgi.load
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:
  service apache2 restart
# ls -la /etc/apache2/mods-enabled/*cgi*
lrwxrwxrwx 1 root root 27  1月 18 17:31 /etc/apache2/mods-enabled/cgid.conf -> ../mods-available/cgid.conf
lrwxrwxrwx 1 root root 27  1月 18 17:31 /etc/apache2/mods-enabled/cgid.load -> ../mods-available/cgid.load

素晴らしい(笑)

しかし、俺は cgi モジュールをロードしたかったのに、なぜに cgid が???

cgid って、Perl とかの生エラーメッセージをログに吐いてくれないからいやなんよね。

ま、いっか(^^; 今度時間が出来たら対応しよう。

で、サーバ再起動。

# service apache2 restart

CGI モジュールも、

# apache2ctl -M|grep cgi
 cgid_module (shared)

無事ロードされたね。

これで、

http://www.exsample.com/cgi-bin/test.cgi

にアクセスすると、

Hello, World

と表示されるようになる。

どう?RedHat 系世界の住民の皆さん。気持ち悪いでしょ?(笑)

トラックバック(0)

このブログ記事を参照しているブログ一覧: Apache2 で、CGI ソースが表示されちゃう件の対応(Debian APT パッケージ編)

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/4271

コメントする

このブログ記事について

このページは、shinodaが2017年1月18日 17:39に書いたブログ記事です。

ひとつ前のブログ記事は「結局、iPhone 交換代 29千円なり~」です。

次のブログ記事は「もう火を落とすサーバで S.M.A.R.T の警告が出てるが・・・(^^;;;」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら