Wie erlaube ich MySQL-Verbindungen über SELinux?

21

Aus Sicherheitsgründen möchte ich SELinux einmal auf einem Server laufen lassen.
Normalerweise deaktiviere ich SELinux, damit alles funktioniert.
Wie kann ich SELinux anweisen, MySQL-Verbindungen zuzulassen?
Das meiste, was ich in der Dokumentation gefunden habe, ist diese Zeile von mysql.com:

Wenn Sie unter Linux ausgeführt werden und SELinux (Security-Enhanced Linux) aktiviert ist, stellen Sie sicher, dass Sie den SELinux-Schutz für den mysqld-Prozess deaktiviert haben.

Wow ... das ist wirklich hilfreich.

xivix
quelle
1
Bitte geben Sie alle folgenden Informationen an, damit wir Ihnen helfen können. 1. Linux Distribution und Version, 2. MySQL-Version und Installationsquelle, 3. AVC-Protokolleinträge von einer verweigerten Verbindung, 4. Relevante MySQL-Protokolle, falls vorhanden 5. Die Ausgabe von getsebool -a | grep mysql6. Genaue Schritte, die Sie unternommen haben, um dies zu reproduzieren
hobodave

Antworten:

40

So überprüfen Sie SELinux

sestatus

Um zu sehen, welche Flags auf httpd-Prozessen gesetzt sind

getsebool -a | grep httpd

Damit Apache über SELinux eine Verbindung zur entfernten Datenbank herstellen kann

setsebool httpd_can_network_connect_db 1

Mit der Option -P wird die Änderung dauerhaft gespeichert. Ohne diese Option würde der Boolesche Wert beim Neustart auf 0 zurückgesetzt.

setsebool -P httpd_can_network_connect_db 1
Punjab
quelle
3
scheint auch beim Verbinden über 127.0.0.1 Loopback nötig zu sein?
Devin Ceartas
@ Devin, auf jeden Fall.
e18r
2
Wenn Sie Benutzern erlauben möchten, eine Verbindung zum lokalen MySQL-Server herzustellen, müssen Sie auch den booleschen Wert selinuxuser_mysql_connect_enabled aktivieren.
Anton Makovetsky
setsebool -P httpd_can_network_connect 1kann auch benötigt werden. Dies wurde in meinen Protokollen vorgeschlagen, indem ausgeführt wurde, ausearch -m avc -ts today | audit2whywie in einem Kommentar von vnix27 vorgeschlagen.
Seite
2

Bekommst du einen fehler Welche Art von Linux verwenden Sie? Der Sicherheitskontext ist ein guter Ausgangspunkt, wenn Sie eine Fehlermeldung erhalten. ls -Z wird Kontext geben ... Aber Ihre Frage ist sehr vage.


quelle
Ich verbinde mich über eine Windows-Box. Es liegt kein Fehler vor ... die Verbindung wurde nur abgelehnt und die Seite läuft ab. Ich weiß, wenn ich selinux ausschalte, ist alles in Ordnung.
da die verbindung von einer windows box kommt, gibt mir ls -Z nur informationen über die dateien in dem verzeichnis, in dem ich mich auf der linux box befinde.
In meiner obigen Frage habe ich eine MySQL-Referenz zitiert, die besagt, dass der Selinux-Schutz für den MySQL-Prozess deaktiviert werden soll, aber nicht sagt, wie das zu tun ist :( Ich kann auch nicht herausfinden, wie.
Irgendwas in den Protokollen auf der Linux-Box? Selinux kann httpd daran hindern, eine Socket-Verbindung herzustellen ...
Nichts in Nachrichten oder sicheren Protokollen ... Gibt es ein bestimmtes Protokoll, an das Sie gedacht haben?
1

Anscheinend ist die Konfiguration von Selinux nicht trivial. Vielleicht möchten Sie hier anfangen .

setenforce 0

Versetzt Selinux in den permissiven Modus, in dem alles erlaubt wird, außer dass protokolliert wird, was es erlaubt. Ein Neustart oder

setenforce 1

kehrt zum Blockieren zurück, was die Richtlinie nicht zulässt.

Sehen Sie sich diese selinux-Richtliniendokumente für mySQL in Fedora an .

Paul
quelle
1

Mit dem ausearchBefehl können Sie das Fehlerprotokoll leichter finden.

vnix27
quelle
1
ausearch -m avc -ts heute | audit2why, befehl kann lösung vorschlagen
vnix27
1

Sie können auch lokale Richtlinien erstellen:

"Sie können ein lokales Richtlinienmodul generieren, um diesen Zugriff zuzulassen. Lassen Sie diesen Zugriff jetzt zu, indem Sie Folgendes ausführen:"

grep httpd /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

oder global für die aktuelle Sitzung aktivieren:

setsebool httpd_can_network_connect_db 1

oder permanent:

setsebool -P httpd_can_network_connect_db 1
Raffaello
quelle