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.



