2016-08-28 13 views
1

ApacheサーバーでPerlとCGIを使用して、アプリケーションのログファイルを作成しようとしました。このため、スクリプトはログファイルを保持する必要があります。ログファイルは、スクリプトの開始時に開く必要があります。 Unable to open the file: Permission denied at /usr/lib/cgi-bin/generate_logs.cgi、以下のようにスクリプトが行く:ファイルを開く際の権限の問題 - CGIのPerl

#!/usr/bin/perl 
use CGI qw(:standard); 
print "Content-type: text/plain\n\n"; 
... 
open (my $logs, ">", "/path/to/directory/logs.txt") || die "Unable to open the file: $!"; 
... 

私は~/Desktopのように、.txtログファイルのroot以外のパスを使用しようとしてきたが、それでもスクリプトが作成することはできません私が手ログから/ openファイルを開きます。より多くの情報が必要な場合は、お気軽にお問い合わせください。事前に感謝します

+0

ファイルのUID:GIDとは何ですか?また、Webサーバーとして機能するユーザーの名前は何ですか。 – stevieb

+0

@stevieb、多分私は間違っていますが、スクリプトがそれを開こうとするときにファイルが存在しなければ作成されるはずのファイルではありませんか? – tulians

+0

あなたの質問は何ですか?エラーが示すように、スクリプトが実行されるuser +グループには '/ path/to/directory'にファイルを作成する権限がありません。別のユーザー+グループを使用するようにApacheを構成するか、既存のユーザー+グループがディレクトリにアクセスしてファイルを作成できるようにアクセス許可を変更します。 – ikegami

答えて

3

Apache Webサーバーは通常、システム上で別個のユーザーとして実行されます。 ~/DesktopディレクトリはYOURユーザーに固有のものです。 Apacheが書き込むディレクトリは、Apacheユーザーが書き込み可能にする必要があります。

Apacheが動作しているユーザー名を確認するには、設定ファイルを確認してください。これはデフォルトで/etc/httpd/conf/httpd.confになっている可能性があります。おそらくそのファイルにはUser directiveという行があります。ユーザーapacheに設定されている可能性があります。

Apacheにはすでにログディレクトリがあります。通常は/var/log/httpdです。おそらくそこにあなたのログを書き込んでみてください。

ご提供いただいたサンプルコードは非常に問題があることにご注意ください。 CGIスクリプトを実行するたびに、ログファイルが消去され、上書きされます。同時ユーザーで実行すると、さらに大きな問題が発生します。 2つのスレッドが同じファイルを書き込もうとしていて、問題をロックしています。CGI::Logを見てみてください。

+0

私はUbuntu 16.04を使用しているので、グローバル設定が '/ etc/apache2/apache2.conf'にあるので、あなたが私に言ったファイルを見つけることができませんでした。しかし、私は最終的には、あなたが私に言ったように、私が選択したフォルダに書き込むための許可をApacheに設定することによって動作させました。ありがとう! – tulians

関連する問題