Bezpieczeństwo danych jest jednym z najważniejszych aspektów administrowania bazą danych. W zależności od struktury organizacyjnej, jeśli zarządzasz produkcyjną bazą danych, musisz monitorować pod kątem nieautoryzowanego dostępu i użycia. Dotyczy to również podstawowego hosta. W tym blogu wyjaśnimy bezpieczeństwo w bazach danych o otwartym kodzie źródłowym.
Bezpieczeństwo ogólne
Po zainstalowaniu oprogramowania bazy danych musimy wykonać kilka wstępnych testów, aby uniknąć najczęstszych błędów bezpieczeństwa.
Ogólne wytyczne są następujące:
-
Nigdy nie dawaj nikomu uprawnień roota/administratora innym! To jest krytyczne.
-
Dowiedz się, jak działa system uprawnień dostępu do bazy danych. Nie przyznawaj więcej uprawnień niż to konieczne. Nigdy nie przydzielaj uprawnień wszystkim hostom.
-
Nie przechowuj haseł w postaci zwykłego tekstu w swojej bazie danych. Zamiast używać SHA2() lub innej jednokierunkowej funkcji mieszającej i przechowywać wartość skrótu.
-
Nie używaj portów domyślnych i upewnij się, że wybrany port nie jest dostępny z niezaufanego hosta.
-
Umieść bazę danych typu open source za zaporą sieciową. Chroni to przed co najmniej 50% wszelkiego rodzaju exploitów w dowolnym oprogramowaniu.
Kontrola dostępu i zarządzanie kontem
Jedną z podstawowych funkcji bazy danych jest uwierzytelnianie użytkownika, który łączy się z danego hosta i powiązanie tego użytkownika z uprawnieniami w bazie danych. Aby kontrolować, którzy użytkownicy mogą się łączyć, do każdego konta można przypisać dane uwierzytelniające, takie jak hasło.
Role użytkownika
Rola bazy danych to zbiór dowolnej liczby uprawnień, które można przypisać jednemu lub większej liczbie użytkowników. W nowoczesnych bazach danych o otwartym kodzie źródłowym większość użytkowników ma predefiniowane role.
Zarządzanie hasłami
Dostęp do bazy danych wymaga od użytkowników uwierzytelnienia się nazwą użytkownika i hasłem. Baza danych stosuje tę samą funkcję skrótu do hasła, które wprowadził użytkownik i porównuje je z haszem przechowywanym w bazie danych. Jeśli oba pasują, przyznawane jest pozwolenie. Wygaśnięcie ważności hasła jest wymagane, aby wszyscy użytkownicy bazy danych mogli okresowo zmieniać hasła. Losowe generowanie haseł jest wymagane w przypadku jawnych haseł dosłownych określonych przez administratora. Jedną z ważnych rzeczy do monitorowania jest śledzenie błędów nieprawidłowego hasła/uwierzytelniania. Zaleca się włączenie tymczasowego blokowania konta po zbyt wielu kolejnych błędach logowania z nieprawidłowym hasłem.
Obsługa wygasłych haseł
Po wygaśnięciu hasła serwer bazy danych rozłącza połączenie klienta z wygasłym hasłem.
Przykład
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.
Ograniczanie zasobów
Ograniczenie wykorzystania zasobów serwera bazy danych przez klienta, poprzez ograniczenie liczby jednoczesnych połączeń, które mogą być wykonane przez dowolne konto użytkownika. Na przykład możemy ograniczyć liczbę zapytań, które użytkownik może wykonać w ciągu godziny lub ile razy użytkownik może połączyć się z serwerem w ciągu godziny.
Połączenia szyfrowane
Bazy danych zwykle obsługują szyfrowane połączenia między klientami a serwerem przy użyciu niektórych protokołów bezpieczeństwa. Używając SSL, będzie szyfrować połączenia między klientami a serwerem. Dzięki temu dane w warstwie sieciowej stają się nieczytelne i unika się podsłuchiwania. Po włączeniu SSL w bazie danych zaczyna obsługiwać połączenia szyfrowane i nie zezwala na połączenia nieszyfrowane.
Komponenty i wtyczki bezpieczeństwa
Komponenty bezpieczeństwa można łatwo zintegrować z bazą danych. Na przykład mysql zawiera kilka komponentów i wtyczek, które implementują funkcje bezpieczeństwa.
Wtyczki uwierzytelniające — te wtyczki są próbami uwierzytelnienia przez klientów, aby połączyć się z serwerem MySQL. Możemy łatwo zintegrować się z naszym serwerem bazy danych.
Wtyczka hasła — ta wtyczka sprawdza, czy bieżące hasło jest silne i odrzuca wszelkie hasła uważane za słabe.
Wtyczka pęku kluczy — ta wtyczka szyfruje obszary tabel. Ta technika szyfrowania działa na zasadzie rotacji plików kluczy. Oto przykład, jak zaszyfrować MySQL 8.0.
Dziennik audytu - Audyt to proces monitorowania i rejestrowania aktywności zachodzącej na serwerze bazy danych. Służy do rejestrowania, kto co robi, m.in. operacje bazy danych przez użytkowników, połączenia lub nieudane próby logowania. Jeśli korzystasz z modułu równoważenia obciążenia, aby uzyskać dostęp do bazy danych, musisz to również monitorować. Domyślnie pliki dziennika audytu są przechowywane w katalogu danych mysql.
Przykładowe dzienniki
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0
Jeśli chcesz przechowywać pliki dziennika kontroli w różnych lokalizacjach, możesz dodać ten parametr do pliku konfiguracyjnego „server_audit_file_path”.
Monitorowanie logów — Monitorowanie logów zapewnia zespołowi operacyjnemu większy poziom wglądu w środowisko bazy danych, na które składają się instancje bazy danych, ale także systemy równoważenia obciążenia. Pomaga zidentyfikować anomalie, kiedy te anomalie występują i częstotliwość ich występowania.
Wtyczka do sprawdzania hasła
Hasło jest jak słowa, cyfry i ciąg znaków. Po stronie bazy danych i serwera do uzyskania pewnego dostępu potrzebne były nazwa użytkownika i hasło. Na przykład, jeśli hasło podane w postaci zwykłego tekstu, wtyczka validate_password sprawdza hasło pod kątem aktualnej polityki haseł i odrzuca hasło, jeśli jest słabe.
valate_password_policy ma trzy wartości LOW, MEDIUM lub STRONG. Wartość LOW sprawdza tylko długość hasła, MEDIUM zasada dodaje pewne warunki, a STRONG zasada dodaje warunek, że podciągi hasła składające się z 4 lub więcej znaków nie mogą pasować do słów w pliku słownika, który można określić, modyfikując zmienną validate_password_dictionary_file.
Wtyczka LDAP
Wtyczka LDAP umożliwia Serwerowi bazy danych przyjmowanie połączeń od użytkowników zdefiniowanych w katalogach LDAP. W uwierzytelnianiu LDAP wtyczki po stronie klienta i serwera przekazują hasło w postaci zwykłego tekstu. Zalecane jest bezpieczne połączenie między klientem a serwerem, aby zapobiec ujawnieniu hasła. Jeśli nazwa użytkownika klienta i nazwa hosta nie pasują, baza danych odrzuci połączenie.
Konfiguracja LDAP w ClusterControl jest bardzo prosta. W tym poście wyjaśniliśmy kroki konfiguracji przy użyciu ClusterControl.
Zabezpieczanie kopii zapasowych bazy danych
Kopie zapasowe danych są ważne, jeśli chodzi o ochronę danych. Jeszcze ważniejsze jest zapewnienie, że kopie zapasowe są bezpieczne i dostępne w celu szybszego odzyskiwania. ClusterControl zapewnia kompleksową obsługę procesu zarządzania kopiami zapasowymi, w tym szyfrowanie plików kopii zapasowych za pomocą algorytmu szyfrowania AES-256 przed wysłaniem ich poza siedzibę.
Dostęp VPN do sieci hosta skoku
Najlepszą metodą uzyskania lokalnego dostępu do bazy danych o otwartym kodzie źródłowym sieci prywatnej jest użycie VPN. VPN zapewnia prywatność i bezpieczeństwo użytkownikom w celu budowania prywatnego połączenia sieciowego w sieci publicznej. Host skokowy to host pośredniczący lub brama SSH umożliwiająca dostęp do zdalnych serwerów sieciowych. Serwer Jump działa jako pośrednik, aby połączyć oba końce, czyniąc go hostem „przeskokowym” w celu uzyskania dostępu do drugiej strony. Jest to jeden z popularnych sposobów zabezpieczenia serwera przed światem zewnętrznym. Możemy użyć tunelowania SSH, aby uzyskać dostęp do zdalnej sieci w bezpieczny sposób, przy mniejszym wysiłku niż konfiguracja serwera VPN.
Zarządzanie dostępem do bazy danych przez Jump host
Aby uzyskać bardziej bezpieczny dostęp do produkcyjnych serwerów baz danych, wymagany jest dedykowany serwer skoku. Ten dedykowany serwer skoku zapewnia dostęp do sieci prywatnej z sieci zewnętrznej lub publicznej, takiej jak Internet. Zapewnia wielopoziomowe podejście dla każdego użytkownika, aby dotrzeć do Twojej sieci prywatnej, minimalizując szanse potencjalnego ataku na serwer.
Jak możemy to osiągnąć?
Najlepszą praktyką jest skonfigurowanie serwera skoku do łączenia się z bazami danych z komputera z systemem Linux, nawet jeśli instancja bazy danych znajduje się w sieci prywatnej. Po utworzeniu hosta Jump postępuj zgodnie z poniższymi wytycznymi,
-
Ogranicz publiczny dostęp w swoich bazach danych za pomocą podsieci prywatnych.
-
Ogranicz bramę internetową w tabelach tras.
-
Utwórz nową sieć VPC lub dodaj hosta skoku do tej samej sieci VPC, co instancja bazy danych. Następnie dodaj bramę internetową do serwera skoku z publicznymi podsieciami.
-
Zezwalaj tylko określonym portom bazy danych na wymagane adresy IP.
Następnie możemy utworzyć tunelowanie SSH, aby uzyskać dostęp do serwera bazy danych w bezpieczny sposób.
SELinux
SELinux to zestaw modyfikacji jądra i narzędzi przestrzeni użytkownika oraz kilka modułów polityki. Moduły polityki to konteksty SELinux, które definiują zasady interakcji między procesami, plikami, portami i innymi obiektami systemowymi. Interakcja między obiektami systemowymi jest dozwolona tylko wtedy, gdy zezwala na to reguła polityki.
Użytkownicy systemu będą w dużej mierze nieświadomi SELinuksa. Tylko administratorzy systemów muszą zastanowić się, jak surową politykę należy wdrożyć dla ich środowiska serwerowego. Ten szczegół zapewnia jądru SELinux pełną, szczegółową kontrolę nad całym systemem.