php

php 寫檔案寫不進去 selinux

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

這樣就可以了

Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

(若看不到驗證碼,請重新整理網頁。)