MySQL yra viena iš populiariausių reliacinių duomenų bazių valdymo sistemų, kuri yra pagrindinis užpuolikas, bandantis patekti į duomenų bazes. Naujai įdiegtas MySQL duomenų bazės serveris gali turėti daug pažeidžiamumų ir spragų. Kadangi duomenų saugumas yra labai svarbus, būtina suprasti kiekvieną MySQL saugos aspektą.
Šiame straipsnyje pagrindinis dėmesys skiriamas „MySQL“ duomenų bazės auditui ir saugai ir pateikiami devyni patarimai, kaip sustiprinti jos saugumą.
1. Venkite nereikalingų privilegijų suteikimo
MySQL leidžia kelis privilegijų teiginius, kurie, be reikalo priskiriami nepasiturinčiam vartotojui, gali paskatinti skaityti / rašyti failus ir sugriauti kitas vartotojo teises. Kai kurie potencialiai rizikingiausi privilegijų teiginiai yra FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN ir pan. Daugiau apie tai galite perskaityti oficialioje MySQL dokumentacijoje. Todėl nepriskirkite tokio vartotojo privilegijų, kaip FILE, GRANT, SUPER ir PROCESS, neadministracinėms paskyroms. Šiuos nereikalingus visuotinius, duomenų bazės ir lentelės lygio leidimus galite atšaukti taip:
REVOKE ALL ON *.* FROM 'naudotojo_vardas'@'host_name'; #Pasaulinės privilegijos
ATŠAUKTI CREATE, DROP ON duomenų bazės_pavadinimas.* FROM 'naudotojo_vardas'@'prieglobos_pavadinimas'; #Duomenų bazės privilegijos
ATŠAUKTI Įterpti, ATNAUJINTI, IŠTRINTI duomenų bazės_pavadinimas.lentelės_pavadinimas IŠ 'naudotojo_vardas'@'prieglobos_pavadinimas'; #Stalo privilegijos
praplovimo privilegijos;
2. Apriboti nuotolinius prisijungimus
Nuotolinė prieiga palengvina duomenų bazių administratorių darbą, tačiau tai kelia pavojų serveriui dėl galimų pažeidžiamumų ir išnaudojimų. Galite išjungti visų tipų MySQL vartotojų paskyrų nuotolinę prieigą prie pagrindinio konfigūracijos failo pridėdami tinklo praleidimo kintamąjį ir paleisdami paslaugą iš naujo.
[mysqld]
skip-networking
sudo paslauga mysql paleisti iš naujo
Panašiai turite išjungti root paskyros prieigą, jei ne visas, kad apribotumėte root paskyros nuotolinius prisijungimus. Ši atsargumo priemonė apsaugo nuo žiauraus „MySQL“ šakninės paskyros panaudojimo.
mysql> ištrinti iš mysql.user, kur user='root' ir priegloba nėra ('localhost', '127.0.0.1', '::1'); mysql> flush privilegijos;
3. Išjungti funkcijas (load_file, outfile, dumpfile)
Kita atsargumo priemonė, skirta apsaugoti MySQL nuo vietinio failo įterpimo, yra išjungti funkcijas, pasiekiamas tik naudojant FILE suteikimo privilegiją. FILE yra parinktis, leidžianti žemų privilegijų vartotojams su visuotinėmis komandų parinktimis skaityti arba rašyti failus serveryje.
- load_file
Funkcija load_file įkelia failo turinį iš serverio kaip eilutę. Pavyzdžiui, ši komanda įkels visą turinį iš /etc/passwd failą taip:
pasirinkite load_file('/etc/passwd')
- outfile
Panašiai outfile funkcija įrašo turinį į vietinio serverio failus. Užpuolikai gali naudoti šią funkciją norėdami įrašyti naudingą apkrovą į serveryje esantį failą, kaip nurodyta toliau:
pasirinkite 'Local File SQL Injection' į rinkmeną '/tmp/file.txt';
cat /tmp/file.txt
Išvestis:
Vietinis failo SQL įpurškimas
- sąvartynas
Ši funkcija naudoja pasirinkimo priežastį, kad įrašytų į failą negrąžinant išvesties į ekraną.
cat /tmp/file.txt
pasirinkite "Sveikas pasaulis!" į dumpfile '/tmp/world';
Išvestis:
Užklausa gerai, paveikta 1 eilutė (0,001 sek.)
Galite išjungti šias funkcijas atšaukdami FILE privilegiją taip:
atšaukti failą *.* iš 'user_name'@'localhost';
Susijęs: „Metasploit“ „Kali Linux“ vadovas pradedantiesiems (su praktiniais pavyzdžiais)
4. Išjungti numatytąjį prievadą
Žinome, kad MySQL paslaugos veikia 3306 prievade, o užpuolikai nuskaito prievadus, kad patikrintų tinkle veikiančias paslaugas. Jei norite pridėti apsaugą dėl neaiškumo ir pakeisti numatytąjį MySQL prievadą redaguodami prievado sistemos kintamąjį pagrindiniame konfigūracijos faile, turėsite įvesti:
vim /etc/mysql/my.cnf
prievadas = XXXX
sudo paslauga mysql paleisti iš naujo
5. Venkite pakaitos simbolių paskyrų pavadinimuose
„MySQL“ paskyrų pavadinimai susideda iš dviejų dalių, kurios yra vartotojas ir pagrindinio kompiuterio pavadinimas „naudotojo_vardas“@„host_name“. Tai leidžia administratoriui sukurti paskyras to paties pavadinimo vartotojams, kurie prisijungia iš skirtingų kompiuterių. Tačiau paskyros pavadinimo pagrindinė dalis leidžia naudoti pakaitos simbolius, kurie gali būti prieigos prie duomenų bazės taškas iš bet kurios vietos.
Neprivalomas pagrindinio kompiuterio pavadinimo arba IP adreso reikšmės naudojimas atitinka „naudotojo_vardas“@'%“, kur % atitinka MySQL šabloną, atitinkantį LIKE operaciją, o % reiškia bet kokį pagrindinio kompiuterio pavadinimą. Tuo tarpu prieiga iš „192.168.132.%“ reiškia bet kokį bandymą iš C klasės tinklo. Be to, kiekvienas gali pasiekti duomenų bazę, pavadindamas pagrindinę dalį kaip „192.18.132.mysql.com“.
Siekiant išvengti tokių bandymų, MySQL leidžia apibrėžti tinklo kaukę su pagrindinio kompiuterio reikšme, kad būtų galima identifikuoti IP adreso tinklo bitus:
client-ip_add & netmask = pagrindinio kompiuterio_pavadinimas
Sintaksė, skirta sukurti pagrindinio kompiuterio pavadinimą, yra host_ip/netmask:
KURTI VARTOTOJĄ 'jhon'@'192.168.132.0/255.255.255.0';
Aukščiau pateikta pagrindinio kompiuterio reikšmė įgalina vartotoją jonas pasiekti duomenų bazę iš bet kurio IP diapazone nuo 192.168.132.0 iki 192.168.132.255. Panašiai, pagrindinio kompiuterio reikšmės 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 leis pagrindinius kompiuterius iš A ir B klasės tinklų. Nors 192.168.132.5 leis pasiekti tik iš konkretaus IP.
6. Išjungti aiškią prieigą
„MySQL“ naudotojo vardas yra arba vardas, kuriuo duomenų bazės priima įeinančius ryšius, arba tuščias vartotojo vardas „@“host_name“, kuris sukuria anoniminį vartotoją. Tačiau anoniminio vartotojo buvimas gali paskatinti užpuolikus pasiekti duomenų bazės serverį. Be to, MySQL versijos iki MySQL 5.7 sukuria anoniminį vartotojų rinkinį, o įdiegus po versijos atnaujinimo šie vartotojai vis tiek pridedami.
pasirinkite vartotoją, pagrindinį kompiuterį, slaptažodį iš mysql.user, kur vartotojas mėgsta '';
Galite pastebėti, kad vartotojo ir slaptažodžio stulpeliai yra tušti, o prieiga ribojama iki „localhost“. Tačiau nenorite, kad kas nors prieiti prie duomenų bazės. Norėdami ištrinti anoniminius vartotojus, naudokite šią komandą:
pašalinti vartotoją „@“localhost“
praplovimo privilegijos;
7. Nustatykite ne šakninę paskyrą kaip savininką arba grupę
Ne root vartotojo abonemento nustatymas nesusijęs su MySQL root naudotoju. MySQL įdiegimas Linux/Unix sistemose iš tar ir tar.gz paketų leidžia paleisti serverį bet kuriam nepasiturinčiam vartotojui. Tai yra saugumo trūkumas, nes bet kuris vartotojas, turintis parinktį FILE, gali redaguoti arba kurti failus serveryje. Tačiau jis grąžina klaidą, kai vartotojas bando prieiti prie jo be -vartotojas = šaknis klaida.
To galite išvengti, taikydami nykščio taisyklę pasiekti duomenų bazės serverį kaip atskirą Linux naudotoją. Norėdami paleisti mysqld kaip įprastas Linux vartotojas, sustabdykite serverį ir pakeiskite skaitymo / rašymo leidimai MySQL serverio į mysql, kaip nurodyta toliau:
chown -R mysql /kelias/į/mysql/duomenys
Atidarykite pagrindinį MySQL konfigūracijos failą, pridėkite naują mysql vartotoją ir paleiskite paslaugą iš naujo, kad išvengtumėte nereikalingos prieigos prie serverio:
vim /etc/mysql/my.cnf
user=mysql
sudo paslauga mysql paleisti iš naujo
8. Nustatykite slaptažodį pagrindinei paskyrai
„MySQL“ diegimas per interaktyvų apvalkalą Debian pagrindu sukurtuose „Linux“ paskirstymuose sukuria root vartotojo abonementą ir prašo nustatyti slaptažodį. Tačiau tai neįvyksta diegiant neinteraktyvų apvalkalą ir „Red-Hat“ pagrindu sukurtus platinimus. Kaip minėta pirmiau, ne root vartotojas Linux kompiuteryje gali pasiekti mysql root vartotojo abonementą naudodamas -vartotojas = šaknis variantas. To galite išvengti nustatę slaptažodį taip:
sudo mysqladmin slaptažodis
vim /etc/mysql/my.cnf
slaptažodis =
sudo paslauga mysql paleisti iš naujo
9. Užtikrinkite duomenų šifravimą gabenant ir ramybės būsenoje
Numatytasis nešifruotas ryšys tarp kliento ir serverio kelia pavojų, kad bet kuris tarpininkas perims duomenis. Taip pat nešifruoti vartotojo duomenys duomenų bazėje kelia pavojų vartotojo konfidencialumui ir vientisumui. MySQL palaiko duomenų šifravimą tarp kliento ir serverio per TLS/SSL protokolą, o nešifruotas ryšys yra priimtinas tik tada, kai abi bendraujančios šalys yra tame pačiame tinkle.
MySQL dabar palaiko šifravimą ramybės būsenoje, kad apsaugotų serveryje saugomus duomenis net tada, kai sistema pažeidžiama.
MySQL Advanced Security: Apsaugokite save
Labai svarbu užtikrinti, kad jūsų internetinis saugumas būtų aukščiausias, o šiame straipsnyje rasite keletą naudingų patarimų teisinga kryptimi. Pirmiau pateikti veiksmai yra naudingi norint apsaugoti duomenų bazės serverį, tačiau taip pat labai svarbu išmokti priskirti minimalius leidimus neadministruojantiems vartotojams.
Sukurkite savo „mySQL“ duomenų bazę naudodami tik teksto rengyklę ir šį pagrindinį struktūros kontūrą arba „schemą“.
Skaitykite toliau
- Programavimas
- Saugumas
- Programavimas
- Saugumo patarimai
- Saugumas
Rumaisa yra laisvai samdoma rašytoja MUO. Ji dėvėjo daugybę skrybėlių – nuo matematikės iki informacijos saugumo entuziastės, o dabar dirba SOC analitike. Jos pomėgiai apima skaitymą ir rašymą apie naujas technologijas, Linux platinimą ir viską, kas susiję su informacijos saugumu.
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!
Norėdami užsiprenumeruoti, spustelėkite čia