Capítulo 4. Configuração do SELinux para aplicações e serviços com configurações não padronizadas
Quando a SELinux está em modo de aplicação, a política padrão é a política direcionada. As seções seguintes fornecem informações sobre como configurar e configurar a política SELinux para vários serviços depois de alterar os padrões de configuração, tais como portas, localização de bancos de dados ou permissões de sistema de arquivos para processos.
Nos procedimentos seguintes, você aprende a mudar os tipos de SELinux para portas não padrão, a identificar e corrigir etiquetas incorretas para mudanças de diretórios padrão, e a ajustar a política usando booleans SELinux.
4.1. Personalizando a política SELinux para o servidor HTTP Apache em uma configuração não-padrão
Você pode configurar o servidor HTTP Apache para ouvir em uma porta diferente e fornecer conteúdo em um diretório não padrão. Para evitar negações conseqüentes do SELinux, siga os passos deste procedimento para ajustar a política SELinux de seu sistema.
Pré-requisitos
-
O pacote
httpd
está instalado e o servidor HTTP Apache está configurado para ouvir na porta TCP 3131 e para usar o diretório/var/test_www/
ao invés do diretório/var/www/
padrão. -
Os pacotes
policycoreutils-python-utils
esetroubleshoot-server
estão instalados em seu sistema.
Procedimento
Inicie o serviço
httpd
e verifique o status:# systemctl start httpd # systemctl status httpd ... httpd[14523]: (13)Permission denied: AH00072: make_sock: could not bind to address [::]:3131 ... systemd[1]: Failed to start The Apache HTTP Server. ...
A política da SELinux assume que
httpd
funciona na porta 80:# semanage port -l | grep http http_cache_port_t tcp 8080, 8118, 8123, 10001-10010 http_cache_port_t udp 3130 http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989
Mude o tipo SELinux da porta 3131 para corresponder à porta 80:
# semanage port -a -t http_port_t -p tcp 3131
Comece
httpd
novamente:# systemctl start httpd
No entanto, o conteúdo permanece inacessível:
# wget localhost:3131/index.html ... HTTP request sent, awaiting response... 403 Forbidden ...
Encontre o motivo com a ferramenta
sealert
:# sealert -l "*" ... SELinux is preventing httpd from getattr access on the file /var/test_www/html/index.html. ...
Compare os tipos de SELinux para o padrão e o novo caminho usando a ferramenta
matchpathcon
:# matchpathcon /var/www/html /var/test_www/html /var/www/html system_u:object_r:httpd_sys_content_t:s0 /var/test_www/html system_u:object_r:var_t:s0
Mude o tipo SELinux do novo diretório de conteúdo
/var/test_www/html/
para o tipo do diretório padrão/var/www/html
:# semanage fcontext -a -e /var/www /var/test_www
Reenquadre o diretório
/var
recursivamente:# restorecon -Rv /var/ ... Relabeled /var/test_www/html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /var/test_www/html/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Etapas de verificação
Verifique se o serviço
httpd
está funcionando:# systemctl status httpd ... Active: active (running) ... systemd[1]: Started The Apache HTTP Server. httpd[14888]: Server configured, listening on: port 3131 ...
Verificar se o conteúdo fornecido pelo servidor HTTP Apache está acessível:
# wget localhost:3131/index.html ... HTTP request sent, awaiting response... 200 OK Length: 0 [text/html] Saving to: ‘index.html’ ...
Recursos adicionais
-
As páginas de manual
semanage(8)
,matchpathcon(8)
, esealert(8)
.