Daten sind heute das wichtigste Gut eines jeden Unternehmens. Es gibt viele Empfehlungen, um eine PostgreSQL-Datenbank zu sichern, z.B. CIS Benchmark für PostgreSQL, aber Linux bietet bereits eine, die Sie nicht vermeiden sollten: Security-Enhanced Linux (SELinux). SELinux bietet Zugriffskontrolle für Dateien, Prozesse und Anwendungen, um Zugriff zu gewähren oder zu verweigern. Diese Sicherheitsarchitektur wurde von der National Security Agency (NSA) der Vereinigten Staaten entwickelt und später in den frühen 2000er Jahren als Open Source veröffentlicht.

Dieser Artikel gibt eine kurze Einführung in SELinux und wie Sie bei der Installation von PostgreSQL damit in Berührung kommen können.

Der erste Schritt besteht darin, zu überprüfen, ob SELinux aktiv ist.

Copy to Clipboard

Die Ausgabe zeigt den SELinux-Status an, der in diesem Fall „aktiviert“ lautet. SELinux ist aktiv.

Zusätzlich kann der SELinux-Modus durch Ausführen von getenforce überprüft werden.

Copy to Clipboard

Der Befehl gibt den aktuellen Statuswert zurück, der entweder ist:

  • Enforcing: SELinux mit seinen Richtlinien und Regeln ist aktiv und erlaubt oder verweigert ausdrücklich den Zugriff.
  • Permissive: SELinux mit seinen Richtlinien und Regeln ist aktiv, aber es setzt sie nicht durch, d.h. es wird nichts verweigert.
  • Disabled: Es werden keine Regeln der SELinux-Richtlinien angewendet und das System ist nicht geschützt.

SELinux-Richtlinien werden durchgesetzt und könnten ein Hindernis für den zukünftigen PostgreSQL-Cluster darstellen. Übrigens, Rockylinux hat einen schönen Artikel veröffentlicht, um SELinux zu lernen und zu verstehen.

HINWEIS:: Es wird nicht empfohlen, SELinux zu deaktivieren, da jede Änderung, z.B. die Installation eines Pakets mit all seinen Verzeichnissen und Dateien, nicht gekennzeichnet wird. Die Durchsetzung von SELinux-Richtlinien zu einem späteren Zeitpunkt garantiert einige Probleme. Eine bessere Lösung ist es, SELinux auf permissive zu setzen, weil dann zwar alles protokolliert wird, aber kein Zugriff verweigert wird. Die Auswertung der Protokolle zeigt alle eventuellen Unzulänglichkeiten auf und ist die Grundlage für die Lösung von Problemen mit erzwungenen SELinux-Richtlinien.

Installieren wir die aktuelle Hauptversion von PostgreSQL mit dem Befehlsbeispiel von der offiziellen PostgreSQL Website.

Copy to Clipboard

Prüfe den Status des PostgreSQL Service.

Copy to Clipboard

Der PostgreSQL-Dienst läuft, und wir können die Datenbank nutzen. SELinux war kein Hindernis. Der Grund dafür ist, dass bei der Installation Standardeinstellungen verwendet wurden, die SELinux bekannt sind, z. B. werden bei der Installation korrekte Bezeichnungen verwendet. Eine schnelle Überprüfung mit dem Befehl ls zeigt die Bezeichnungen des standardmäßigen PGDATA-Inhalts an.

Copy to Clipboard

Die Bezeichnung postgresql_db_t ist für alle Verzeichnisse und Dateien sichtbar. Als nächstes wird der PostgreSQL-Dienst wieder beendet.

Copy to Clipboard

Eine häufige Änderung in den meisten realen Szenarien ist der benutzerdefinierte Speicherort des PGDATA-Verzeichnisses. In diesem Beispiel lautet der neue Speicherort für das PGDATA-Verzeichnis /usd/pgsql/data.

Copy to Clipboard

Zweitens muss die systemd-Dienstdatei postgresql-16.service geändert werden: Die Umgebungsvariable PGDATA muss auf das neue Verzeichnis /usd/pgsql/data gesetzt werden. Es wird empfohlen, ein neues Verzeichnis mit einer override.conf-Datei zu erstellen, die die Änderungen enthält.

Copy to Clipboard

Als nächstes wird systemd auf die Änderungen aufmerksam gemacht, indem der Daemon neu geladen wird.

Copy to Clipboard

Die Initialisierung des neuen PostgreSQL-Clusters im benutzerdefinierten Verzeichnis /usd/pgsql/data erfolgt durch erneute Ausführung von initdb.

Copy to Clipboard

Zunächst werden die SELinux-Labels von PGDATA und dessen Inhalt angezeigt.

Copy to Clipboard

Es fehlen die richtigen Bezeichnungen: postgresql_db_t. Ein manuell ausgeführter Schritt ist erforderlich, um die richtigen Bezeichnungen mit chcon zu setzen.

Copy to Clipboard

Wenn Sie den ls-Befehl von oben wiederholen, werden jetzt die richtigen Bezeichnungen angezeigt.

Copy to Clipboard

Der neue PostgreSQL-Cluster ist einsatzbereit.

Copy to Clipboard

Bei Probleme sind die Logdateien auf verdächtige Fehler zu überprüfen:

Copy to Clipboard

Es gibt noch weitere Möglichkeiten, SELinux für PostgreSQL zu konfigurieren, aber dieses grundlegende Beispiel bietet eine praktische Einführung für neue Benutzer, um einen schnellen Einstieg zu finden.

Dirk Aumüller

Dirk Aumueller arbeitet als Associate Partner für die Proventa AG. Sein technologischer Schwerpunkt liegt bei Datenbankarchitekturen mit PostgreSQL sowie Data Management Lösungen mit Pentaho. Zusätzlich zu seinen Datenbanktransformations-Projekteinsätzen ist er regelmäßig als PostgreSQL Trainer unterwegs und betreut Studenten bei ihren Abschlussarbeiten. Seine fachlichen Erfahrungen erstrecken sich über die Branchen Telco und Financial Services.