Reparatur eines Web-Service-Hosts mit mehreren Problemen

LinuxBeginner
Jetzt üben

Einführung

Echte Administrationsaufgaben bestehen selten aus nur einem einzigen Befehl. Ein Dienst kann ausfallen, weil die Unit inaktiv ist, der Dienstbenutzer keine Inhalte lesen kann, SELinux-Labels unvollständig sind oder die Firewall den erforderlichen Port nicht freigibt.

In diesem Lab reparieren Sie einen vorbereiteten Web-Service-Host. Der Dienst sollte als Benutzer labex ausgeführt werden, Inhalte aus /srv/rhcsa-review/site bereitstellen, auf 127.0.0.1:18082 lauschen, beim Systemstart automatisch aktiviert sein, über korrekte SELinux-Labels verfügen und 18082/tcp über firewalld freigeben.

Reproduktion und Diagnose des Dienstausfalls

In diesem Schritt reproduzieren Sie den Dienstausfall und untersuchen die Anzeichen, bevor Sie Änderungen vornehmen. Beginnen Sie mit systemctl und journalctl und vergleichen Sie anschließend die Protokollmeldungen mit den Dateiberechtigungen.

Die Vorbereitung erhält die Freigaben für SSH und das LabEx-Browserterminal auf 3002/tcp dauerhaft in der Zone public. Behalten Sie diese Verwaltungsregeln bei, wenn Sie die Firewall-Richtlinie für die Anwendung ändern.

Wechseln Sie in das Projektverzeichnis.

cd /home/labex/project

Überprüfen Sie den vorbereiteten Dienst. Er ist vorhanden, läuft aber noch nicht.

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

Versuchen Sie, den Dienst zu starten. Dies sollte fehlschlagen, da der Dienst als labex ausgeführt wird, das Inhaltsverzeichnis für diesen Benutzer jedoch nicht zugänglich ist.

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

Zeigen Sie an, ob systemd die Unit als fehlerhaft markiert hat.

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

Lesen Sie die neuesten Protokolleinträge des Dienstes. Das Journal sollte darauf hinweisen, dass das Dienstkonto das konfigurierte Arbeitsverzeichnis oder den Inhaltspfad nicht verwenden kann.

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

Überprüfen Sie die Berechtigungen des Inhaltspfads.

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

Reparatur der Inhaltsberechtigungen

In diesem Schritt machen Sie die Inhalte für das Dienstkonto lesbar, ohne sie für alle Benutzer (world-readable) freizugeben. Der Dienst wird unter dem Benutzer labex und der Gruppe labex ausgeführt.

Setzen Sie die Gruppe des Verzeichnisbaums auf labex. Da der Dienst mit der Gruppe labex ausgeführt wird, ermöglicht die Gruppenbesitzschaft den Zugriff, ohne dass die Dateien dem Dienstbenutzer selbst gehören müssen.

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

Erlauben Sie der Gruppe, die Verzeichnisse zu durchlaufen und die Inhaltsdatei zu lesen. Verzeichnisse benötigen das Ausführungs-Bit (execute) zum Durchlaufen, und die HTML-Datei benötigt das Lese-Bit (read), damit der Dienst sie bereitstellen kann.

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

Überprüfen Sie die reparierten Berechtigungen.

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

Setzen Sie den Fehlerstatus zurück und starten Sie den Dienst erneut. reset-failed entfernt die alte Fehlermarkierung, wodurch der Status nach der Berechtigungsreparatur in systemctl leichter zu lesen ist.

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

Bestätigen Sie, dass der Dienst aktiv ist und Inhalte bereitstellt.

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

Persistente Konfiguration des Dienstes

In diesem Schritt aktivieren Sie den reparierten Dienst, damit er beim Systemstart automatisch geladen wird. Ein Dienst, der nur bis zum nächsten Neustart funktioniert, ist nicht vollständig repariert.

Aktivieren Sie die Unit. Das Starten behebt das Problem für die aktuelle Sitzung; das Aktivieren stellt sicher, dass der reparierte Dienst beim normalen Systemstart automatisch geladen wird.

sudo systemctl enable rhcsa-review-web.service

Überprüfen Sie den Aktivierungsstatus.

systemctl is-enabled rhcsa-review-web.service

Starten Sie den Dienst neu, um zu bestätigen, dass die Unit nach der Berechtigungsreparatur sauber startet. Ein sauberer Neustart ist ein stärkerer Beweis als nur die Überprüfung des Prozesses, der zufällig gerade lief.

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

Testen Sie den Dienst erneut.

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

Hinzufügen von SELinux-Kontext und Port-Labels

In diesem Schritt passen Sie die SELinux-Richtlinien-Metadaten an das Design des Dienstes an. Auch wenn ein einfacher Demo-Dienst die Inhalte lesen kann, sollten Reparaturen von Web-Services im RHCSA-Stil immer persistente Dateikontexte und Port-Labels umfassen.

Fügen Sie eine persistente HTTP-Inhaltskontextregel für die Dienstinhalte hinzu. Die fcontext-Regel ist ein persistentes Richtlinien-Metadatum; sie teilt SELinux mit, welches Label dieser Pfad nach einer Neukennzeichnung (Relabeling) erhalten soll.

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

Wenden Sie die Regel auf vorhandene Dateien an. restorecon liest die persistente Regel und wendet das korrekte Label auf bereits existierende Dateien an.

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

Überprüfen Sie die benutzerdefinierte Regel und das resultierende Label.

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

Fügen Sie den Dienst-Port zum HTTP-Port-Typ hinzu. Port-Labels ermöglichen es der SELinux-Richtlinie zu verstehen, dass TCP 18082 für HTTP-ähnlichen Dienstverkehr vorgesehen ist.

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

Überprüfen Sie das HTTP-Port-Label.

sudo semanage port -l | grep '^http_port_t'

Öffnen der Firewall und End-to-End-Validierung

In diesem Schritt geben Sie den Dienst-Port über firewalld frei und führen eine abschließende Prüfung durch. Der Dienst sollte aktiv, aktiviert, korrekt gekennzeichnet und durch die Host-Firewall zugelassen sein.

Starten und aktivieren Sie firewalld.

sudo systemctl enable --now firewalld

Fügen Sie den Dienst-Port permanent hinzu und laden Sie die Firewall neu. Die permanente Regel übersteht Neustarts von firewalld, und der Reload wendet sie auf die aktive Firewall an.

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

Überprüfen Sie die Liste der aktiven Ports.

sudo firewall-cmd --list-ports

Führen Sie abschließende Dienstprüfungen durch. Diese Befehle bestätigen, dass der Dienst für den Systemstart aktiviert ist, aktuell läuft und die erwartete lokale Web-Antwort zurückgibt.

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

Überprüfen Sie die Inhaltsberechtigungen ein letztes Mal. Diese abschließende Berechtigungsprüfung schützt vor einer häufigen unvollständigen Reparatur: Der Dienst funktioniert zwar, aber das Zugriffsmodell ist weiter oder enger gefasst als beabsichtigt.

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

Zusammenfassung

Sie haben einen Dienst-Host mit mehreren Problemen repariert, indem Sie eine fehlerhafte systemd-Unit diagnostiziert, die Berechtigungen für den Dienstbenutzer korrigiert, den Dienst aktiviert, SELinux-Datei- und Port-Labels hinzugefügt, die Firewall geöffnet und die endgültige Web-Antwort validiert haben.