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スクリプトの中からデータを書き込むことはできますか?スクリプト自身の作業ディレクトリ?
なぜ[Sinatra](http://sinatrarb.com)のようなものが存在する場合、1990年代のCGIランチャーを使用しているのかわかりません。深刻で恐ろしいセキュリティの影響があるため、CGIを完全に避けることを強くお勧めします。 – tadman
これらのファイルは 'root'によって所有されています。おそらく、CGIスクリプトを実行しているユーザー(おそらくHTTPサーバーのデフォルトユーザー)がそのディレクトリにアクセスできない場合があります。 – tadman
私はそれがシナトラを設定するよりも速くなると思ったので、1990年代のCGIを使用しています。これは使い捨てのプロジェクトです。文字通り、1つのフォームを持つ1つのページで、提出されたときにそのパラメータをフラットファイルに記録する必要があります。パス内の上位ディレクトリのパーミッションをチェックします。 – jph