MySQL
MySQL to system zarządzania relacyjnymi bazami danych typu open source. Ten przewodnik pokaże Ci, jak zabezpieczyć i audytować serwer MySQL. Nazwa jest kombinacją „My”, imienia córki współzałożyciela Michaela Wideniusa, oraz „SQL”, skrótu od Structured Query Language.
Zanim zaczniesz
-
Upewnij się, że postępujesz zgodnie z przewodnikami Wprowadzenie i zabezpieczenie serwera. Upewnij się, że nazwa hosta Linode jest ustawiona.
Sprawdź nazwę hosta Linode. Pierwsze polecenie powinno pokazywać Twoją krótką nazwę hosta, a drugie powinno pokazywać w pełni kwalifikowaną nazwę domeny (FQDN).
hostname hostname -f
Uwaga Jeśli masz zarejestrowaną nazwę domeny dla swojej witryny, dodaj domenę do serwera Linode, na którym planujesz zainstalować stos LAMP. Jeśli nie masz zarejestrowanej nazwy domeny, zastąp
example.com
z adresem IP serwera Linode w poniższych instrukcjach. -
Zaktualizuj swój system:
sudo yum update
Uwaga Ten przewodnik jest napisany dla użytkownika innego niż root. Polecenia wymagające podwyższonych uprawnień są poprzedzone przedrostkiem
sudo
. Jeśli nie znaszsudo
polecenie, możesz sprawdzić nasz przewodnik po użytkownikach i grupach. -
Aby zabezpieczyć i kontrolować MySQL, musisz mieć serwer Linux z
MySQL Server
usługi uruchomione. Aby uzyskać informacje na temat instalacji MySQL, zobacz Zainstaluj MySQLUwaga Instrukcje w tym przewodniku są oparte na Ubuntu 18.04, chociaż wszystkie kroki są niezależne od dystrybucji, z wyjątkiem nazw pakietów i menedżerów pakietów.
Korzystanie z bezpiecznego instalatora MySQL
Pakiet mysql-server jest wstępnie skonfigurowany z narzędziem o nazwie mysql_secure_installation
który służy do konfigurowania bezpiecznego punktu początkowego dla serwera MySQL, usuwając anonimowych użytkowników i umożliwiając określenie żądanej polityki siły hasła.
mysql_secure_installation
to skrypt powłoki dostępny w systemach Unix, który umożliwia zabezpieczenie instalacji MySQL poprzez:
- ustaw hasło do kont root
- usuń konta root, które są dostępne spoza lokalnego hosta
- usuń konta anonimowych użytkowników
- usuń testową bazę danych, do której domyślnie mają dostęp anonimowi użytkownicy
Rozpocznij proces bezpieczeństwa, uruchamiając to narzędzie natychmiast po zainstalowaniu serwera mysql.
-
Wywołaj narzędzie, uruchamiając następujące polecenie:
sudo mysql_secure_installation
-
Rozpoczyna się proces instalacji, a narzędzie wyświetla monit o określenie, czy chcesz włączyć wtyczkę sprawdzania poprawności hasła, która służy do testowania haseł i zwiększania bezpieczeństwa. Zaleca się włączenie tej funkcji.
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y
-
Po włączeniu wtyczki hasła określ zasady sprawdzania poprawności hasła w oparciu o poziom siły żądanych haseł.
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
-
Usuń anonimowych użytkowników. Jest to ważna opcja bezpieczeństwa, ponieważ atakujący mogą wykorzystać anonimowych użytkowników, aby uzyskać dostęp do serwera bazy danych.
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
-
Wyłącz zdalne logowanie jako root, jest to niezwykle ważna konfiguracja bezpieczeństwa, ponieważ uniemożliwia atakującym zdalne uwierzytelnianie się na serwerze MySQL jako root lub przeprowadzanie ataków typu brute-force na hasło. Zdalne uwierzytelnianie można również całkowicie wyłączyć, przyjrzymy się, jak to zrobić w następnej sekcji.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
-
Usuń testową bazę danych utworzoną podczas procesu instalacji mysql-server, ta baza danych jest tworzona do celów testowych, jako dobra praktyka zaleca się usunięcie tej bazy danych.
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
-
Załaduj ponownie tabele uprawnień, aby upewnić się, że wszystkie zmiany zostały zastosowane i obowiązują.
Masz teraz bezpieczną bazę do pracy, w następnej sekcji znajdziesz instrukcje zmiany domyślnego głównego nazwa użytkownika i hasło.Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Modyfikowanie użytkownika „root”
Domyślnie serwer MySQL jest predefiniowany z superuser/admin
konto, które ma dostęp do wszystkich uprawnień i funkcjonalności baz danych oraz użytkowników baz danych. Biorąc pod uwagę tę niezrównaną kontrolę i dostęp, ważne jest, aby zablokować i zabezpieczyć konto root, ponieważ atakujący zwykle celują w konto root na serwerze MySQL, ponieważ może ono zapewnić pełny dostęp do baz danych i użytkowników baz danych.
Pierwszym krokiem do zabezpieczenia użytkownika „root” jest zmiana nazwy użytkownika z root
do czegoś bardziej nieustępliwego, celem jest sprawienie, aby nazwa użytkownika root była tak trudna do odgadnięcia lub brutalna dla atakujących. Po czym zaleca się również zmianę root
hasło do konta regularnie jako dobra praktyka.
-
Zaloguj się do serwera MySQL za pomocą następującego polecenia:
sudo mysql -u root
-
Zmień nazwę użytkownika konta „root”, uruchamiając następujące zapytanie:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Zmień
root
hasło do konta na coś silnego i trudnego do odgadnięcia, zaleca się użycie generatora haseł. Jeśli włączyłeś wtyczkę weryfikacji hasła podczas procesu bezpiecznej instalacji, musisz podać hasło, które spełnia wymagania zasad pod względem siły.ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Załaduj ponownie tabelę uprawnień, aby upewnić się, że wszystkie zmiany zostały zapisane i aktywowane, uruchamiając następujące polecenie:
flush privileges;
-
Aby potwierdzić, czy
root
nazwa użytkownika i hasło zostały zmienione, uruchom następujące zapytanie:use mysql; select user,host,authentication_string from mysql.user;
Spowoduje to wyświetlenie tabel użytkowników przechowywanych w bazie danych mysql i powinno odzwierciedlać wprowadzone zmiany.
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| example_user | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
Tworzenie nowego użytkownika
Dobrą praktyką w zakresie bezpieczeństwa jest koncepcja podziału według obowiązków lub ról. Oznacza to, że dla każdej bazy danych lub aplikacji korzystającej z bazy danych utwórz nowego użytkownika, który ma uprawnienia CRUD dla tej konkretnej bazy danych. Gwarantuje to, że w dowolnym momencie tylko jeden użytkownik ma dostęp do jednej bazy danych na raz, a użytkownicy nie mogą uzyskać dostępu do innych baz danych.
-
Utwórz
Test
bazy danych, uruchamiając następujące zapytanie w MYSQL:create database Test;
-
Utwórz użytkownika odpowiedzialnego za zarządzanie tą testową bazą danych:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Przypisz użytkownikowi odpowiednie uprawnienia CRUD do
Test
baza danych:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
Należy pamiętać, że te uprawnienia mają zastosowanie tylko do
Test
bazy danych, jeśli tworzysz użytkownika dla aplikacji, takiej jakphpMyAdmin
, musisz zapewnić użytkownikowiroot
uprawnienia. -
Jeśli zdecydujesz się usunąć konkretnego użytkownika, uruchom następujące zapytanie:
drop user '<username>'@'localhost';
-
Załaduj ponownie tabelę uprawnień, aby upewnić się, że wprowadzone zmiany zostały zastosowane i aktywowane, uruchamiając następujące zapytanie:
flush privileges;
Niestandardowa konfiguracja MySQL
Możesz teraz ustawić bezpieczną niestandardową konfigurację dla MySQL, która zapewnia dodatkowe opcje konfiguracji bezpieczeństwa.
-
Globalny plik konfiguracyjny MySQL znajduje się w
/etc/mysql/my.cnf
, wszystkie niestandardowe konfiguracje globalne należy ustawić w pliku konfiguracyjnym. -
Niestandardowa konfiguracja musi być określona dla mysqld (demon MySQL), opcje wyświetlane na obrazie to niestandardowe konfiguracje bezpieczeństwa.
-
Po dodaniu niestandardowych konfiguracji musisz ponownie uruchomić
mysql
usługi, aby zapewnić zastosowanie wszystkich zmian.systemctl restart mysql
Kontrola bezpieczeństwa MySQL
Możesz teraz kontrolować bezpieczeństwo serwera MySQL za pomocą narzędzia o nazwie MySAT. MySAT wykonuje kilka testów w celu analizy konfiguracji bazy danych i zasad bezpieczeństwa. MySAT pomaga ocenić, a tym samym zwiększyć bezpieczeństwo bazy danych MySQL. MySAT to prosty skrypt SQL, łatwy do zrozumienia i utrzymania. Wyniki MySAT są wyprowadzane w formacie HTML.
-
Sklonuj repozytorium MySAT Github, uruchamiając następujące polecenie:
git clone https://github.com/meob/MySAT.git
-
Po sklonowaniu katalogu przejdź do katalogu MySAT, gdzie
mysat.sql
znajduje się plik i jest używany w połączeniu z serwerem MySQL do wyprowadzania wyników do plikuMySAT.htm
plik. -
Sprawdź bezpieczeństwo, uruchamiając następujące polecenie:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Jak wskazano, MySAT wymaga uprawnień administratora do MySQL, aby uruchomić wymagane testy, po uruchomieniu polecenia generowany jest plik MySAT.htm, skopiuj plik MySAT.htm i
mysat.css
plik na serwer Apache lub NGINX lub pobierz je lokalnie za pomocąscp
, abyś mógł przeanalizować wyniki audytu. -
Wyniki są sformatowane w prostym do odczytania i zrozumienia formacie, w którym konfiguracje są sprawdzane, a wyniki są kodowane kolorami na podstawie ich bieżącej konfiguracji i tego, jak wpływa ona na bezpieczeństwo serwera mysql. Na przykład nieudana kontrola konfiguracji jest oznaczona kolorem pomarańczowym, a pomyślna kontrola jest oznaczona kolorem zielonym.
-
Raport z audytu ujawnia, jakie konfiguracje należy zmienić lub zmodyfikować, i przedstawia obraz najwyższego poziomu ogólnego bezpieczeństwa serwera MySQL.