Kako da unapredite MySQL bezbednost
MySQL je jedna od najpopularnijih open-source baza podataka koja radi na različitim platformama. Relativno je lak za konfigurisanje i ima dobre performanse čak i pod značajnim opterećenjem. Ipak, i pored svih dobrih karakteristika, i dalje ima veliki broj bezbednosnih problema sa konfiguracijom.
Najbolji načini za očuvanje bezbednosti MySQL baze podataka
Najbolji načini za upravljanje bezbednošću bilo kog tipa je da uvek budete oprezni i da predvidite napad koji se može desiti svakog trenutka iz svakog pravca. Ipak, ako usvojite neke mere predostrožnosti, to neće biti tako težak posao. Sledeća uputstva će vam pomoći da značajno smanjite neke od mogućih pretnji.
Pre svega, pročitajte ove bezbednosne smernice i redovno proveravajte da li postoje ažuriranja. Nedavno je pronađeno nekoliko ozbiljnih ranjivosti za MySQL RDBMS. Iskoristite prednosti ažuriranja koja dodaju nove funkcionalnosti i što je još važnije, ispravljaju bezbednosne propuste.
Redovno nadgledajte baze podataka ranjivosti. Uvek budite svesni novopronađenih pretnji vašem sistemu.
Operativni sistem
- Isključite nepotrebne deamone i servise. Što manjem broju komponenti napadači mogu da pristupe, manje su šanse da pronađu grešku koja se može iskoristiti za pristup sistemu. Ukoliko održavate konfiguraciju hosta jednostavnom, smanjujete napor potreban za upravljanje sistemom i smanjujete rizik od bezbednosnih propusta.
- Pobrinite se da korisnici MySQL-a ne mogu da pristupe datotekama izvan ograničenog skupa direktorijuma. Datoteke podataka MySQL ne bi trebalo da mogu da čitaju korisnici osim root ili administratorskih naloga.
- Onemogućite ili ograničite daljinski pristup. U slučaju da vam je potrebno da se vašem MySQL-u pristupa daljinski, konfigurišite GRANT statement.
- Obezbedite da nijedan drugi korisnik osim MySQL korisnika ne može da čita MySQL konfiguraciju i logove. Datoteke
my.cnf
,my.ini
imaster.info
obično nemaju kriptovana korisnička imena i lozinke. Ako postoji query log, verovatno će sadržati i lozinke. Neke MySQL konfiguracione datoteke takođe mogu sadržati korisnička imena i lozinke u plain text-u. Uverite se da su ove datoteke zaštićene od neželjenih korisnika. - Pokrenite MySQL sa chroot opcijom. Ova opcija pruža odličnu kontrolu nad privilegijama datoteke i koristi se da ograniči pristup datoteci od strane procesa datom direktorijumu. Čak i sa chroot opcijom, napadač koji dobije privilegiju fajla moći će da pročita sve MySQL podatke i verovatno i dalje može da izvrši UDF-ove.
- Redovno brišite svoju
.mysql_history
datoteku ili je trajno povežite sa/dev/nul
l. Na Unix sistemima podrzumevano ćete naći datoteku.mysql_history
u svom home direktorijumu. Ona sadrži log sa svim upitima koje ste uneli u MySQL klijent komandne linije. Izvršite sledeću komandu da obrišete istoriju:
cat /dev/null > ~/.mysql_history
Korisnici
Nakon konfigurisanja operativnog sistema, potrebno je da napravite model privilegija i dodelite korisničke naloge.
- Tokom inicijalne faze podešavanja, uklonite sve MySQL non-root korisnike, tako da znate gde se nalazite u pogledu korisnika koji imaju pristup bazi podataka. Najbolji način je da počnete od nule i povećavate korisnike onako kako vam je to potrebno.
- Preimenujte root korisničko ime i promenite lozinku koristeći različite brojeve i znakove. Administratorsko korisničko ime možete promeniti sledećom komandom u MySQL konzoli:
mysql> RENAME USER root TO new_name;
- Nemojte davati privilegije naloga koje im zaista nisu potrebne, posebno
File_priv
, Grant_priv
i Super_priv
. Razmislite o kreiranju zasebnog MySQL naloga koji vaša aplikacija može da koristi za interakciju sa sistemom datoteka unutar MySQL-a. Imajte na umu da će ovaj korisnik imati pristup svim MySQL podacima, uključujući hešove lozinki. - Ako je moguće, kreirajte MySQL korisnika za svaku web aplikaciju ili za svaku ulogu unutar svake web aplikacije. U okviru ove aplikacije dodelite korisničke privilegije samo za potrebne komande. Ovo može biti pomalo zamorno, ali ima smisla kada je u pitanju uspostavljanje sveobuhvatnog sistema bezbednosti.
- U slučaju da su omogućene remote konekcije, definišite REQUIRE SSL u GRANT statement-u. Neke exploit skripte neće raditi jer nemaju SSL podršku. Takođe možete postaviti ograničenja na osnovu sertifikata na strani klijenta koji se koristi za autentifikaciju pomoću SSL-a. Još jedna korisna bezbednosna mera, poznavanje lozinke neće biti dovoljno, takođe će biti potreban određeni sertifikat.
- Ne dajte nikome pristup MySQL.user.table (osim korisnicima sa root privilegijama).
MySQL konfiguracija
- Oslobodite se neiskorišćenog UDF-a. UDF-ovi predstavljaju pretnju po bezbednost baze podataka. Ako vidite neiskorišćene UDF-ove u tabeli
mysql.func
, uklonite ih. - Ako koristite samo lokalne konekcije i nema potrebe da se udaljeni host poveže na MySQL, onemogućite TCP/IP konekciju preko opcije
–skip-networking
. - Uklonite testnu bazu podataka. Podrazumevano postoji testna baza podataka kojoj svako može da pristupi. Uklonite je ili ograničite privilegije.
- Uklonite anonimne naloge. Ne ostavljajte nijednom korisniku prazne lozinke. Možete pronaći anonimne korisnike sa ovom komandom:
select * from mysql.user where user=””;
- Uverite se da je MySQL saobraćaj šifrovan.
- Omogućite logovanje putem opcije
–log
. Prema MySQL dokumentaciji, „general query log“ je debugging funkcionalnost, ali možete je koristiti i kao bezbednosnu meru. Ona beleži uspešne konekcije i izvršene query-je. Query loge je podrazumevano onemogućen, a možete ga uključiti pomoću opcije –log.
Imajte na umu da su query logovi i logovi grešaka izvor informacija i za napadača. Pobrinite se da je log fajl vidljiv samo administratoru ili root nalogu sistema. Redovno nadgledajte query logove i proveravajte da nije došlo do SQL injection napada. Instalirajte antivirusni i antispam softver. Postavite firewall za kontrolu dolaznog i odlaznog mrežnog saobraćaja i zaštitu od napada.
I na kraju jedno važno pravilo: svaki detalj je važan. Ne postoji način da se garantuje 100% bezbednost, ali u eri sajber kriminala neophodno je postići što je moguće bolju zaštitu.
Bez komentara