Bezpieczeństwo serwera baz danych na przykładzie serwera MySQL. Administracja serwerem baz danych. Zadania administratora serwera baz danych.

Bezpieczeństwo serwera baz danych MySQL

Serwer baz danych, tak jak każda aplikacja internetowa, jest narażona na różnego rodzaju ataki sieciowe. Serwer baz danych nasłuchuje najczęściej na porcie TCP 3306 i jest narażony na takie same rodzaje ataków, jak inne aplikacje internetowe, m.in. przepełnienie bufora, podszywanie się pod inne IP, ataki [D]DoS, sniffing i inne. Najczęściej w bazie danych znajdują się bardzo ważne dane, które powinny być szczególnie chronione przed dostępem niepowołanych osób.

Serwer MySQL opiera zasady bezpieczeństwa na koncepcji tzw. Access Control Lists w przypadku wszystkich połaczeń, zapytań i innych operacji wykonywanych przez użytkowników. Posiada też odpowiednie wsparcie dla połączeń SSL między klientem a serwerem baz danych.

Podstawowe zasady bezpieczeństwa serwera MySQL

  1. należy bezwzględnie ustalić hasło dla administratora (jeśli po wydaniu komendy mysql -u root nie zostaniemy poproszeni o hasło, to znaczy, że nie zostało ono utworzone dla administratora),
  2. nie wolno dawać dostępu do systemowej bazy danych MySQL innym użytkownikom poza administratorami,
  3. należy nadawać i odbierać uprawnienia użytkownikowi w zależności od jego potrzeb, nie należy nigdy dawać zbyt dużej swobody, lepiej dać mniej uprawnień niż więcej,
  4. nie należy dawać dostępu do wszystkich baz danych, a jedynie do wybranych,
  5. nie należy dawać użytkownikom dostępu do baz danych ze wszystkich hostów, a jedynie z wybranych,
  6. nie należy przechowywać w bazie danych haseł w postaci niezakodowanej,
  7. nie wolno wybierać haseł, które łatwo jest złamać, np. haseł słownikowych. W hasłach należy stosować znaki specjalne, cyfry i różnej wielkości litery,
  8. należy zainwestować w filtr pakietów – firewall,
  9. należy spróbować przeskanować porty na swoim komputerze: serwer baz danych MySQL pracuje najczęściej na porcie TCP 3306. Port ten nie powinien być dostępny dla innych histów niż te zdefiniowane w tabeli user w polu host. Można to zrobić na najbliższym routerze lub firewallu.

Przejęcie serwera MySQL bez znajomości hasła administratora serwera MySQL w przypadku, gdy mamy dostęp do serwera baz danych

Windows:

> net stop mysql
> net start mysql --skip-grant-tables &
> mysql -u root -p

> net stop mysql
> net start mysql

Przebieg ćwiczeń

  1. Uruchomić serwer Linux Debian Wheezy w środowisku wirtualnym.
  2. Wobec braku znajomości hasła administratora serwera MySQL, przejąć kontrolę nad serwerem MySQL i ustanowić nowe hasło dla administratora serwera MySQL: THM*2015.

20151112-2-2# cd /var/run/mysqld
# kill cat mysqld.pid
# nano kod.sql
treść: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('THM*2015');
# mysqld_safe --init-file=/var/run/mysqld/kod.sql &
# rm kod.sql
# service mysql stop
# service mysql start

  1. Zlokalizować pliki baz danych na dysku systemu.

# cd /var/lib/mysql
# ls