php在寫檔案時 例如 fopen函數 通常你會需要開啟該檔案的寫入權限 (例如改權限成777之類…)
但是改完卻還是寫不進去 出現failed to open stream: Permission denied時
可以看一下 /var/log/messages 的資料 看是不是selinux阻擋了
Nov 11 10:37:45 web80 setroubleshoot[1609]: SELinux 防止 php-fpm 進行 write 存取於 檔案 /var/www/html/test.php 上。 至於完整 SELinux 訊息請執行:sealert -l e17f25e8-6d7a-43fc-aba4-6c2105f439a0 Nov 11 10:37:45 web80 python3[1609]: SELinux 防止 php-fpm 進行 write 存取於 檔案 /var/www/html/test.php 上。#012#012***** 插件 httpd_write_content (92.2 信賴度) 項建議 *******************************#012#012如果你想要允許 php-fpm 在 test.php file 上擁有 write 存取權限#012接著 您需要更改 '/var/www/html/test.php' 上的標籤#012執行#012# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/test.php'#012# restorecon -v '/var/www/html/test.php'#012#012***** 插件 catchall_boolean (7.83 信賴度) 項建議 **********************************#012#012若您希望 allow httpd to unified#012接著 您必須啟用「httpd_unified」布林值以通知 SELinux。#012#012執行#012setsebool -P httpd_unified 1#012#012***** 插件 catchall (1.41 信賴度) 項建議 ******************************************#012#012若您相信 php-fpm 應該預設允許在 test.php file 上作 write 存取。#012接著 您應將此回報為錯誤。#012您可產生本機模組,以允許這項存取。#012執行#012立刻允許此存取,請執行:#012# ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm#012# semodule -X 300 -i my-phpfpm.pp#012
解決方法有兩種 一種是直接關閉selinux 萬事搞定,但通常不建議這樣搞
另一個就是針對你要寫入的檔案 例如test.php 開權限
指令為
#chcon -t httpd_sys_rw_content_t test.php
這樣就可以了