web-dev-qa-db-ja.com

PHPパーミッションエラーのため、セッションを保存できません

私はこの質問が以前に尋ねられた(そして答えられた)に違いないことを知っています、しかし私はそれらの質問のどれにおいても私の問題の解決策を見つけることができません。少し奇妙です...問題は、私の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はこれらのフォルダーへの書き込みに失敗します。

このようなものを見たことがありますか?今までにない...

3
redelschaap

権限と所有権に問題がないと仮定すると、これはSELinuxに関連していると思います。

迅速で汚い方法:... Permissiveの実行中にgetenforceを取得していると仮定して、setenforce 0を実行してSELinuxを無効にしてみて、スクリプトをもう一度ヒットしてください。動作した後はSELinuxでした。そこから、無効のままにするか(非推奨)、setenforce 1を実行してオンに戻し、/var/log/audit/audit.logを確認して、最終的な解決策に取り組みます。

4
alexus

いくつかの構成上の課題のために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

それは他にもたくさんあるかもしれませんが、これは少なくとも私にとってはうまくいきました。

0
Saustrup