私はこの質問が以前に尋ねられた(そして答えられた)に違いないことを知っています、しかし私はそれらの質問のどれにおいても私の問題の解決策を見つけることができません。少し奇妙です...問題は、私のPHPスクリプト(および私のApacheサーバー)が私のシステム上のフォルダーに書き込めないことです。まったく書き込めません。
たとえば、スクリプトの実行中に次のエラーが発生します。
致命的なエラー:キャッチされない例外 'Zend_Session_Exception'とメッセージ 'Zend_Session :: start()-/ var/www/subdomains/vmb/vendor/zendframework/zendframework1/library/Zend/Session.php(Line:482):エラー#2 session_start ():open(/ var/www/subdomains/vmb/application /../ var/session/sess_ingph33ir4shr1e60kkifp37s7、O_RDWR)が失敗しました:アクセスが拒否されました(13)
CentOS 7、Apache2.4、PHP5.6(Apache php modで実行)およびその他の機能を備えたVPSがあります。 Apacheは、ユーザーApacheおよびグループApache(httpd.confファイルで設定)として実行されます。 session_path
と/etc/php.ini
の両方の/etc/httpd/conf.d/php.conf
を/tmp/phpsessions
に設定し、このフォルダーをApache:apache777としてchown'd/chmod 'しました。上記の例では、セッションを別の場所に保存します。フォルダー(Apache:apache777と同じようにchown'd/chmod ')ですが、他のフォルダーでも同じエラーが発生します。
そのため、ApacheサーバーはApache:apacheとして実行され、必要なフォルダーをApache:apacheに変更しましたが、777のアクセス許可があっても、Apacheはこれらのフォルダーへの書き込みに失敗します。
このようなものを見たことがありますか?今までにない...
権限と所有権に問題がないと仮定すると、これはSELinux
に関連していると思います。
迅速で汚い方法:... Permissive
の実行中にgetenforce
を取得していると仮定して、setenforce 0
を実行してSELinux
を無効にしてみて、スクリプトをもう一度ヒットしてください。動作した後はSELinux
でした。そこから、無効のままにするか(非推奨)、setenforce 1
を実行してオンに戻し、/var/log/audit/audit.log
を確認して、最終的な解決策に取り組みます。
いくつかの構成上の課題のためにSELinuxを放棄することは、悪い選択のように思われます。代わりに、少し時間をかけてそれを理解し、適切な解決策を探すことをお勧めします。この場合、解決策は、書き込み可能にする必要のあるフォルダーにhttpd_sys_rw_content_t(書き込みの場合は「w」に注意)ファイルコンテキストを設定することであるように見えます。 selinux fcontextはターゲットの正規表現を使用するため、コマンドはおそらく次のようになります。
semanage fcontext --add \
-t httpd_sys_rw_content_t \
'/var/www/subdomains/vmb/var/session(/.*)?'
正規表現は、セッションディレクトリの下にあるすべてのファイルと、ディレクトリ自体にコンテキストルールを適用します。
ポリシー(一度だけ必要)をディレクトリとその中のファイルに適用します。
restorecon -R /var/www/subdomains/vmb/var/session
それは他にもたくさんあるかもしれませんが、これは少なくとも私にとってはうまくいきました。