Php
SELinux:如何啟用對 Joomla 記憶體目錄的寫訪問權限?
我已經在執行 Joomla 網站的 Debian 擠壓系統上設置了 SELinux。Joomla PHP 程式碼希望對某些記憶體目錄具有寫訪問權。
/var/log/messages 文件包含如下條目:
Dec 31 10:26:16 s0022 kernel: [ 2116.423199] type=1400 audit(1356945976.634:14831): avc: denied { write } for pid=1886 comm="apache2" name="_system" dev=xvda3 ino=790893 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_t:s0 tclass=dir Dec 31 10:26:16 s0022 kernel: [ 2116.447613] type=1400 audit(1356945976.658:14837): avc: denied { write } for pid=1886 comm="apache2" name="mod_mainmenu" dev=xvda3 ino=791346 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_t:s0 tclass=dir
與 inode 值對應的目錄可由 apache2 寫入(以 wwwrun 身份執行)。記憶體文件是在 SELinux 關閉時創建的,但不是在它啟動時創建的。然而,這些目錄的路徑與 Debian Squeeze 的預設 DocumentRoot 不同。
# ls -ldZ cache cache/_system cache/mod_mainmenu drwxrwxr-x. 5 wwwrun www unconfined_u:object_r:httpd_t:s0 4096 Dec 29 23:13 cache drwxrwxr-x. 2 wwwrun www unconfined_u:object_r:httpd_t:s0 4096 Dec 30 19:31 cache/mod_mainmenu drwxrwxr-x. 2 wwwrun www unconfined_u:object_r:httpd_t:s0 4096 Dec 30 19:31 cache/_system
我還嘗試啟用寫入相關的布爾標誌,但這也無濟於事:
# getsebool -a | grep httpd allow_httpd_anon_write --> on allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> on allow_httpd_user_script_anon_write --> on httpd_builtin_scripting --> off httpd_can_network_connect --> off httpd_can_network_connect_db --> on httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> off httpd_enable_cgi --> off httpd_enable_ftp_server --> off httpd_enable_homedirs --> on httpd_ssi_exec --> off httpd_tty_comm --> off httpd_unified --> off httpd_use_cifs --> off httpd_use_gpg --> off httpd_use_nfs --> off
我已經使用 audit2allow 創建可載入模組以啟用其他守護程序的寫入訪問權限(例如對於 rotatelog),但我認為這不是在這種情況下要走的路。httpd 的模組已經存在,如果可以避免的話,我不想以任何方式接觸它。
我只是在尋找一種方法讓 apache2 / php / Joomla 在我的特定 DocumentRoot 內的特定目錄中寫入,而不授予對其他任何內容的寫入權限。請指教。
記憶體目錄被所有不同類型的使用者使用,就像你已經提到的那樣,apache 使用者、php 使用者,如果你使用 mod_fcgid,甚至可能是一個單獨的 Joomla 使用者。對於這樣的目錄,有
public_content_rw_t
類型上下文。這使得它對所有涉及的服務都是可寫的,並且(因為它“只是”一個帶有臨時文件的記憶體目錄)不應該帶來太多的安全風險。所以我建議使用命令將類型更改為公共類型chcon -R -t public_content_rw_t /path/to/wwwroot/cache