2017-07-11 14 views
0

CentOS 7、Apache 2.4、Ruby 2.0を使用して簡単なCGIスクリプトを作成しようとしています。すべてのツールは公式パッケージからインストールされています。cgiスクリプトは、Apacheの下で書き込み可能なファイルに書き込めません。

/var/www/cgi-bin/test.cgiに常駐私のスクリプトは、次のとおりです。

#!/usr/bin/ruby 

puts "Content-Type: text/plain\n\n" 
begin 
    file = File.open("test.log", "a") 
    file.puts("foobar") 
    file.close 
rescue Exception 
    puts "pwd: #{`pwd`}" 
    puts $!.inspect 
end 

私はhttp://myhost/cgi-bin/test.cgiをロードすると、私は次を得る:

pwd: /var/www/cgi-bin 
#<Errno::EACCES: Permission denied - test.log> 

しかし:

[[email protected] cgi-bin]# ls -l /var/www/cgi-bin 
total 8 
-rwxr-xr-x. 1 root root 153 Jul 10 22:03 env.cgi 
-rwxr-xr-x. 1 root root 359 Jul 11 00:45 test.cgi 
-rw-rw-rw-. 1 root root 0 Jul 11 00:42 test.log 

どのように(と)このcgiスクリプトの中からデータを書き込むことはできますか?スクリプト自身の作業ディレクトリ?

+0

なぜ[Sinatra](http://sinatrarb.com)のようなものが存在する場合、1990年代のCGIランチャーを使用しているのかわかりません。深刻で恐ろしいセキュリティの影響があるため、CGIを完全に避けることを強くお勧めします。 – tadman

+0

これらのファイルは 'root'によって所有されています。おそらく、CGIスクリプトを実行しているユーザー(おそらくHTTPサーバーのデフォルトユーザー)がそのディレクトリにアクセスできない場合があります。 – tadman

+0

私はそれがシナトラを設定するよりも速くなると思ったので、1990年代のCGIを使用しています。これは使い捨てのプロジェクトです。文字通り、1つのフォームを持つ1つのページで、提出されたときにそのパラメータをフラットファイルに記録する必要があります。パス内の上位ディレクトリのパーミッションをチェックします。 – jph

答えて

1

SELinuxがファイル書き込みをブロックしていました。 "setenforce Permissive"は彼らを通過させました。/etc/sysconfig/selinuxを編集し、再起動して永続化しました。

+0

SELinuxは常にあなたの一日を台無しにしている、それは本当です。 – tadman

関連する問題