MacOSXでのPerlプログラミングに関するエラーとセキュリティについて

このQ&Aのポイント
  • MacOSX10.4でPerlを勉強したいと思ったのですが、初歩の初歩で躓いてしまいました。web共有を開始してhttp://localhostは表示できましたが、CGI-Executablesの中に保存したファイルにアクセスするとエラーが出てしまいました。
  • ネットで情報を集めて試行錯誤しているうちにわけがわからなくなってしまったので、web共有は停止しています。しかし、http://localhostは表示できる状態です。この状況はどういうことなのでしょうか?セキュリティ上の問題はないのでしょうか?
  • MacOSXでのPerlプログラミングに取り組んでいる際に、web共有の設定やファイルのパーミッションの設定がうまくいかずエラーが発生している状況です。解決策を探しているが、現時点ではweb共有は停止しており、http://localhostは表示することができる状態です。セキュリティに関しては心配しています。
回答を見る
  • ベストアンサー

MacOSXでのPerlプログラミング

MacOSX10.4でPerlを勉強したいと思ったのですが、初歩の初歩で躓いてしまいました… web共有を開始し、http://localhostは表示させられました。 CGI-Executablesの中にファイルを保存して、http://localhost/cgi-bin/○○.cgiのアドレスでアクセスしましたが、エラーになってしまいました。 アクセス権がないと出ていたように思います。 今同じアドレスでアクセスするとサーバに接続出来ませんと出ます。 ネットで情報を集めて色々試しているうちにわけがわからなくなってしまったんですが… 現在はweb共有は停止していて、開始しようとしても出来ません。 でもhttp://localhostは表示出来ます。 これはどういう状態なんでしょうか? もしかしてセキュリティ的にとても危険だったりするのかなあと心配になっています。

  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Tinte
  • ベストアンサー率45% (27/60)
回答No.2

Macのターミナルという端末(アプリケーションの中にあります)を開いて、 次のコマンドを使います。 chmod 755 <指定のファイル>  同じように chmod 777とかやります。ファイルだけではなく勿論ディレクトリ(フォルダー)にも使えます。 ターミナルに入った時点でたぶん自身のホームディレクトリにいると思うので、ホームディレクトリから見て、 chmod 755 ~/Library/WebServer/CGI-Executables とかこんな感じだと思います。 現在の場所は、 pwd というコマンドで確認できます。 注意!  ​http://homepage.mac.com/dnagase/macosx/perlcgi.html このサイトで紹介しているディレクティブでは、xxxx.plというファイルが使えません!perlで書いたものでも、xxxx.cgiというファイル名にする必要があります!

mmmmmmmt
質問者

お礼

ありがとうございます。 パーミッションの設定は出来ました。 web共有が出来なくなっていたのも、再起動したら解決しました。 結局internal server errorとなってしまったのですが… もう少し試行錯誤してみようと思います。 何度もありがとうございました。

mmmmmmmt
質問者

補足

何度も申し訳ありません。 ファイルが破損していたようで、もう一度作り直したら動きました! お約束の「hello perl!」の一文ですが、かなり感動しました。 本当にありがとうございました!

その他の回答 (1)

  • Tinte
  • ベストアンサー率45% (27/60)
回答No.1

 ローカル内でApacheサーバーを運用している状態ですと、セキュリティー的には大丈夫ですよ。言葉上では「共有」となっていますが、実際は外部とつながっていないと思うのでローカル内で共有されているだけだと思います。  たぶん権限の問題ですと、cgi-binディレクトリのパーミションが間違っているか、Apacheのhttpd.confの設定ファイル内のディレクティブが間違っているのかもしれません。  パーミッションは、ホームディレクトリが755、Sitesというディレクトリ(たぶん公開ディレクトリになっていると思います。)が同様に755ですが、cgi-binディレクトリを別にしている場合は、そのcgi-binディレクトリが755でなくてはPerlが実行されません。  httpd.confの設定では、 ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/" この部分でスクリプト(実行ファイル)のディレクトリを指定します。 次に <Directory "/Library/WebServer/CGI-Executables"> AllowOverride None Options None Order allow,deny Allow from all </Directory> の部分でどのディレクトリでCGIを実行できるか?というようなことを指定します。  localhostでアクセスできるのは、644のパーミションでも可能なので、localhostでアクセスできることは直接にはperlが実行できることと関係がありませんが、一応Webサーバーが起動しているということが確認できるだけです。その上で、以上の設定をしないとPerlは実行されません。  またPerlのファイル自体も755にしておかないと勿論動きません。  そこら辺りを見てみると見落としている部分があるかもしれないです。

mmmmmmmt
質問者

お礼

回答ありがとうございます。 色んなものを見て色んなことを試したので、今がどういう状態になっているのかもよくわからなくなってしまいました。 httpd.confの設定は、http://homepage.mac.com/dnagase/macosx/perlcgi.htmlのページを参照してこの通りに書き換えました。 また、本当に初歩的な質問で申し訳ないのですが、ローカル内でパーミッションを変更するのはどうしたらいいのでしょうか? 外部のサーバーにアップする時はFTPソフト(cyberduck)を使いましたが、ローカルではどうすればいいのかさっぱりわかりません…

関連するQ&A

  • Mac(snowLeopard)でPerlでウェブアプリケーションを作

    Mac(snowLeopard)でPerlでウェブアプリケーションを作成しています。 まずは、web共有サーバーで自分のローカルアドレスを設定し、簡単なcgiスクリプトを書いて(Print関数の記述)、ブラウザでアクセスしたのですが表示されません。 アドレスは以下ですが、この前に何か指定しなければいけないのでしょうか? または階層の表記が間違っていますか? http://XXX.XXX.XX.X/Library/WebServer/CGI-Executables/◯◯◯.cgi

    • ベストアンサー
    • Mac
  • Perlのアドレスについて

    はじめまして、 Webサーバー初心者です。 CGIを動かすモジュールを入れて実際自分のサーバーでCGIを動かそうと思ったんですが、CGIのプログラムの頭にある「#!user/local/bin/user」(←例です)などのアドレスの指定がよくわかりません。よく、レンタルサーバーとかであると「うちのPerlのアドレスは#!user/local/bin/user」ですなどと表示されていたりしますが、今回は自分がサーバーなのでほかのユーザーがPerlを使うときにアドレスを指定してあげないといけません。どうしたら自分のサーバーのPerlの場所の指定ができるのでしょうか?(ようは,私の場合どのようなアドレスになるのかが知りたいわけです) ちなみにPerlのインストール先は「C:\Perl」でソフトは「Active Perl」を使用しております。サーバーのOSはWindowsXP(Pro)です。 よろしくお願いします。

  • MacOSXのWeb共有のCGIについて。

    Web共有のCGIの動作について、 /ライブラリ/WebServer/CGI-Executables/ 内のディレクトリの画像ファイル(jegやpng等)がWWWブラウザで表示されません。 「Internal Server Error」となります。 たぶん /etc/httpd/httpd,confで管理されているのかと思いますが、どこをどうしてよいのか分かりません。 どうすれば「CGI-Executables」ディレクトリ以下で画像ファイルが表示できるようになるのでしょう?

    • 締切済み
    • Mac
  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ブラウザで呼び出すとエラーに

    CGIプログラムを書きたくてゼロから勉強をはじめた者です。 プログラムの経験はまったく無いですが、Perlを勉強したいと思っています。使用するのは自宅のMac(OS10.4)です。 1行目に#!/usr/bin/Perlとパスを書き、それをCGI-Executablesフォルダの中に「go.cgi」という名前で保存しました。 次にTerminalにてパーミッション設定。 chmod 755 /Library/WebServer/CGI-Executables/go.cgi と書きました。 心配なのでケーブルを抜いてからパーソナルWeb共有を開始した後、http://以降localhost/cgi-bin/go.cgi あるいは127.0.0.1/cgi-bin/go.cgiでブラウザから呼び出してみたのですが、次のようなエラーが表示されてしまいます。 The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. 解説本やネットの情報を組み合わせてやってみたのですが、間違っている箇所がありましたらご教授ください。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • Perlのパス

    レンタルサーバーのCGIの説明で、「1.perl のパスは、/usr/bin/perl です。2.プログラムの先頭の記述は必ず、#!/usr/bin/perl となります。」って書いてあるんですけど、これを使用する場合、 http://www.kent-web.com/data/cart.html たぶん、admin.cgi , cart.cgi , order.cgi を エディタ で開いて以下の箇所をあたまの部分、#!/usr/bin/perl を変えればいいんですかね?それで1.の/usr/bin/perl は何処に書くのかな?それとも説明 の前置きですかね?「1.perl のパスは、」という意味はリンクがこうなるよ!って意味ですかね? ただま、KENT WEBみながら苦戦してます。 シロウトですいません。

    • ベストアンサー
    • Perl
  • perlでpostが受け取れない

    perlでCGI を作ってみましたが、POSTでデータが受け取れません。GETは問題ないのですが。read stdin が NULL になります。 ローカルのapache2でテストしています。$ENV{'CONTENT_LENGTH'}がゼロのためだと 思いますが対応が分かりません。 OS:CENTOS6 (VirtualBox) APACHE2.2 Perl 5.10 /var/www/cgi-bin で実行。 呼び出しは <form action='localhost/cgi-bin/uptag.cgi' method='post'"> です。

    • 締切済み
    • CGI
  • CGI プログラムエラーの解決法を教えてください。

    CGIの勉強をしている初心者です。 CGI プログラムを起動させると、 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.・・・・・ となってしまい、CGIがブラウザに表示されません。 どなたか解決法をご存知の方、教えてください。 (使用PCは、MacOSX(10.6.8)です。) 行った手順 1. Apacheの動作確認 [Machintosh HD]→[アプリケーション]→[システム環境設定] → 共有・アイコン → 「Web 共有」にチェックを入れる。 2. test.cgiを設置 設置場所 [Machintosh HD]→[ライブラリ]→[WebServer] → 「CGI-Executables」にtest.cgiを設置 test.cgiは下記 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ちわ!世界。</BODY>\n"; print "</HTML>\n"; __END__ 3.ターミナルでCGIプログラムに実行権をつける chmod 755 /Library/Webserver/CGI-Executables/test.cgi 4.ブラウザに「http://localhost/cgi-bin/test.cgi」を入力 最初に表示した「Internal Server Error」になってしまう。 ちなみに・・・ 1. ファイルに実行権限が付いているか確認したところ、下記のようになりました。 ls -la /Library/WebServer/CGI-Executables/test.cgi -rwxr-xr-x@ 1 taka staff 188 2. Syntaxを確認したところ、下記のようになりました。 perl -c /Library/Webserver/CGI-Executables/test.cgi /Library/Webserver/CGI-Executables/test.cgi syntax OK 3. ターミナルにて、which perlを確認したところ、下記のようにまりました。 /usr/bin/perl 4. tail -f /private/var/log/apache2/error_logにてApacheのエラーログを確認をしたところ、下記のようになりました。 [Thu Sep 22 22:31:17 2011] [error] [client 127.0.0.1] (8)Exec format error: exec of '/Library/WebServer/CGI-Executables/test.cgi' failed [Thu Sep 22 22:31:17 2011] [error] [client 127.0.0.1] Premature end of script headers: test.cgi エラーログの見方、解決法もわからない初心者です。 どなたか解決法をご存知のかた、教えてください。 どうぞよろしくお願いいたします。

    • 締切済み
    • CGI
  • mod_perlとディレクトリ

    以下のhttpd.confでAliasをコメントアウトして、 http://localhost/a/にアクセスすると、 Perlの【$ENV{MOD_PERL}】の部分が【mod_perl/2.0.2】と表示されますが Alias / c:/usr/Apache2/VirtualHost/mylink-info/public_html/a/ を有効にして、 http://localhost/にアクセスすると、 Perlの【$ENV{MOD_PERL}】の部分が【】となり、どうもmod_perlで動作していないです。 そうかといって、 <Location /a>を<Location />として全体をmod_perlすると sample.htmlなど cgi以外が正しく動作しないので、困っています。 mod_perlで動作するのは特定のディレクトリ(例えば /cgi-bin)の下限定として、 アクセス時に http://localhost/のようにあたかもpublic_htmlの下にあるように動作したいです。 #Alias / c:/usr/Apache2/VirtualHost/mylink-info/public_html/a/ #=== conf/httpd.conf ( mod_perl 2.x ) <IfModule mod_perl.c> LoadFile "C:/usr/local/bin/perl58.dll" PerlRequire "C:/usr/Apache2/conf/startup.pl" <Location /a> PerlSendHeader On SetHandler perl-script PerlResponseHandler ModPerl::PerlRun #PerlHandler Apache::Registry Options +ExecCGI PerlOptions +ParseHeaders Allow from all </Location> </IfModule>

    • ベストアンサー
    • Perl
  • Xamppでperlが表示されない

    Linux初心者です。 ubuntu8にXamppインストールして、htdocsにtest.cgiを入れて、http://localhost/test.cgiにアクセスすると、 「Internal Server Error」がでます。 test.cgiの内容は 「 #!/usr/local/bin/perl 」 の一行のみです。 ちなみに、おなじhtdocsディレクトリにPHPのファイルを入れてテストしたところ正常に動作しました。 ご教示願います。