Php

由於權限錯誤,PHP 無法保存會話

  • March 13, 2016

我知道這個問題之前一定被問過(並回答過),但我在任何這些問題中都找不到解決我的問題的方法。有點奇怪…問題是我的 PHP 腳本(和我的 Apache 伺服器)無法寫入我係統上的文件夾。一點也不。

例如,我在執行腳本時收到以下錯誤:

致命錯誤:未擷取的異常 ‘Zend_Session_Exception’ 帶有消息 ‘Zend_Session::start() - /var/www/subdomains/vmb/vendor/zendframework/zendframework1/library/Zend/Session.php(Line:482): 錯誤 #2 session_start ():打開(/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_pathin both /etc/php.iniand /etc/httpd/conf.d/php.confto/tmp/phpsessions和 chown’d/chmod’ 這個文件夾設置為 apache:apache 777。上面的範例將會話儲存在另一個文件夾中(這也是 chown’d/chmod’ 作為 apache:apache 777),但我其他文件夾也出現同樣的錯誤。

所以我的 apache 伺服器作為 apache:apache 執行,我將文件夾 chownd 到我需要的 apache:apache,即使有 777 權限 Apache 也無法寫入這些文件夾。

你見過這樣的事情嗎?我以前沒有…

假設權限和所有權都可以,我相信這與SELinux.

快速而骯髒的方式:……假設你正在Permissive執行getenforce,嘗試SELinux通過執行禁用setenforce 0並再次點擊你的腳本,如果它有效,那麼它是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

可能還有很多其他的東西,但這至少對我有用。

引用自:https://serverfault.com/questions/627663