Jak zezwolić na połączenia MySQL przez SELinux?


21

Chciałbym chociaż raz zostawić SELinux działający na serwerze dla rzekomego zwiększonego bezpieczeństwa.
Zazwyczaj wyłączam SELinux, aby cokolwiek działało.
Jak mam powiedzieć SELinux, aby zezwalał na połączenia MySQL?
Najbardziej znalazłem w dokumentacji ten wiersz z mysql.com:

Jeśli pracujesz pod Linuksem i włączony jest Linux z podwyższonym poziomem bezpieczeństwa (SELinux), upewnij się, że wyłączyłeś ochronę SELinuksa dla procesu mysqld.

wow ... to naprawdę pomocne.


1
Podaj wszystkie poniższe informacje, abyśmy mogli Ci pomóc. 1. Linux Distro and Version, 2. Wersja MySQL i źródło instalacji, 3. Wpisy dziennika AVC z odmowy połączenia, 4. Odpowiednie dzienniki MySQL, jeśli istnieją 5. Dane wyjściowe z getsebool -a | grep mysql6. Dokładne kroki podjęte w celu odtworzenia
hobodave

Odpowiedzi:


40

Aby sprawdzić SELinux

sestatus

Aby zobaczyć, jakie flagi są ustawione w procesach httpd

getsebool -a | grep httpd

Aby zezwolić Apache na łączenie się ze zdalną bazą danych przez SELinux

setsebool httpd_can_network_connect_db 1

Użycie opcji -P powoduje, że zmiana jest trwała. Bez tej opcji wartość logiczna byłaby resetowana do 0 podczas ponownego uruchamiania.

setsebool -P httpd_can_network_connect_db 1

3
wydaje się być konieczne również w przypadku łączenia przez sprzężenie zwrotne 127.0.0.1?
Devin Ceartas,

@Devin, zdecydowanie.
e18r

2
Jeśli chcesz umożliwić użytkownikom łączenie się z lokalnym serwerem mysql, musisz również włączyć wartość logiczną selinuxuser_mysql_connect_enabled.
Anton Makovetsky

setsebool -P httpd_can_network_connect 1może być również potrzebne. Zostało to zasugerowane w moich logach poprzez uruchomienie ausearch -m avc -ts today | audit2whyzgodnie z sugestią vnix27.
strona

2

Czy pojawia się błąd? Jakiego smaku linuksa używasz? Kontekst bezpieczeństwa jest dobrym miejscem na rozpoczęcie, jeśli wystąpi błąd. ls-Z da kontekst ... Ale twoje pytanie jest bardzo niejasne.


Łączę się z okna systemu Windows. Nie ma błędu ... połączenie zostało po prostu odrzucone, a strona przekroczyła limit czasu. Wiem, że jeśli wyłączę selinux, wszystko będzie dobrze.

ponieważ połączenie przychodzi z okna systemu Windows, ls -Z daje mi tylko informacje o plikach w dowolnym katalogu, w którym znajduję się w polu linux.

W powyższym pytaniu zacytowałem odniesienie do mysql ... które mówiło o wyłączeniu ochrony selinux dla procesu mysqld ... ale nie mówi, jak to zrobić :( Nie mogę też dowiedzieć się, jak to zrobić.

Coś w logach na Linux-ie? selinux może powstrzymać httpd przed nawiązaniem połączenia przez gniazdo ...

Nic w wiadomościach lub bezpiecznych dziennikach ... czy masz na myśli konkretny dziennik?

1

Najwyraźniej konfiguracja selinux nie jest trywialna. Możesz zacząć tutaj .

setenforce 0

przełącza selinux w tryb permissive, w którym pozwala na wszystko oprócz rejestrowania tego, na co pozwala. Ponowne uruchomienie lub

setenforce 1

powraca do blokowania wszystkiego, na co nie zezwala polityka.

Sprawdź te dokumenty polityki selinux dla mySQL w Fedorze .



1

ausearchKomenda może pomóc znaleźć dziennik błędów.


1
ausearch -m avc -ts dzisiaj | audit2why, polecenie może zaproponować rozwiązanie
vnix27

1

możesz też zbudować politykę lokalną:

„Możesz wygenerować lokalny moduł zasad, aby zezwolić na ten dostęp. Na razie zezwól na ten dostęp, wykonując:”

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

semodule -i mypol.pp

lub włącz globalnie dla rzeczywistej sesji:

setsebool httpd_can_network_connect_db 1

lub na stałe:

setsebool -P httpd_can_network_connect_db 1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.