
Ubuntu日本語フォーラム
ログインしていません。
※このトピックは、下記URLの続きです。初めての投稿であったことUbuntu初心者なため「初心者サポート」の所に投稿してしまいました。申し訳ございません。
https://forums.ubuntulinux.jp/viewtopic.php?id=20824
皆様、こんばんは。相変わらず試行錯誤しています。
デフォルトのドキュメントルート下ではCGIがまともに動いていたので、試しに「/var/www/html」下にユーザーディレクトリ(UserDir)を設定して、Perl CGIを実行してみました(CGIスクリプトは前回と同じ内容です)。結果は以前と同じで、エラーログには「End of script output before headers」、HTTPステータスは「500」です。
※前回記し忘れましたが、Apacheのパッケージは現時点での最新版(2.4.29-1ubuntu4.11)です。
Ubuntu 18.04LTS系のApacheパッケージで、ユーザーディレクトリ(UserDir)でまともにPerl CGIを動かせてる方いますでしょうか?私では解決が出来ず、大変、困っています。ご協力頂ければ幸いです。
本家ソースからインストールするのが一番でしょうかね…。
オフライン
たびたびすみません。
言語をshやC++に変えて試してみましたが…やはりユーザーディレクトリでは同じエラーでした。ユーザーディレクトリ以外では普通に動作します。
引き続きご助言等お待ち申し上げます。よろしくお願い致します。
オフライン
/etc/apache2/conf-available/serve-cgi-bin.conf
の内容はどうなっていますか。
ScriptAlias
でcgi用のディレクトリを指定します。
オフライン
こんばんは、レスありがとうございます。
「serve-cgi-bin.conf」の内容は以下の通りです。
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
ちなみに現在は、UserDirでの運用を諦めてしまったのですが、ユーザー毎にVirtualHostを立てる形で運用を始めました。今のところは問題はなく、CGIもsuEXECも効いています。本家Apacheのソースからの運用も考えましたが、やはり、パッケージによる管理がスマートで諸コスト面でも嬉しいので、この形を選択しました。
しかし、後学のために、この件は追及して行きたいと思っています。今後とも皆様の知恵をお貸しいただければ幸いです。宜しくお願いいたします。
オフライン
記し忘れました。
ScriptAliasディレクティブに関しては、今試せないので、あとで試して報告いたします。
引き続き、宜しくお願いいたします。
オフライン
先ほど、「mods-available/userdir.conf」に「ScriptAlias /~*/ /home/*/public_html/」を追記し、Apacheをrestartしましたが、残念ながら同じエラーでダメでした。
その他、下記URLのページに記載のあることは全て実施してみましたがダメでした。
https://httpd.apache.org/docs/2.4/ja/howto/cgi.html
引き続き宜しくお願いいたします。
#「なんで、UserDirだけCGIが走らないのーーーーっ???」
オフライン
全く同じスクリプトがエラーになるというのは理解できません。
試しに/var/www/html」下に適当なディレクトリを設定してみましたが問題なく動作しました。
(ScriptAliasは変更、restart後)
もう一度スクリプトをサーバー上で直接新規作成してみたらどうなるか試してください。(コピペではなく)
エラーを見る限り、少なくともスクリプトを読みに行った結果、問題があるということですから。
オフライン
こんにちは。レスありがとうございます。
> 全く同じスクリプトがエラーになるというのは理解できません。
だから不思議なんです。
> 試しに/var/www/html」下に適当なディレクトリを設定してみましたが問題なく動作しました。
以前の投稿にも記している通り、「/usr/www/var」下では、こちらの環境でも「問題なく動いてます」。問題なのは、どうやっても、「『UserDir』セクションで定義した『ユーザーディレクトリ下』での「CGIだけ」』がエラーになる」と言う事です。
>(ScriptAliasは変更、restart後)
>もう一度スクリプトをサーバー上で直接新規作成してみたらどうなるか試してください。(コピペではなく)
変わりません。同じエラーが出力されます。
> エラーを見る限り、少なくともスクリプトを読みに行った結果、問題があるということですから。
はい。わかっています。なので、自身でもスクリプトの出力結果を確認した旨を、改行コード(LF)への言及で、最初の投稿に記しています。
ご面倒でなければ、逆にkinme様の環境で、UbuntuのApacheパッケージ(2.4.29-1ubuntu4.11)の「UserDir」下でCGIを走らせたらどうなりますでしょうか?正常に動きますでしょうか?
ちなみに、私が用いているApacheのパッケージは「amd64版」です。今いる所のLinux環境は全てamd64なので、他のCPU用パッケージで試せていません。UserDirセクション下での「CGI以外」のファイルは「問題なく参照出来ています」。基本、ディレクトリのパーミッションは全て「0755」で、当該CGIスクリプトのパーミッションも「0755」です。0700や0750等でも試しましたが結果は同じでした。Perl CGIスクリプトは自体は「syntax OK」で普通に走り、先述した通り出力結果も確認できているので、Perlやスクリプト側の問題ではなさそうです。また、Perl以外のC++やshでCGIを作成し、UserDirセクション下で試しましたが、結果は同じエラーでした(こちらも出力は問題ありません)。
以上です。引き続き宜しくお願いいたします。
オフライン
テスト環境を構築し確認しています。
UserDir直下に置いたcgiは当方では何故か認識されませんでした。(404エラー)
直下ではなく、cgi-bin/を作成し、そこに配置したcgiは問題なく動作しました。
とりあえず参考まで。
オフライン
ApacheでユーザーディレクトリでCGIが動かない際の対処memo - Qiita
上によると、ユーザーの cgi ディレクトリの親ディレクトリが other で書き込み可能だとあかんとか書いてあります。
オフライン
当初の ユーザーディレクトリでのCGIがエラーになる で Options ディレクティブが 2行に書かれています。
これは 1行にまとめるか、2行目を Options +ExecCGI にしてください。
オフライン
こんばんは。皆様、レスありがとうございます。
※今、他用で当該機をいじれないので、確認は後日になります。ご了承ください。
#///////////////////////////////
# kinme様へのレスです。
#///////////////////////////////
kinme様、いつもありがとうございます。
> UserDir直下に置いたcgiは当方では何故か認識されませんでした。(404エラー)
エラーの違いは興味深いですね。しかし「404 Not Found」の場合は、実パスかURLパスの問題のような気がしますが如何でしょう?
> 直下ではなく、cgi-bin/を作成し、そこに配置したcgiは問題なく動作しました。
もし、こちらの当該サーバーでも「cgi-bin」で動いたら、configureオプション「--cgidir=<DIR>」の影響の可能性がありそうですね…ただ、そうだとしたら、「なぜUserDirだけ?」と言う疑問が残りますが…近いうちに確認します。もし、この影響であるなら、パッケージのリビルドが必要ですね…まだUbuntuないしdeb系は日が浅く、他の所要含め、パッケージの勉強にも時間が掛かりそうです。
#///////////////////////////////
# 以降、ry様へのレスです。
#///////////////////////////////
ry様、ありがとうございます。
> 上によると、ユーザーの cgi ディレクトリの親ディレクトリが other で書き込み可能だとあかんとか書いてあります。
先にも記しましたが、私の環境では、パーミッションを「0755」にしてるので、書き込みは不可能です。
> これは 1行にまとめるか、2行目を Options +ExecCGI にしてください。
今まで記していませんでしたが、元は1行にしてましたが変化はありませんでした。エラーとなります。また、2行に渡っていても文法上問題ないと認識していたのですが、私の認識不足でしょうか?
以前、記した通り、「+」の有無も変化ありません。エラーになります。現状は「+」が付いている状況です。
#///////////////////////////////
# 謝辞
#///////////////////////////////
先日した通り、今、他用で当該機を触れないので、色々試せないのが心苦しいのですが、何日後になるかは未定では御座いますが、後日configureオプション等の挙動を確認してレス致します。
また、UserDir下でのCGIの挙動について、他の方の環境もお伺いしたいので、是非、他の方もお聞かせください。宜しくお願いいたします。
皆様、本当にありがとうございます。
オフライン
たびたびすみません。
『謝辞』の箇所の「先日」は、「先述」に読み替えてください。「ゅ」が抜けてました。
申し訳ございません。
オフライン
直下でも動作確認しました。
ご指摘の通り、/~username/scriptname
だけで動作しました。
404は納得できませんでした。ありがとうございました。
オフライン
確認できたことのまとめ
ScriptAliasは関係なかった。
デフォルトの
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
</IfModule>
の
OptionsにExecCGIを追記
AddHandler cgi-script .pl .cgi
などを必要なものを追記
これで、UserDir下でのCGIが動作しました。
オフライン