MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak skonfigurować SELinux dla systemów opartych na MySQL (MySQL/MariaDB Replication + Galera)

W erze, w której teraz żyjemy, wszystko, co ma mniej bezpieczne środowisko, jest łatwo celem ataku i staje się nagrodą dla atakujących. W porównaniu do ostatnich 20 lat hakerzy są obecnie bardziej zaawansowani nie tylko pod względem umiejętności, ale także narzędzi, których używają. Nic dziwnego, że niektóre gigantyczne firmy są hackowane, a ich cenne dane wyciekają.

W samym tylko roku 2021 miało miejsce już ponad 10 incydentów związanych z naruszeniami danych. Ostatni incydent został zgłoszony przez BOSE, znanego producenta audio, który miał miejsce w maju. Firma BOSE odkryła, że ​​hakerzy uzyskali dostęp do niektórych danych osobowych jej obecnych i byłych pracowników. Dane osobowe ujawnione podczas ataku obejmują imiona i nazwiska, numery ubezpieczenia społecznego, informacje o wynagrodzeniach i inne informacje związane z zasobami ludzkimi.

Jak myślisz, jaki jest cel tego rodzaju ataku i co motywuje hakera do tego? Oczywiście chodzi o pieniądze. Ponieważ skradzione dane są również często sprzedawane, hakerzy atakując duże firmy mogą zarabiać pieniądze. Nie tylko ważne dane mogą zostać sprzedane konkurentom firmy, ale hakerzy mogą jednocześnie zażądać ogromnego okupu.

Więc jak możemy odnieść to do baz danych? Ponieważ baza danych jest jednym z największych atutów firmy, zaleca się dbanie o nią ze zwiększonym bezpieczeństwem, aby nasze cenne dane były chronione przez większość czasu. W moim ostatnim poście na blogu omówiliśmy już wprowadzenie do SELinuksa, jak go włączyć, jaki tryb ma SELinux i jak go skonfigurować dla MongoDB. Dzisiaj przyjrzymy się, jak skonfigurować SELinux dla systemów opartych na MySQL.

5 najważniejszych zalet SELinux

Zanim przejdziemy dalej, być może niektórzy z Was zastanawiają się, czy SELinux zapewnia jakieś pozytywne korzyści, biorąc pod uwagę, że jego włączenie jest trochę kłopotliwe. Oto 5 najważniejszych zalet SELinux, których nie chcesz przegapić i które powinieneś rozważyć:

  • Egzekwowanie poufności i integralności danych przy jednoczesnej ochronie procesów

  • Możliwość ograniczenia usług i demonów w celu zwiększenia przewidywalności

  • Zmniejszenie ryzyka ataków eskalacji uprawnień

  • Zasady wymuszały w całym systemie, nie są ustawiane według uznania użytkownika i definiowane administracyjnie

  • Zapewnienie szczegółowej kontroli dostępu

Zanim zaczniemy konfigurować SELinux dla naszych instancji MySQL, dlaczego nie przejść do tego, jak włączyć SELinux z ClusterControl dla wszystkich wdrożeń opartych na MySQL. Chociaż krok jest taki sam dla wszystkich systemów zarządzania bazami danych, uważamy, że dobrym pomysłem jest dołączenie kilku zrzutów ekranu w celach informacyjnych.

Kroki, aby włączyć SELinux dla replikacji MySQL

W tej sekcji zamierzamy wdrożyć replikację MySQL z ClusterControl 1.8.2. Kroki są takie same dla MariaDB, Galera Cluster czy MySQL:zakładając, że wszystkie węzły są gotowe i skonfigurowane jest bezhasłowe SSH, zacznijmy wdrażanie. Aby włączyć SELinux w naszej konfiguracji, musimy odznaczyć „Wyłącz AppArmor/SELinux”, co oznacza, że ​​SELinux będzie ustawiony jako „dopuszczalny” dla wszystkich węzłów.

Następnie wybierzemy Perconę jako dostawcę (możesz również wybrać MariaDB , Oracle lub MySQL 8), a następnie podaj hasło „root”. Możesz użyć domyślnej lokalizacji lub innych katalogów w zależności od konfiguracji.

Po dodaniu wszystkich hostów możemy rozpocząć wdrażanie i pozwolić mu zakończyć, zanim będziemy mogli rozpocząć konfigurację SELinux.

Kroki, aby włączyć SELinux dla replikacji MariaDB

W tej sekcji wdrożymy replikację MariaDB z ClusterControl 1.8.2.

Wybierzemy MariaDB jako dostawcę i wersję 10.5, a także określimy hasło „root”. Możesz użyć domyślnej lokalizacji lub innych katalogów w zależności od konfiguracji.

Po dodaniu wszystkich hostów możemy rozpocząć wdrażanie i pozwolić mu zakończ, zanim będziemy mogli kontynuować konfigurację SELinux.

Kroki włączania SELinux dla klastra Galera

W tej sekcji zamierzamy wdrożyć Galera Cluster z ClusterControl 1.8.2. Ponownie odznacz „Wyłącz AppArmor/SELinux”, co oznacza, że ​​SELinux zostanie ustawiony jako „dopuszczalny” dla wszystkich węzłów:

Następnie wybierzemy Perconę jako dostawcę i MySQL 8 oraz podaj hasło „root”. Możesz użyć domyślnej lokalizacji lub innych katalogów w zależności od konfiguracji. Po dodaniu wszystkich hostów możemy rozpocząć wdrażanie i pozwolić mu się zakończyć.


 

Jak zwykle możemy monitorować stan wdrożenia w sekcji „Aktywność” interfejsu użytkownika.

Jak skonfigurować SELinux dla MySQL

Zważywszy, że wszystkie nasze klastry są oparte na MySQL, kroki w celu skonfigurowania SELinux są również takie same. Zanim zaczniemy konfigurację i ponieważ jest to nowe środowisko konfiguracyjne, sugerujemy wyłączenie trybu automatycznego odzyskiwania zarówno dla klastra, jak i węzła, jak na poniższym zrzucie ekranu. W ten sposób unikniemy przełączenia klastra w tryb awaryjny podczas testowania lub ponownego uruchomienia usługi:

Najpierw zobaczmy, jaki jest kontekst dla „mysql”. Śmiało i uruchom następujące polecenie, aby wyświetlić kontekst:

$ ps -eZ | grep mysqld_t

I przykład wyjścia jest następujący:

system_u:system_r:mysqld_t:s0       845 ?        00:00:01 mysqld

Definicja powyższego wyniku to:

  • system_u — Użytkownik

  • system_r - Rola

  • mysqld_t - Wpisz

  • s0 845 - Poziom czułości

Jeśli sprawdzisz status SELinux, zobaczysz, że status jest „pozwolony”, który nie jest jeszcze w pełni włączony. Musimy zmienić tryb na „enforcing” i aby to osiągnąć musimy edytować plik konfiguracyjny SELinux, aby był trwały.

$ vi /etc/selinux/config
SELINUX=enforcing

Kontynuuj ponowne uruchamianie systemu po zmianach. Ponieważ zmieniamy tryb z „pozwolonego” na „wymuszanie”, musimy ponownie zmienić etykietę systemu plików. Zazwyczaj można wybrać, czy zmienić etykietę całego systemu plików, czy tylko dla jednej aplikacji. Powodem, dla którego wymagana jest zmiana etykiety, jest fakt, że tryb „wymuszania” wymaga prawidłowej etykiety lub funkcji do prawidłowego działania. W niektórych przypadkach te etykiety są zmieniane w trybie „dozwolonym” lub „wyłączonym”.

W tym przykładzie zmienimy etykietę tylko jednej aplikacji (MySQL) za pomocą następującego polecenia:

$ fixfiles -R mysqld restore

W przypadku systemu, który był używany od dłuższego czasu, dobrym pomysłem jest ponowne oznaczenie całego systemu plików. Poniższe polecenie wykona zadanie bez ponownego uruchamiania, a ten proces może trochę potrwać w zależności od systemu:

$ fixfiles -f -F relabel

Podobnie jak wiele innych baz danych, MySQL również wymaga odczytu i zapisu wielu plików. Bez poprawnego kontekstu SELinux dla tych plików dostęp zostanie bezsprzecznie odmówiony. Aby skonfigurować zasady dla SELinux, wymagane jest „semanage”. „semanage” umożliwia również dowolną konfigurację bez konieczności ponownej kompilacji źródeł zasad. W większości systemów Linux to narzędzie jest już domyślnie zainstalowane. W naszym przypadku jest już zainstalowany w następującej wersji:

$ rpm -qa |grep semanage
python3-libsemanage-2.9-3.el8.x86_64
libsemanage-2.9-3.el8.x86_64

W przypadku systemu, który nie ma go zainstalowanego, następujące polecenie pomoże ci go zainstalować:

$ yum install -y policycoreutils-python-utils

Teraz zobaczmy, jakie są konteksty plików MySQL:

$ semanage fcontext -l | grep -i mysql

Jak możesz zauważyć, istnieje wiele plików, które są połączone z MySQL po wykonaniu powyższego polecenia. Jeśli pamiętasz na początku, używamy domyślnego „Katalogu danych serwera”. Jeśli Twoja instalacja używa innej lokalizacji katalogu danych, musisz zaktualizować kontekst dla „mysql_db_t”, który odnosi się do /var/lib/mysql/

Pierwszym krokiem jest zmiana kontekstu SELinux za pomocą dowolnej z tych opcji:

$ semanage fcontext -a -t mysqld_db_t /var/lib/yourcustomdirectory
$ semanage fcontext -a -e /var/lib/mysql /var/lib/yourcustomdirectory

After the step above, run the following command:

$ restorecon -Rv /var/lib/yourcustomdirectory

I na koniec uruchom ponownie usługę:

$ systemctl restart mysql

W niektórych konfiguracjach prawdopodobnie do dowolnego celu wymagana jest inna lokalizacja dziennika. W takiej sytuacji należy również zaktualizować „mysqld_log_t”. „mysqld_log_t” to kontekst dla domyślnej lokalizacji /var/log/mysqld.log i można wykonać poniższe kroki, aby go zaktualizować:

$ semanage fcontext -a -t mysqld_log_t "/your/custom/error.log"
$ restorecon -Rv /path/to/my/custom/error.log
$ systemctl restart mysql

Wystąpi sytuacja, gdy domyślny port zostanie skonfigurowany przy użyciu innego portu niż 3306. Na przykład, jeśli używasz portu 3303 dla MySQL, musisz zdefiniować kontekst SELinux za pomocą następującego polecenia :

$ semanage port -a -t mysqld_port_t -p tcp 3303

Aby sprawdzić, czy port został zaktualizowany, możesz użyć następującego polecenia:

$ semanage port -l | grep mysqld

Korzystanie z audit2allow do generowania zasad

Innym sposobem skonfigurowania zasad jest użycie „audit2allow”, które zostało już uwzględnione podczas instalacji „semanage”. Narzędzie to pobiera zdarzenia z dziennika z pliku audit.log i wykorzystuje te informacje do tworzenia zasad. Czasami MySQL może wymagać niestandardowej polityki, więc jest to najlepszy sposób, aby to osiągnąć.

Najpierw ustawmy tryb na permisywny dla domeny MySQL i zweryfikuj zmiany:

$ semanage permissive -a mysqld_t
$ semodule -l | grep permissive
permissive_mysqld_t
permissivedomains

Następnym krokiem jest wygenerowanie zasad za pomocą poniższego polecenia:

$ grep mysqld /var/log/audit/audit.log | audit2allow -M {yourpolicyname}
$ grep mysqld /var/log/audit/audit.log | audit2allow -M mysql_new

Powinieneś zobaczyć dane wyjściowe w następujący sposób (będzie się różnić w zależności od ustawionej nazwy zasady):

******************** WAŻNE ********************* **

Aby uaktywnić ten pakiet zasad, wykonaj:

semodule -i mysql_new.pp

Jak już wspomniano, musimy uruchomić „semodule -i mysql_new.pp”, aby aktywować politykę. Śmiało i wykonaj to:

$ semodule -i mysql_new.pp

Ostatnim krokiem jest przywrócenie domeny MySQL do trybu „wymuszania”:

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:Usuwanie ostatniego modułu permissive_mysqld_t (nie istnieje żaden inny moduł permissive_mysqld_t o innym priorytecie).

Co powinieneś zrobić, jeśli SELinux nie działa?

Wiele razy konfiguracja SELinuksa wymaga tak wielu testów. Jednym z najlepszych sposobów przetestowania konfiguracji jest zmiana trybu na „permisywny”. Jeśli chcesz ustawić to tylko dla domeny MySQL, możesz po prostu użyć następującego polecenia. Jest to dobra praktyka, aby uniknąć konfigurowania całego systemu jako „pozwolonego”:

$ semanage permissive -a mysqld_t

Gdy wszystko zostanie zrobione, możesz zmienić tryb z powrotem na „wymuszanie”:

$ semanage permissive -d mysqld_t

Oprócz tego, /var/log/audit/audit.log zawiera wszystkie logi związane z SELinux. Ten dziennik bardzo pomoże ci w zidentyfikowaniu pierwotnej przyczyny i przyczyny. Wszystko, co musisz zrobić, to odfiltrować „odmowa” za pomocą „grep”.

$ more /var/log/audit/audit.log |grep "denied"

Zakończyliśmy konfigurowanie polityki SELinux dla systemu opartego na MySQL. Warto wspomnieć, że tę samą konfigurację należy wykonać na wszystkich węzłach klastra, może być konieczne powtórzenie dla nich tego samego procesu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przedstawiamy MariaDB Platform X5:bazę danych o dowolnym obciążeniu, teraz w dowolnej skali

  2. Co to jest MariaDB ColumnStore?

  3. Jak wykonywać i zarządzać kopiami zapasowymi MySQL dla Oracle DBA

  4. Zaawansowane przełączanie awaryjne za pomocą haków skryptu Post/pre

  5. Formatowanie liczb przecinkami w MariaDB