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.
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.
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.
Prüfe den Status des PostgreSQL Service.
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.
Die Bezeichnung postgresql_db_t
ist für alle Verzeichnisse und Dateien sichtbar. Als nächstes wird der PostgreSQL-Dienst wieder beendet.
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
.
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.
Als nächstes wird systemd auf die Änderungen aufmerksam gemacht, indem der Daemon neu geladen wird.
Die Initialisierung des neuen PostgreSQL-Clusters im benutzerdefinierten Verzeichnis /usd/pgsql/data
erfolgt durch erneute Ausführung von initdb
.
Zunächst werden die SELinux-Labels von PGDATA und dessen Inhalt angezeigt.
Es fehlen die richtigen Bezeichnungen: postgresql_db_t
. Ein manuell ausgeführter Schritt ist erforderlich, um die richtigen Bezeichnungen mit chcon
zu setzen.
Wenn Sie den ls
-Befehl von oben wiederholen, werden jetzt die richtigen Bezeichnungen angezeigt.
Der neue PostgreSQL-Cluster ist einsatzbereit.
Bei Probleme sind die Logdateien auf verdächtige Fehler zu überprüfen:
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.