Reparar un host de servicio web con múltiples problemas

LinuxBeginner
Practicar Ahora

Introducción

Las tareas reales de administración rara vez se limitan a un solo comando. Un servicio puede fallar porque la unidad está inactiva, el usuario del servicio no puede leer el contenido, las etiquetas de SELinux están incompletas o el firewall no expone el puerto requerido.

En este laboratorio, reparará un host de servicio web preparado. El servicio debe ejecutarse como labex, servir contenido desde /srv/rhcsa-review/site, escuchar en 127.0.0.1:18082, estar habilitado al arrancar, tener las etiquetas de SELinux correctas y exponer 18082/tcp a través de firewalld.

Reproducir y diagnosticar el fallo del servicio

En este paso, reproducirá el fallo del servicio e inspeccionará las evidencias antes de realizar cambios. Comience con systemctl y journalctl, luego compare el mensaje de registro con los permisos de archivo.

La configuración inicial mantiene de forma permanente el acceso SSH y el acceso al terminal de LabEx en el navegador a través de 3002/tcp en la zona public. Conserve estas reglas de administración al modificar la política del firewall para la aplicación.

Acceda al directorio del proyecto.

cd /home/labex/project

Compruebe el servicio preparado. Existe, pero aún no se está ejecutando.

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

Intente iniciarlo. Esto debería fallar porque el servicio se ejecuta como labex, pero el directorio de contenido no es accesible para ese usuario.

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

Muestre si systemd marcó la unidad como fallida.

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

Lea las entradas de registro más recientes del servicio. El diario debería indicarle que la cuenta de servicio no puede utilizar el directorio de trabajo o la ruta de contenido configurados.

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

Inspeccione los permisos de la ruta de contenido.

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

Reparar los permisos del contenido

En este paso, hará que el contenido sea legible para la cuenta de servicio sin que sea legible para todos los usuarios. El servicio se ejecuta con el usuario labex y el grupo labex.

Establezca el grupo del árbol de directorios en labex. El servicio se ejecuta con el grupo labex, por lo que la propiedad de grupo le permite otorgar acceso sin cambiar los archivos para que sean propiedad del usuario del servicio.

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

Permita que el grupo recorra los directorios y lea el archivo de contenido. Los directorios necesitan el bit de ejecución para el recorrido, y el archivo HTML necesita el bit de lectura para que el servicio pueda servirlo.

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

Inspeccione los permisos reparados.

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

Borre el estado de fallo e inicie el servicio nuevamente. reset-failed elimina el marcador de fallo antiguo, lo que facilita la lectura del estado de systemctl después de la reparación de permisos.

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

Confirme que el servicio está activo y sirviendo contenido.

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

Hacer que el servicio sea persistente

En este paso, habilitará el servicio reparado para que se inicie al arrancar. Un servicio que solo funciona hasta el próximo arranque no está completamente reparado.

Habilite la unidad. Iniciar el servicio soluciona el arranque actual; habilitarlo registra que el servicio reparado debe iniciarse automáticamente en el objetivo de arranque normal.

sudo systemctl enable rhcsa-review-web.service

Compruebe el estado de habilitación.

systemctl is-enabled rhcsa-review-web.service

Reinicie el servicio para confirmar que la unidad aún puede iniciarse correctamente después de la reparación de permisos. Un reinicio limpio es una evidencia más sólida que simplemente verificar el proceso que estaba ejecutándose.

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

Pruebe el servicio nuevamente.

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

Añadir contexto de SELinux y etiquetas de puerto

En este paso, hará que los metadatos de la política de SELinux coincidan con el diseño del servicio. Incluso cuando un servicio de demostración simple puede leer el contenido, las reparaciones de servicios web al estilo RHCSA deben incluir el contexto de archivo persistente y las etiquetas de puerto.

Añada una regla de contexto de contenido HTTP persistente para el contenido del servicio. La regla fcontext es un metadato de política persistente; le indica a SELinux qué etiqueta debe recibir esta ruta después de volver a etiquetar.

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

Aplique la regla a los archivos existentes. restorecon lee la regla persistente y aplica la etiqueta correcta a los archivos que ya existen.

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

Inspeccione la regla personalizada y la etiqueta resultante.

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

Añada el puerto del servicio al tipo de puerto HTTP. Las etiquetas de puerto permiten que la política de SELinux entienda que el puerto TCP 18082 está destinado al tráfico de servicios de tipo HTTP.

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

Inspeccione la etiqueta del puerto HTTP.

sudo semanage port -l | grep '^http_port_t'

Abrir el firewall y validar de extremo a extremo

En este paso, expondrá el puerto del servicio a través de firewalld y realizará una auditoría final. El servicio debe estar activo, habilitado, etiquetado y permitido por el firewall del host.

Inicie y habilite firewalld.

sudo systemctl enable --now firewalld

Añada el puerto del servicio de forma permanente y recargue el firewall. La regla permanente sobrevive a las recargas de firewalld, y la recarga la aplica al firewall activo.

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

Inspeccione la lista de puertos activos.

sudo firewall-cmd --list-ports

Ejecute las comprobaciones finales del servicio. Estos comandos confirman que el servicio está habilitado para el arranque, activo ahora y devolviendo la respuesta 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 los permisos del contenido una última vez. Esta comprobación final de permisos protege contra una reparación parcial común: el servicio funciona ahora, pero el modelo de acceso es más amplio o más restringido de lo previsto.

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

Resumen

Reparó un host de servicio con múltiples problemas diagnosticando una unidad de systemd fallida, corrigiendo los permisos del usuario del servicio, habilitando el servicio, añadiendo etiquetas de archivo y puerto de SELinux, abriendo firewalld y validando la respuesta web final.