Php

SELinux:如何啟用對 Joomla 記憶體目錄的寫訪問權限?

  • December 31, 2012

我已經在執行 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

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