web-dev-qa-db-ja.com

Apache CGIスクリプトは、ディレクトリ内のファイルを上書きできません。

Solaris10ボックスで奇妙な問題が発生しています。ファイルを上書きする必要があるcgiスクリプト(Perl)があります。 Apacheでsuexecを実行していないため、宛先ディレクトリには完全な(777)アクセス権があり、Apacheが書き込みを行うことができます。

問題は、CGIスクリプトがディレクトリに新しいファイルを書き込むことはできるが、既存のファイルを上書きすることはできないということです。

**Directory permissions for file destination:** 

drwxrwxrwx 146 myuser white      32768 Jun  2 20:46 dest-dir

**File Permissions of file that needs to be over written:** 

-rw-r--r--   1 myuser white      0 Jun  2 20:50 cgitestfile

誰もがこれを解決するための簡単な解決策を知っていますか?

Apacheは、ファイルを所有している場合にのみファイルを上書きできるようです。

2
user770395

-rw-r--r-- 1 myuser white 0 Jun 2 20:50 cgitestfile

所有者(myuser)のファイルに対する書き込み権限しかありません。Apacheはユーザーmyuserとして実行されていますか?またはApacheまたはwww.dataまたはそのようなものとして?おそらく、他の書き込みアクセスを追加する必要がありますか?

1
navaho

Solaris 10では、デフォルトでApacheはUser nobodyGroup nobodyとして実行されます(/etc/Apache/httpd.confUserおよびGroupディレクティブを確認してください)。あなたの例では、Apacheは書き込みアクセス権がないため、cgitestfileに書き込むことができません。

dest-dirのowner:groupと、Apacheで上書きするファイルをnobodyに変更します。

1
user9517

「SELinux」構成が原因でこれに遭遇しました。 SELinuxが実行されている場合は、Apacheがファイルに書き込む機能を明示的に有効にする必要があります。これを使用するには、書き込みアクセスを許可するディレクトリとファイルに追加のアクセス許可を設定する必要もあります。

SELinuxが有効になっているかどうかを確認するには、以下を実行します。

sestatus

Cgiがファイルに書き込むことを可能にしたSEブール値をオンにするには:

Sudo setsebool -P allow_httpd_anon_write 1
Sudo setsebool -P allow_httpd_sys_script_anon_write 1

次に、最後にファイル/ディレクトリ「SELinuxセキュリティコンテキストタイプ」を「システム」読み取り/書き込みファイル/ディレクトリに設定するには(「パブリック」タイプにすることもできます-情報についてはGoogle「chcon」)、これを実行します。

Sudo chcon -R -t httpd_sys_rw_content_t /some/write/path

(/ some/write/pathを自分のパスに変更します。)

0
BuvinJ