A legfontosabb biztonsági beállítások egy frissen telepített MySQL szerveren

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 root felhasználónak. Ha már van, felajánlja a megváltoztatását. Ez létfontosságú, mivel a root felhaszná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 root bejelentkezés tiltása: Alapértelmezés szerint a root felhasználó bejelentkezhet bárhonnan, ami rendkívül veszélyes. Ez a funkció korlátozza a root bejelentkezé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 webuser nevű felhasználót ahelyett, hogy a root-ot használná.
  • Specifikus jogosultságok megadása: Ne adjon ALL PRIVILEGES-t, hacsak nem abszolút szükséges. Használja a GRANT parancsot 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 REVOKE paranccsal.

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-address konfigurálása: A my.cnf (vagy mysqld.cnf) fájlban állítsa be a bind-address paramétert 127.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, vagy 0.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.pem

    Ezutá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-resolve
  • local-infile=0: Ez a beállítás letiltja a LOAD DATA LOCAL INFILE parancsot, 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=0
  • secure_file_priv: Korlátozza a LOAD DATA INFILE és SELECT ... INTO OUTFILE parancsok á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 mysql felhasználó/csoport a tulajdonos, és csak ők, illetve a root fé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

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük