Eu configurei o SELinux em um sistema de squeeze Debian, que roda um site Joomla. O código PHP do Joomla quer ter acesso de gravação a determinados diretórios de cache.
O arquivo / var / log / messages contém entradas como estas:
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
Os diretórios correspondentes aos valores de inode são graváveis pelo apache2 (executando como wwwrun). Os arquivos de cache são criados quando o SELinux é desligado, mas não quando é ativado. O caminho para esses diretórios é diferente do DocumentRoot padrão do Debian Squeeze.
# 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
Eu também tentei ativar sinalizadores booleanos relacionados à gravação, mas isso não ajudou:
# 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
Eu usei o audit2allow para criar módulos carregáveis para ativar o acesso de gravação para outros daemons (por exemplo, para rotatelog), mas não acho que esse seja o caminho a seguir nessa situação. Um módulo para o httpd já existe e não quero tocá-lo de qualquer forma se puder evitá-lo.
Estou simplesmente procurando uma maneira de deixar o apache2 / php / Joomla escrever em diretórios específicos dentro do meu DocumentRoot específico, sem conceder acesso de gravação a qualquer outra coisa. Por favor, informe.