Fedora書込み権限とか

FedoraCore8,Apache2.2,Perl5.8でCGIからファイルを作成とか更新とかできない。

本でも買ってコンフィグを丹念に研究すればいいのだろうだが。
状況は以下の通り。
Fedora8のデフォルトのdocrootは/var/www/htmlとcgi用の/var/www/cgi-bin
/cgi-binから/htmlディレクトリにファイルを書込みに行くと、書き込めない。
ファイアウォールとか、実行権限777とか所有者をnobodyとかいろいろしたけど無理。
考えあぐねてたら以下で解決。
中盤あたりの/html/直下にはかきこめね
何でかは知らんけど。そうらしい。rootフォルダやらcgiフォルダをコンフィグファイルで
適当に直して解決。今から権限やら所有者権限やらをFTP,SCP,SFTPでの運用含みで考察しようかな。
できればnobodyグループの権限できちんと運用できたらいいのだけれど。

Re: CGIでファイルの実行権限が無いって? 多分、Fedoraのデフォルト設定では、cgi-binとdoc_root
(/var/www/cgi-bin & /var/www/html)
では、書き込みできないのではないかと思われる。
わたしの場合は、いつも書き込むファイルは、/var/www/html以下に
ディレクトリを掘って書き込むようにしている。

Fedoraサーバ好き

02/25/06 03:03

編集
Re: CGIでファイルの実行権限が無いって? siさん
ご返信ありがとうございます。

早速ですが…
>多分、Fedoraのデフォルト設定では、cgi-binとdoc_root
>(/var/www/cgi-bin & /var/www/html)
>では、書き込みできないのではないかと思われる。

 一応書き込みは出来るんです。(確認しました。)

 以下のテストプログラムを(/var/www/cgi-bin/)にtest.cgi として書き込みしました。

                                                                                                                • -

#!/usr/bin/perl
print "Content-Type:text/html; charset=UTF-8\n";
print "\n";
print "";
print "";
print "

はじめてのCGI

";
print "\n";
[root@jpn01 cgi-bin]# #!/usr/bin/perl

                                                                                                                • -

問題無く表示されました。
一体何が原因なのか?…悩


sho
02/25/06 06:34

編集
Re: CGIでファイルの実行権限が無いって? あなたがroot権限で書き込むことは出来るでしょうが、問題にしているのはcgiプログラムが書き込むことができるかということです。

問題になっているカウンタのCGIを実行したときにブラウザに表示されるエラーメッセージを正確に教えてください。それと、そのエラーが出たときに、/var/log/httpd/error_logに出ているエラーログも見せてもらえませんでしょうか?

si
02/25/06 14:51

編集
Re: CGIでファイルの実行権限が無いって? 言葉足らずだったようですね。
掲示のスクリプトを/var/www/htmlにおいて実行すると
print "

Can't open error
\n";
print "指定されたファイルが開けませんでした
$file

\n";
の部分が実行されると思います。
これを実行するするには、
# chown -R apache.apache /var/www/html
として、ディレクトリ,ファイルの所有者をcgiの実行ユーザーに変更する
必要があります。
ファイルの所有者のみapacheにしても、ファイルモードを0777にしても
エラーとなります。
ですので、私の場合は書き込みを伴う場合は
/var/www/html/以下にapacheに所有権を付けてディレクトリを作り
そこにスクリプトを置くようにしています。
(但し、私の場合は、SELinux Enforcingですので、違うかもしれません)

Fedoraサーバ好き

02/25/06 15:36

編集
Re: CGIでファイルの実行権限が無いって? shoさん

 お手数お掛けします。

まず /var/www/cgi-bin/counter1.cgiを実行しますとWeb上では以下のエラーメッセージが表示されました。

                                                                                                                                      • -

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, root@xxxx.xx.jp 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.

                                                                                                                                  • -

そして /var/log/httpd/error_logには以下の通りです。

                                                                                                                                  • -

[Sat Feb 25 15:30:05 2006] [error] [client 203.1xx.xxx.xxx] (2)No such file or directory: exec of '/var/www/cgi-bin/counter1.cgi' failed
[Sat Feb 25 15:30:05 2006] [error] [client 203.1xx.xxx.xxx] Premature end of script headers: counter1.cgi
[Sat Feb 25 15:30:06 2006] [error] [client 203.1xx.xxx.xxx] (2)No such file or directory: exec of '/var/www/cgi-bin/counter1.cgi' failed
[Sat Feb 25 15:30:06 2006] [error] [client 203.1xx.xxx.xxx] Premature end of script headers: counter1.cgi
[Sat Feb 25 15:30:06 2006] [error] [client 203.1xx.xxx.xxx] (2)No such file or directory: exec of '/var/www/cgi-bin/counter1.cgi' failed
[Sat Feb 25 15:30:06 2006] [error] [client 203.1xx.xxx.xx] Premature end of script headers: counter1.cgi

                                                                                                                                • -

このメッセージは私は実行出来ないからと判断したんですが…

sho
02/25/06 18:10

編集
Re: CGIでファイルの実行権限が無いって? そのログのエラーを見ると、やっぱりCGIの一行目が怪しい気がします。

ほんとうに、一行目は
#!/usr/bin/perl
になっていますか?一見そうなっているように見えても、表示されない文字があるのかもしれません。Windowsの改行形式になっている場合もだめです。

以下のコマンドで1行目をダンプしてチェックしてください。
$ head -1 counter1.cgi | od -xc

こんな出力ならOKです。\nの前に、\rとかが入っているとダメ

0000000 2123 752f 7273 622f 6e69 702f 7265 0a6c
# ! / u s r / b i n / p e r l \n
0000020

ただし、これを直しても他の人が指摘している"指定されたファイルが開けませんでした"の問題になるかもしれません。

Fedoraサーバ好き

02/25/06 22:41

編集
Re: CGIでファイルの実行権限が無いって? shoさんありがとうございます。
早速、試してみました。

                                                                                                                      • -

[xxxxxx@host cgi-bin]$ head -1 counter1.cgi | od -xc
0000000 2123 752f 7273 622f 6e69 702f 7265 0d6c
# ! / u s r / b i n / p e r l \r
0000020 000a
\n \0
0000021

                                                                                                                          • -

このように表示されました。
いかがでしょう。

Fedoraサーバ好き

02/26/06 03:23

編集
Re: CGIでファイルの実行権限が無いって? strangerさんの記述の意味がようやく分かりました。

suexecは起動されていません。
/var/log/httpd/ 以下に、suexec が起動している場合、 suexec.log が記述されるはずなんですが(syslogサービスは起動させています。もう1ヶ月以上前から…)そのログは見当たりません。
 つまり suexec は起動していないという結論に至ります。

 ということは起動させるにはどうすればいいんでしょうか?

sho
02/26/06 10:30

編集
Re: CGIでファイルの実行権限が無いって? 原因判明です。

> [xxxxxx@host cgi-bin]$ head -1 counter1.cgi | od -xc
> 0000000 2123 752f 7273 622f 6e69 702f 7265 0d6c
> # ! / u s r / b i n / p e r l \r
> 0000020 000a
> \n \0
> 0000021

先に言ったように\nの前に\rがあります。Windowsで作ったファイルをそのまま持ってきた場合などにこうなります。

これがあるので/usr/bin/perlがうまく見つけられなくて実行できません。

\rを除去してください。たとえばtrコマンドの-dオプションで出来ます。
(実行例)
# tr -d "\r" < counter1.cgi > temp
# mv temp counter1.cgi
# chmod 777 counter1.cgi ; パーミッションを777にする場合

これで実行できるようになると思いますが、実行できても、今まで指摘されてきた"指定されたファイルが開けませんでした"の問題になるかもしれません。

Fedoraサーバ好き

02/26/06 15:34

編集
Re: CGIでファイルの実行権限が無いって? shoさんありがとうございます。
お手数お掛けします。

昨日、直接 CGI プログラムを vi で書き込みました。
実行したのですが、やはり実行権限エラーが発生しました。
現在は、以下の状態です。

[usr @host user01] # head -1 counter1.cgi | od -xc
0000000 2123 752f 7273 622f 6e69 702f 7265 0a6c
# ! / u s r / b i n / p e r l \n
0000020

tr -d "\r" < counter1.cgi > temp
を実行しましたが、やはり実行権限エラーが発生しました。

その際の error_log です。

                                                                                                                    • -

[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] Bareword found where operator expected at /var/www/cgi-bin/counter1.cgi line 17, near ""$file) || die "cannot"
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] \t(Missing operator before cannot?)
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] String found where operator expected at /var/www/cgi-bin/counter1.cgi line 22, near "print TMPFILE ++$count, ""
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] (Might be a runaway multi-line "" string starting on line 17)
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] \t(Missing semicolon on previous line?)
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] Backslash found where operator expected at /var/www/cgi-bin/counter1.cgi line 22, near "print TMPFILE ++$count, "\\"
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] \t(Do you need to predeclare print?)
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] String found where operator expected at /var/www/cgi-bin/counter1.cgi line 31, near "print ""
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] (Might be a runaway multi-line "" string starting on line 22)
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] \t(Missing semicolon on previous line?)
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] syntax error at /var/www/cgi-bin/counter1.cgi line 17, near ""$file) || die "cannot "
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] Unrecognized character \\xE3 at /var/www/cgi-bin/counter1.cgi line 31.
[Sun Feb 26 15:25:16 2006] [error] [client 203.1xx.xxx.xxx] Premature end of script headers: counter1.cgi

                                                                                                                              • -

この辺りに答えがありそうです…

http://bbs.fedora.jp/read.php?FID=8&TID=2899&p=2