Carpe Diem

備忘録。https://github.com/jun06t

CGIを使えるようにする

ApacheCGIを使えるようにするための設定です。注意なのはパーミッションの設定で、これをきちんと意識しないとうまく動きません。 ◆セキュリティ設定 なくても動きますが、クラッカー対策に。 $ sudo emacs -nw /etc/apache2/conf.d/security # 27行目:変更 ServerTokens Prod # 39行目:変更 ServerSignature Off MIMEの編集 プログラム用のファイルタイプを登録します。 AddHandler    MIMEタイプ   拡張子 拡張子 ... と記述することで、その拡張子を持ったファイルをどういう動作で動かすかを設定します。今回はCGIを使うので「.cgi , .pl」といったファイルを登録します。 $ sudo emacs -nw /etc/apache2/mods-enabled/mime.conf # 218行目:コメント解除し、CGIとして扱う拡張子を設定 AddHandler cgi-script .cgi .pl ちなみにこれはmime.confをいじらなくても、次のディレクティブ設定で同じ事を書けば使えるようになります。すべての実行できるのはセキュリティ的にちょっと・・・という人はディレクティブ設定で指定する方がいいと思います。 ◆ディレクティブ設定 $ sudo emacs -nw /etc/apache2/sites-available/default         <Directory /var/www/>                 #ExecCGIを追加                 Options Indexes FollowSymLinks MultiViews ExecCGI                 #MIMEでは設定しない場合は以下のように。今回はMIMEなのでコメントアウト                 #AddHandler cgi-script .cgi .pl                 AllowOverride None  #CGIの挙動を.htaccessで制御するならAll                 Order allow,deny                 allow from all         </Directory> 設定が完了したらApacheを再起動します。 $ sudo /etc/init.d/apache2 restart シンボリックリンクの作成 $ sudo ln -s /usr/bin/perl /usr/local/bin/perl これはなくてもいいです。ただLinuxディストリビューションの違いでperl の実行ファイルが /usr/bin/perl だったり /usr/local/bin/perl だったりするので、書き換えが面倒にならないようにリンクを貼っておくことをオススメします。 ◆確認ページの作成 $ sudo emacs -nw /var/www/index.cgi #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print <<"EOM"; <html> <body> <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;"> CGI Test Page </div> </body> </html> EOM exit; パーミッションの変更をします。 $ sudo chmod 705 /var/www/index.cgi これで「CGI Test Page」と大きな文字で表示されればOKです。テストページのソースがテキストのまま表示されたらCGIが使えてません。「500エラー」などが出る場合は $ less /var/log/apache2/error.log でエラーの原因を探ってください。 パーミッションについて パーミッションについてです。注意として以下になります。 ・700なら所有者はwww-data ・705以上なら所有者は誰でもOK これを意識しないとよく「500エラー」や「403エラー」が起きます。 ソース: Apacheのインストール・設定 CGI のためのウェブサーバ設定 ServerTokensによるサーバ情報表示の抑止