A política SELinux para o servidor http é muito flexível, possibilitando que os administradores configurem os serviços web na maneira mais segura possível. Os seguintes contextos de tipos de arquivo são definidos para uso com o servidor http:
- httpd_sys_content_t: para conteúdo disponibilizado por todos os scripts httpd e o serviço (daemon);
- httpd_sys_script_exec_t: para scripts cgi que precisam acessar todos os tipos do sistema (um script em perl, por exemplo);
- httpd_sys_script_ro_t: um arquivo do tipo httpd_sys_script_ro_t só pode ser lido por arquivos do tipo httpd_sys_script_exec_t, bloqueando acessos a dados escritos pelos cgi's para os outros domínios;
- httpd_sys_script_rw_t: um arquivo do tipo httpd_sys_script_rw_t só pode ser lido e escrito (operações read/write) por arquivos do tipo httpd_sys_script_exec_t, bloqueando todos os outros tipos de acesso a dados escritos pelos cgi's para os outros domínios;
- httpd_sys_script_ra_t: um arquivo do tipo httpd_sys_script_ra_t só pode ser lido e adicionado (operações read/append) por arquivos do tipo httpd_sys_script_exec_t, bloqueando todos os outros tipos de acesso a dados escritos pelos cgi's para os outros domínios;
- httpd_unconfined_script_exec_t: permite que scripts cgi executem sem a proteção SELinux. Deve ser somente usado em scripts httpd muito complexos, depois que todas as outras opções foram exaustivamente testadas e mesmo assim os scripts ainda gerarem entradas AVC no log;
Também para customização da política do servidor apache, existem as seguintes variáveis booleanas:
- allow_httpd_sys_script_anon_write: usada para permitir que scripts cgi sejam capazes de escrever em arquivos e diretórios compartilhados por outros domínios (Apache, FTP, rsync, Samba);
- allow_httpd_anon_write: permite que o daemon do apache escreva em arquivos e diretórios compartilhados por outros domínios (Apache, FTP, rsync, Samba);
- httpd_enable_cgi: permite que o servidor apache execute scripts cgi's;
- httpd_enable_homedirs: por padrão, o servidor httpd não tem permissão de acessar os diretórios home dos usuários. Caso essa característica seja necessária, é preciso configurar a variável booleana httpd_enable_homedirs e mudar o contexto de segurança dos arquivos que se deseja permitir o acesso para httpd_sys_content_t:
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t user/public_html
- httpd_tty_comm: por padrão o servidor httpd não tem permissão de acesso ao terminal. Na maioria dos casos isso é desejável, porém pode ocorrer situações onde o servidor httpd precise de acesso ao terminal, como esperar por uma senha para ter acesso a algum arquivo de certificado, por exemplo. Nesse caso, é necessário liberar esse acesso através do comando:
setsebool -P httpd_tty_comm 1
- httpd_unified: permite que o serviço httpd acesse todos os tipos de arquivos do tipo http (conforme tipos listados acima), ignorando os controles baseados pelo contexto de segurança.
- httpd_builtin_scripting: pode ser usado para desabilitar o uso de scripting (PHP). PHP e outros módulos do apache rodam no mesmo contexto de segurança do servidor apache.
- httpd_can_network_connect: por padrão, scripts httpd não têm permissão de conectar através da rede. Isso previne que um cracker use o servidor httpd para atacar outras máquinas. Se for necessário que os scripts acessem a rede, basta configurar: setsebool -P httpd_can_network_connect 1;
- httpd_can_network_connect_db: permite que scripts e módulos tenham acesso a banco de dados pela rede (mysql,postgresql);
- httpd_can_sendmail: habilita ao servidor httpd o envio de e-mails;
- httpd_enable_ftp_server: permite que o servidor httpd aja como um servidor ftp e escute na porta ftp;
- httpd_ssi_exec: permite que scripts SSI executem no mesmo contexto de segurança que scripts cgi;
- httpd_use_nfs: habilita ao servidor httpd acesso a arquivos e diretórios via nfs;
- httpd_use_cifs: habilita ao servidor httpd acesso a arquivos e diretórios via cifs;
- httpd_can_network_relay: permite que o httpd funcione como um relay (proxy).
Jeronimo Zucco
2008-04-26