Egy új MySQL szerver telepítése izgalmas dolog, hiszen egy erős és megbízható adatbázis-kezelő rendszer áll készen a feladatokra. Azonban az első és talán legfontosabb lépés a funkcionalitás megteremtése előtt, hogy gondoskodjunk a megfelelő MySQL biztonságáról. Sokan hajlamosak megfeledkezni erről, bízva abban, hogy az alapértelmezett beállítások elegendőek lesznek. Ez azonban súlyos tévedés, amely katasztrofális következményekkel járhat: adatlopás, adatvesztés vagy a szolgáltatás megszakítása. Egy frissen telepített MySQL szerver valójában sebezhető pontokat rejt, amelyeket azonnal orvosolni kell. Ez a cikk egy átfogó útmutatót nyújt a legfontosabb biztonsági beállításokhoz, amelyeket egy friss telepítés után el kell végeznie.
Miért kritikus a biztonság egy adatbázisnál?
Az adatbázisok a legtöbb alkalmazás és rendszer szíve és lelke. Itt tárolódnak a felhasználói adatok, pénzügyi információk, üzleti titkok és egyéb érzékeny adatok. Ha egy támadónak sikerül bejutnia az adatbázisba, az nem csak óriási pénzügyi veszteséget, hanem a felhasználók bizalmának elvesztését és súlyos jogi következményeket is vonhat maga után. Egy frissen telepített szerveren gyakran még nincsenek szigorú korlátozások, ami „nyitott kapukat” jelent a potenciális behatolók számára. Ezért már a kezdetektől fogva proaktívan kell gondolkodnunk a védelemről.
1. Azonnali első lépés: A mysql_secure_installation futtatása
Ez a parancs az egyik legfontosabb eszköz, amit a MySQL biztosít a telepítés utáni alapvető biztonsági beállítások elvégzésére. Ne hagyja ki! Amikor futtatja, a következő lépéseken vezeti végig:
- Root jelszó beállítása vagy megváltoztatása: Ha még nincs beállítva, azonnal kér egy erős jelszót a
rootfelhasználónak. Ha már van, felajánlja a megváltoztatását. Ez létfontosságú, mivel arootfelhasználó teljes hozzáféréssel rendelkezik a szerverhez. - Anonim felhasználók eltávolítása: A MySQL alapértelmezés szerint létrehozhat anonim felhasználókat (üres felhasználónévvel), ami súlyos biztonsági kockázat. Ez a lépés eltávolítja őket.
- Távoli
rootbejelentkezés tiltása: Alapértelmezés szerint arootfelhasználó bejelentkezhet bárhonnan, ami rendkívül veszélyes. Ez a funkció korlátozza arootbejelentkezést csak a helyi gépre (localhost), vagy teljesen letiltja a távoli elérést, ami erősen javasolt. - Teszt adatbázis és hozzáféréseinek eltávolítása: A MySQL egy „test” nevű adatbázissal és a hozzá tartozó jogosultságokkal érkezik, amit könnyen ki lehetne használni támadásokra. Eltávolítása nagymértékben növeli a biztonságot.
A mysql_secure_installation egy automatizált segédprogram, amely leegyszerűsíti ezeket az alapvető, de létfontosságú lépéseket. Mindig futtassa!
2. Felhasználói fiókok és jogosultságok kezelése: A legkevesebb jogosultság elve
A legkevesebb jogosultság elve (Principle of Least Privilege – PoLP) alapvető a biztonságban. Ez azt jelenti, hogy minden felhasználónak és alkalmazásnak csak annyi jogosultsággal kell rendelkeznie, amennyi feltétlenül szükséges a feladatai elvégzéséhez, és semmi több. Soha ne használja a root felhasználót alkalmazásokhoz!
- Dedikált felhasználók létrehozása: Minden alkalmazáshoz vagy szolgáltatáshoz hozzon létre külön MySQL felhasználót. Például, ha van egy weboldala, amely az adatbázist használja, hozzon létre egy
webusernevű felhasználót ahelyett, hogy aroot-ot használná. - Specifikus jogosultságok megadása: Ne adjon
ALL PRIVILEGES-t, hacsak nem abszolút szükséges. Használja aGRANTparancsot a pontosan szükséges műveletek engedélyezésére (pl.SELECT,INSERT,UPDATE,DELETE,CREATE,DROP).CREATE USER 'alkalmazas_user'@'localhost' IDENTIFIED BY 'Er0s_j3lsz0!'; GRANT SELECT, INSERT, UPDATE, DELETE ON adatbazis_neve.* TO 'alkalmazas_user'@'localhost'; FLUSH PRIVILEGES;A
'localhost'helyett specifikus IP-címet is megadhat, ahonnan a felhasználó csatlakozhat. Kerülje a'%'(bármilyen hoszt) használatát, hacsak nem elkerülhetetlen, és akkor is csak erős indokkal és SSL-lel párosítva. - Felesleges jogosultságok visszavonása: Időnként ellenőrizze a meglévő felhasználók jogosultságait, és vonja vissza azokat, amelyekre már nincs szükség a
REVOKEparanccsal.
Erős jelszavak és jelszókezelés
A erős jelszó használata alapvető. Egy gyenge jelszó szinte garancia a feltörésre. A MySQL 5.6.6 verziótól elérhető a validate_password plugin, ami kikényszerítheti az erős jelszavakat. Aktiválja és konfigurálja a my.cnf fájlban:
[mysqld]
plugin_load_add = validate_password.so
validate_password = ON
validate_password.policy = MEDIUM # vagy STRONG
validate_password.length = 12 # Minimális hossz
validate_password.number_count = 1
validate_password.special_char_count = 1
validate_password.mixed_case_count = 1
Emellett állítsa be a jelszavak lejáratát (password expiration), hogy a felhasználóknak rendszeresen cserélniük kelljen jelszavaikat:
ALTER USER 'felhasznalo'@'hoszt' PASSWORD EXPIRE;
ALTER USER 'felhasznalo'@'hoszt' PASSWORD EXPIRE INTERVAL 90 DAY;
Rendszeresen ellenőrizze a jelszavak erősségét, és ne használja újra ugyanazt a jelszót több szolgáltatáshoz.
3. Hálózati biztonság: A MySQL elszigetelése
A MySQL szervernek nem kell az internet felé nyitottnak lennie, hacsak nem feltétlenül szükséges. A hálózati védelem kulcsfontosságú.
bind-addresskonfigurálása: Amy.cnf(vagymysqld.cnf) fájlban állítsa be abind-addressparamétert127.0.0.1-re, ha a MySQL-hez csak helyi alkalmazásoknak kell csatlakozniuk. Ha távoli elérésre is szükség van (pl. egy másik szerverről), akkor adja meg annak a szervernek az IP-címét, vagy egy specifikus hálózati interfészt. Soha ne hagyja kommentben, vagy0.0.0.0-ra állítva, hacsak nem tudja pontosan, mit csinál, és rendelkezik megfelelő tűzfalvédelemmel.[mysqld] bind-address = 127.0.0.1 # Csak helyi elérés # VAGY: # bind-address = 192.168.1.100 # Csak ezen az IP-n keresztül- Tűzfal konfigurálása: Egy tűzfal (pl. UFW Linuxon vagy Windows Defender Firewall Windows-on) elengedhetetlen. Alapértelmezetten a MySQL a 3306-os porton figyel. Csak azoknak az IP-címeknek engedélyezze a 3306-os porthoz való hozzáférést, amelyeknek valóban szükségük van rá.
# UFW példa: sudo ufw enable sudo ufw allow from 192.168.1.0/24 to any port 3306 # Engedélyezi a helyi hálóról sudo ufw deny 3306 # Minden más forrásból tiltja (ha nincs más szabály) sudo ufw status - SSL/TLS titkosítás: Az adatbázis és az alkalmazás közötti kommunikáció titkosítása elengedhetetlen az adatok lehallgatása (Man-in-the-Middle támadások) elleni védelemhez. Konfigurálja a MySQL-t SSL/TLS használatára. Ehhez SSL tanúsítványokra és kulcsokra lesz szüksége, amelyeket generálnia kell, vagy egy hitelesítésszolgáltatótól beszereznie.
[mysqld] ssl_ca = /etc/mysql/certs/ca.pem ssl_cert = /etc/mysql/certs/server-cert.pem ssl_key = /etc/mysql/certs/server-key.pemEzután kikényszerítheti az SSL-t specifikus felhasználóknál:
GRANT ALL PRIVILEGES ON adatbazis.* TO 'alkalmazas_user'@'localhost' REQUIRE SSL;
4. A my.cnf (konfigurációs fájl) további hardenelése
A MySQL konfigurációs fájlja (gyakran my.cnf vagy mysqld.cnf) rengeteg beállítási lehetőséget kínál, amelyek befolyásolják a biztonságot.
skip-name-resolve: Engedélyezze ezt a beállítást, hogy a MySQL ne próbálja meg feloldani a hosztneveket IP-címekre (vagy fordítva). Ez javítja a teljesítményt és csökkenti a DNS-alapú támadások kockázatát.[mysqld] skip-name-resolvelocal-infile=0: Ez a beállítás letiltja aLOAD DATA LOCAL INFILEparancsot, amely potenciálisan lehetővé tehetné egy kliens számára, hogy tetszőleges fájlokat olvasson be a szerverről az adatbázisba. Rendkívül veszélyes funkció, alapértelmezetten le kell tiltani.[mysqld] local-infile=0secure_file_priv: Korlátozza aLOAD DATA INFILEésSELECT ... INTO OUTFILEparancsok által elérhető könyvtárakat. Ideális esetben állítsa be egy nem létező, vagy egy nagyon szigorúan korlátozott könyvtárra, vagy hagyja üresen a letiltásához.[mysqld] secure_file_priv = "/var/lib/mysql-files" # Vagy: "" (üres string a letiltáshoz)max_connections: Korlátozza az egyidejű kapcsolatok számát. Ez segíthet a DoS (Denial of Service) támadások elleni védekezésben. Állítsa be egy reális értékre az alkalmazása igényei szerint.- Naplózás (Logging): A naplózás kulcsfontosságú a biztonsági események nyomon követéséhez.
log_error: Mindig engedélyezze az adatbázis védelem szempontjából, ide íródnak a hibák és figyelmeztetések.general_log: A MySQL minden egyes lekérdezést naplóz. Nagyon hasznos hibakereséshez, de produkciós környezetben kikapcsolva kell tartani a teljesítmény és az érzékeny adatok (pl. jelszavak) naplóba kerülése miatt. Ha mégis szükséges, győződjön meg róla, hogy a naplófájl biztonságosan van tárolva és rendszeresen törölve/rotálva.slow_query_log: Segít azonosítani a rosszul megírt, hosszú ideig futó lekérdezéseket, amelyek potenciálisan egy DoS támadás részei lehetnek.- Audit log (bővítmény): Egyes MySQL verziók vagy bővítmények (pl. Enterprise Audit Log) részletes audit naplókat biztosítanak, ami fontos a megfelelőségi követelmények szempontjából.
- Felesleges bővítmények letiltása: Vizsgálja át, milyen bővítmények futnak, és tiltsa le azokat, amelyekre nincs szüksége. Kevesebb futó komponens = kevesebb támadási felület.
5. Operációs rendszer szintű biztonság
Ne feledkezzen meg arról sem, hogy a MySQL a mögöttes operációs rendszeren fut, így annak biztonsága is kritikus.
- Rendszerfrissítések: Tartsa naprakészen az operációs rendszert (Linux, Windows stb.) a legújabb biztonsági javításokkal. Ez alapvető a rendszerfrissítések szempontjából.
- Fájlrendszer jogosultságai: Ellenőrizze, hogy a MySQL adatkönyvtárai és konfigurációs fájljai megfelelő jogosultságokkal rendelkeznek-e. Általában a
mysqlfelhasználó/csoport a tulajdonos, és csak ők, illetve arootférhetnek hozzá. - SELinux/AppArmor: Ezek a Mandátumos Hozzáférés-vezérlési (MAC) rendszerek további védelmi réteget biztosítanak, korlátozva, hogy a MySQL folyamat mit tehet a rendszeren belül. Konfigurálja őket a MySQL számára.
- Biztonságos backupok: Készítsen rendszeres, titkosított backupokat, és tárolja azokat biztonságos, elkülönített helyen. Ellenőrizze a backupok visszaállíthatóságát.
6. Rendszeres karbantartás és monitorozás
A biztonság nem egyszeri feladat, hanem folyamatos munka.
- MySQL frissítések: Rendszeresen frissítse a MySQL szervert a legújabb stabil verzióra, hogy részesüljön a biztonsági javításokból.
- Naplók monitorozása: Rendszeresen ellenőrizze a MySQL hibanaplóit, a rendszer naplóit (auth.log, syslog), hogy észlelje a gyanús aktivitást vagy a behatolási kísérleteket. Használhat automatizált eszközöket (pl. ELK stack, Splunk, Graylog, Fail2ban) a naplók elemzésére.
- Felhasználói jogosultságok felülvizsgálata: Időnként auditálja a felhasználói fiókokat és azok jogosultságait. Távolítsa el azokat a felhasználókat, amelyekre már nincs szükség.
- Biztonsági auditok és penetrációs tesztek: Fontos, hogy időnként független szakértők végezzenek biztonsági auditot vagy penetrációs tesztet, hogy feltárják az esetleges gyenge pontokat, mielőtt a támadók tennék meg.
Összefoglalás
Egy frissen telepített MySQL szerver biztonságossá tétele egy alapvető, de többlépcsős folyamat, amely odafigyelést és rendszeres karbantartást igényel. Az alapvető lépések, mint a mysql_secure_installation futtatása, az erős jelszavak használata, a felhasználói jogosultságok szigorú kezelése, a hálózati védelem (tűzfal, SSL) és a konfigurációs fájl hardenelése elengedhetetlenek. Ne feledje, a szerver biztonsága az Ön felelőssége, és a proaktív védelem mindig jobb, mint a reakció. Folyamatosan tájékozódjon a legújabb biztonsági fenyegetésekről és a MySQL újabb verzióinak biztonsági funkcióiról, hogy adatbázisa mindig a lehető legbiztonságosabb legyen.
Leave a Reply