CGI
設置のコツ
CGI の設置にはコツがあります
設置したCGIが動かない場合、往々にして以下の2点に問題がある場合が多いようです。
動作しない場合は以下の点を再度チェックしてみましょう。
♦ Perlの指定をチェックする
多くのCGIでは、perlを呼び出す指定を行います。この指定を間違えますとCGIは動きません。
フリーのCGIでは一般に「readme.txt」などに設定の方法が書かれていることが多いので、その指示に従って設定しましょう。
ASJでの設置におけるperl指定の記述例
#!/usr/local/bin/perl5
テキストエディターでCGIのファイルを開き記述した例
♦ パーミッションの指定をチェックする
パーミッションとは、CGIを動かすためのプログラムやファイルに対する権限のことです。
この権限を設定しないとCGIは動作しません。
パーミッションの設定方法は、フリーのCGIなどでは「readme.txt」などに書かれていることが多いので、その指示に従って設定しましょう。
「readme.txt」に書かれている設定で動かない場合は、以下の点を見直してください。
ASJでの設置では、一般に以下の設定となります。
- CGIのあるディレクトリおよびCGIファイルは、755 もしくは705とします。
- 重要でないデータディレクトリは755 もしくは705とします。
- 重要なデータファイルは、pulic_html 以下にはおかないようにしてください。*1
- 777 などの一般的に危険な設定をした場合、セキュリティブロックがかかりCGIは動作しません。その場合は755に設定してください。
- パーミッションがどの程度必要かはCGI の設計に依存します。 CGIの開発元などの情報を元に十分注意して設置ください。*2
特に指定の無いデータファイルは644または604、ディレクトリは755または705である場合が多いようです。 - httpd(Apache) が ユーザ権限(顧客のアカウント)で動作します。
[重要]
*1 CGIの設計によっては重要なデータ(顧客情報など)をpublic_html においておくと第三者に閲覧されてしまう場合があります。
*2 個人情報などを扱う場合、データファイルは必ずWebから閲覧できないところに置いてください。
→ データファイルの保存場所について
標準の設定ではSSI(Server Side Include)を実行するには、HTML ファイルの拡張子を、「.shtml」にする必要があります。
「.html」や「.htm」では、SSI を記述しても無視され実行されません。
..htaccess によって、サーバ設定をカスタマイズすることにより、「.html」や「.htm」での SSI の実行も可能となりますが、セキュリティや、コンテンツパフォーマンスの観点から弊社では推奨致しません。
CGI/SSI は suExec環境での実行となります。
よりまして SSI の実行には、suExec の制限が適用されます。
SSI の、exec cmd 命令については、このサーバ特有の仕様により、書籍などにあるような
exec cmd="/bin/date"
のような、直接呼び出しは行えません。
♦ cmd を使用するには、例えば、"/bin/date" を呼び出す場合
(1) /public_html に、以下のファイルを転送(ここでは、datewrap というファイル名にする。)
#!/bin/sh
/bin/date
(2) datewrap のファイル権限を、 755 または 705 にする。
※なお、このスクリプトファイルがWeb上からアクセスできないようにする場合、.htaccess により該当ファイル閲覧を禁止してください。
参考: https://www.futomi.com/lecture/htaccess/files.html
♦ SSI を呼び出す html(datewrap と同じディレクトリレベルに作成する必要があります。) の場合、以下のようにラッピングしてください。
<!--#exec cmd="datewrap"-->
♦ exec cgi に関しては、このような細工は必要ありません。
以下のような標準的な呼び出しをサポートします。
<!--#exec cgi="./cgi-bin/foo.cgi"-->
♦ また、SSI の exec では コマンドライン引数は渡せませんので、コマンドライン引数を渡すSSI のご利用はいただけません。
こちらは、suExec ではなくApache の一般的なセキュリティ仕様となっております。
※弊社では、サーバの保守のみをサポート範囲としていますので、ご利用に関してはSSI関連ページや書籍等をご参照の上ご利用ください。
FTPソフト(FFFTP)でCGIファイルのパーミッションを指定した例
♦ サーバーを立てて事前に動作確認する
ご自分でCGIを作成される場合は、自前でサーバーを立てて動作確認されることを推奨いたします。
その際、サーバーはインターネットに接続する必要はありません。(*1)
自宅内のLANだけからアクセスできるようにするだけで結構です。
- サーバーソフトの構成
CGIの動作確認は一般に「ASJサーバー」と呼ばれるサーバーにCGIを設置しておこないます。
ASJサーバーの構築方法はインターネットや書籍で詳しく説明されています。(→リンク集)ASJサーバーのOSやソフトウェアなどは以下をご利用ください。
OS・・・LinuxやFreeBSDなどのUNIX系OS、Windows、MacOSなど
ASJサーバーソフト・・・Apache(→用語解説)
言語・・・Perl(Windows の場合、Perl を動作させるソウトウェアが必要です。)ASJのサーバーにCGIを設置するのであれば、FreeBSD+Apache での構成をお勧めします。
(*1)不用意にサーバーをインターネットに接続することはクラッカーなどによるサーバーの攻撃を
受ける可能性が高く、避けたほうが良いでしょう。
【用語解説】
Apache(あぱっち):
ApacheはUNIX系OSやWindowsで動作するWebサーバ。
フリーソフトウェアとして無償で公開され、世界中のボランティアのプログラマたちの手によって開発されました。
誰でも修正・再配布することができるため、現在独立したWebサーバでは世界で最も人気の高いWebサーバソフトであると言われています。
【リンク集】