Reparar um Host de Serviço Web com Múltiplos Problemas

LinuxBeginner
Pratique Agora

Introdução

Tarefas reais de administração raramente envolvem apenas um comando. Um serviço pode falhar porque a unidade está inativa, o usuário do serviço não consegue ler o conteúdo, os rótulos do SELinux estão incompletos ou o firewall não expõe a porta necessária.

Neste laboratório, você irá reparar um host de serviço web preparado. O serviço deve ser executado como labex, servir conteúdo a partir de /srv/rhcsa-review/site, escutar em 127.0.0.1:18082, estar habilitado na inicialização, possuir os rótulos SELinux corretos e expor 18082/tcp através do firewalld.

Reproduzir e Diagnosticar a Falha do Serviço

Nesta etapa, você irá reproduzir a falha do serviço e inspecionar as evidências antes de realizar alterações. Comece com systemctl e journalctl, depois compare a mensagem de log com as permissões de arquivo.

A configuração inicial preserva permanentemente o acesso SSH e o terminal do navegador LabEx em 3002/tcp na zona public. Mantenha essas regras de gerenciamento ao alterar a política de firewall da aplicação.

Entre no diretório do projeto.

cd /home/labex/project

Verifique o serviço preparado. Ele existe, mas ainda não está em execução.

systemctl status rhcsa-review-web.service --no-pager || true

Tente iniciá-lo. Isso deve falhar porque o serviço é executado como labex, mas o diretório de conteúdo não está acessível para esse usuário.

sudo systemctl start rhcsa-review-web.service || echo "service start failed as expected"
sleep 1

Verifique se o systemd marcou a unidade como falha.

systemctl is-failed rhcsa-review-web.service || true

Leia as entradas de log mais recentes do serviço. O journal deve indicar que a conta de serviço não consegue usar o diretório de trabalho ou o caminho de conteúdo configurado.

sudo journalctl -u rhcsa-review-web.service -n 20 --no-pager

Inspecione as permissões do caminho de conteúdo.

sudo stat -c '%a %U:%G %n' /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html

Reparar Permissões de Conteúdo

Nesta etapa, você tornará o conteúdo legível pela conta de serviço sem torná-lo legível para todos. O serviço é executado com o usuário labex e grupo labex.

Defina o grupo da árvore de diretórios como labex. O serviço é executado com o grupo labex, portanto, a propriedade de grupo permite conceder acesso sem alterar os arquivos para que sejam de propriedade do usuário do serviço.

sudo chown root:labex /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html

Permita que o grupo percorra os diretórios e leia o arquivo de conteúdo. Os diretórios precisam do bit de execução para travessia, e o arquivo HTML precisa do bit de leitura para que o serviço possa servi-lo.

sudo chmod 750 /srv/rhcsa-review /srv/rhcsa-review/site
sudo chmod 640 /srv/rhcsa-review/site/index.html

Inspecione as permissões reparadas.

sudo stat -c '%a %U:%G %n' /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html

Limpe o estado de falha e inicie o serviço novamente. O reset-failed remove o marcador de falha antigo, tornando o próximo estado do systemctl mais fácil de ler após o reparo das permissões.

sudo systemctl reset-failed rhcsa-review-web.service
sudo systemctl start rhcsa-review-web.service
sleep 1

Confirme se o serviço está ativo e servindo conteúdo.

systemctl is-active rhcsa-review-web.service
curl -s http://127.0.0.1:18082/

Tornar o Serviço Persistente

Nesta etapa, você habilitará o serviço reparado para que ele inicie na inicialização. Um serviço que funciona apenas até a próxima reinicialização não está totalmente reparado.

Habilite a unidade. Iniciar corrige a inicialização atual; habilitar registra que o serviço reparado deve iniciar automaticamente no alvo de inicialização normal.

sudo systemctl enable rhcsa-review-web.service

Verifique o estado de habilitação.

systemctl is-enabled rhcsa-review-web.service

Reinicie o serviço para confirmar que a unidade ainda pode iniciar corretamente após o reparo das permissões. Uma reinicialização limpa é uma evidência mais forte do que apenas verificar o processo que estava em execução.

sudo systemctl restart rhcsa-review-web.service
sleep 1

Teste o serviço novamente.

systemctl is-active rhcsa-review-web.service
curl -s http://127.0.0.1:18082/

Adicionar Contexto SELinux e Rótulos de Porta

Nesta etapa, você fará com que os metadados da política SELinux correspondam ao design do serviço. Mesmo quando um serviço de demonstração simples consegue ler o conteúdo, os reparos de serviço web no estilo RHCSA devem incluir contexto de arquivo persistente e rótulos de porta.

Adicione uma regra de contexto de conteúdo HTTP persistente para o conteúdo do serviço. A regra fcontext é um metadado de política persistente; ela informa ao SELinux qual rótulo este caminho deve receber após a reetiquetagem.

sudo semanage fcontext -a -t httpd_sys_content_t '/srv/rhcsa-review/site(/.*)?'

Aplique a regra aos arquivos existentes. O restorecon lê a regra persistente e aplica o rótulo correto aos arquivos que já existem.

sudo restorecon -Rv /srv/rhcsa-review/site

Inspecione a regra personalizada e o rótulo resultante.

sudo semanage fcontext -l | grep '/srv/rhcsa-review/site'
ls -Zd /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html

Adicione a porta do serviço ao tipo de porta HTTP. Os rótulos de porta permitem que a política SELinux entenda que a porta TCP 18082 destina-se ao tráfego de serviço do tipo HTTP.

sudo semanage port -a -t http_port_t -p tcp 18082

Inspecione o rótulo da porta HTTP.

sudo semanage port -l | grep '^http_port_t'

Abrir o Firewall e Validar de Ponta a Ponta

Nesta etapa, você exporá a porta do serviço através do firewalld e executará uma auditoria final. O serviço deve estar ativo, habilitado, rotulado e permitido pelo firewall do host.

Inicie e habilite o firewalld.

sudo systemctl enable --now firewalld

Adicione a porta do serviço permanentemente e recarregue o firewall. A regra permanente sobrevive às recargas do firewalld, e o recarregamento a aplica ao firewall ativo.

sudo firewall-cmd --permanent --add-port=18082/tcp
sudo firewall-cmd --reload

Inspecione a lista de portas ativas.

sudo firewall-cmd --list-ports

Execute as verificações finais do serviço. Esses comandos confirmam que o serviço está habilitado para inicialização, ativo agora e retornando a resposta web local esperada.

systemctl is-enabled rhcsa-review-web.service
systemctl is-active rhcsa-review-web.service
curl -s http://127.0.0.1:18082/

Audite as permissões de conteúdo uma última vez. Esta verificação final de permissão protege contra um reparo parcial comum: o serviço funciona agora, mas o modelo de acesso é mais amplo ou mais restrito do que o pretendido.

sudo stat -c '%a %U:%G %n' /srv/rhcsa-review /srv/rhcsa-review/site /srv/rhcsa-review/site/index.html

Resumo

Você reparou um host de serviço com múltiplos problemas diagnosticando uma unidade systemd com falha, corrigindo permissões do usuário do serviço, habilitando o serviço, adicionando rótulos de arquivo e porta do SELinux, abrindo o firewalld e validando a resposta web final.