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は、ファイルを所有している場合にのみファイルを上書きできるようです。
-rw-r--r-- 1 myuser white 0 Jun 2 20:50 cgitestfile
所有者(myuser)のファイルに対する書き込み権限しかありません。Apacheはユーザーmyuserとして実行されていますか?またはApacheまたはwww.dataまたはそのようなものとして?おそらく、他の書き込みアクセスを追加する必要がありますか?
Solaris 10では、デフォルトでApacheはUser nobody
、Group nobody
として実行されます(/etc/Apache/httpd.conf
User
およびGroup
ディレクティブを確認してください)。あなたの例では、Apacheは書き込みアクセス権がないため、cgitestfile
に書き込むことができません。
dest-dir
のowner:groupと、Apacheで上書きするファイルをnobody
に変更します。
「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を自分のパスに変更します。)