12 Mbinu Bora za Usalama za MySQL/MariaDB kwa Linux


MySQL ndio mfumo maarufu zaidi wa hifadhidata wa chanzo huria na MariaDB (uma wa MySQL) ndio mfumo wa hifadhidata unaokua kwa kasi zaidi duniani. Baada ya kusakinisha seva ya MySQL, haina usalama katika usanidi wake chaguo-msingi, na kuilinda ni moja wapo ya kazi muhimu katika usimamizi wa hifadhidata wa jumla.

Hii itachangia katika kuimarisha na kuimarisha usalama wa jumla wa seva ya Linux, kwani washambuliaji huchanganua udhaifu kila mara katika sehemu yoyote ya mfumo, na hifadhidata hapo awali zimekuwa sehemu kuu zinazolengwa. Mfano wa kawaida ni kulazimisha kikatili kwa nenosiri la msingi kwa hifadhidata ya MySQL.

Katika mwongozo huu, tutaelezea mbinu bora ya usalama ya MySQL/MariaDB kwa Linux.

1. Salama Usakinishaji wa MySQL

Hii ni hatua ya kwanza iliyopendekezwa baada ya kusakinisha seva ya MySQL, kuelekea kupata seva ya hifadhidata. Hati hii inawezesha kuboresha usalama wa seva yako ya MySQL kwa kukuuliza:

  • weka nenosiri la akaunti ya msingi, ikiwa hukuliweka wakati wa kusakinisha.
  • lemaza kuingia kwa mtumiaji wa mbali kwa kuondoa akaunti za mizizi ambazo zinaweza kufikiwa kutoka nje ya seva pangishi ya ndani.
  • ondoa akaunti za watumiaji wasiojulikana na hifadhidata ya majaribio ambayo kwa chaguomsingi inaweza kufikiwa na watumiaji wote, hata watumiaji wasiojulikana.

# mysql_secure_installation

Baada ya kuiendesha, weka nenosiri la msingi na ujibu mfululizo wa maswali kwa kuingiza [Ndiyo/Y] na ubonyeze [Ingiza].

2. Unganisha Seva ya Hifadhidata kwa Anwani ya Rudi nyuma

Usanidi huu utazuia ufikiaji kutoka kwa mashine za mbali, huiambia seva ya MySQL kukubali tu miunganisho kutoka ndani ya mwenyeji. Unaweza kuiweka katika faili kuu ya usanidi.

# vi /etc/my.cnf	                   [RHEL/CentOS]	
# vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
# vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Ongeza laini ifuatayo chini ya sehemu ya [mysqld].

bind-address = 127.0.0.1

3. Lemaza INFILE YA LOCAL katika MySQL

Kama sehemu ya uimarishaji wa usalama, unahitaji kuzima local_infile ili kuzuia ufikiaji wa mfumo msingi wa faili kutoka ndani ya MySQL kwa kutumia maagizo yafuatayo chini ya sehemu ya [mysqld].

local-infile=0

4. Badilisha Bandari Chaguomsingi ya MYSQL

Tofauti ya Mlango huweka nambari ya mlango wa MySQL ambayo itatumika kusikiliza kwenye miunganisho ya TCP/ IP. Nambari chaguo-msingi ya bandari ni 3306 lakini unaweza kuibadilisha chini ya sehemu ya [mysqld] kama inavyoonyeshwa.

Port=5000

5. Wezesha Kuingia kwa MySQL

Kumbukumbu ni mojawapo ya njia bora za kuelewa kinachotokea kwenye seva, ikiwa kuna mashambulizi yoyote, unaweza kuona kwa urahisi shughuli zozote zinazohusiana na uingilizi kutoka kwa faili za kumbukumbu. Unaweza kuwezesha ukataji miti wa MySQL kwa kuongeza kigezo kifuatacho chini ya sehemu ya [mysqld].

log=/var/log/mysql.log

6. Weka Ruhusa Sahihi kwenye Faili za MySQL

Hakikisha kuwa una ruhusa zinazofaa zilizowekwa kwa faili zote za seva ya mysql na saraka za data. Faili ya /etc/my.conf inapaswa kuandikwa kwa mizizi pekee. Hii inazuia watumiaji wengine kubadilisha usanidi wa seva ya hifadhidata.

# chmod 644 /etc/my.cnf

7. Futa Historia ya Shell ya MySQL

Amri zote unazotekeleza kwenye ganda la MySQL huhifadhiwa na mteja wa mysql katika faili ya historia: ~/.mysql_history. Hii inaweza kuwa hatari, kwa sababu kwa akaunti yoyote ya mtumiaji ambayo utaunda, majina yote ya watumiaji na nywila zilizoandikwa kwenye shell zitarekodi kwenye faili ya historia.

# cat /dev/null > ~/.mysql_history

8. Usiendeshe Amri za MySQL kutoka kwa Mstari wa Amri

Kama unavyojua tayari, amri zote unazoandika kwenye terminal huhifadhiwa katika faili ya historia, kulingana na ganda unalotumia (kwa mfano ~/.bash_history kwa bash). Mshambulizi anayeweza kufikia faili hii ya historia anaweza kuona kwa urahisi manenosiri yoyote yaliyorekodiwa hapo.

Haipendekezi sana kuandika nywila kwenye mstari wa amri, kitu kama hiki:

# mysql -u root -ppassword_

Unapoangalia sehemu ya mwisho ya faili ya historia ya amri, utaona nenosiri lililoandikwa hapo juu.

# history 

Njia sahihi ya kuunganisha MySQL ni.

# mysql -u root -p
Enter password:

9. Bainisha Watumiaji wa Hifadhidata Maalum ya Maombi

Kwa kila programu inayoendesha kwenye seva, mpe tu ufikiaji wa mtumiaji ambaye anasimamia hifadhidata ya programu fulani. Kwa mfano, ikiwa una tovuti ya WordPress, tengeneza mtumiaji maalum wa hifadhidata ya tovuti ya WordPress kama ifuatavyo.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email %!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

na kumbuka kila wakati kuondoa akaunti za watumiaji ambazo hazidhibiti tena hifadhidata yoyote ya programu kwenye seva.

10. Tumia Programu-jalizi za Ziada za Usalama na Maktaba

MySQL inajumuisha idadi ya programu-jalizi za usalama za: uthibitishaji wa majaribio ya wateja kuunganishwa kwenye seva ya mysql, uthibitishaji wa nenosiri na uhifadhi wa usalama kwa taarifa nyeti, ambazo zote zinapatikana katika toleo lisilolipishwa.

Unaweza kupata zaidi hapa: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Badilisha Nywila za MySQL Mara kwa Mara

Hiki ni ushauri wa kawaida wa habari/maombi/usalama wa mfumo. Ni mara ngapi utafanya hivi itategemea kabisa sera yako ya usalama wa ndani. Hata hivyo, inaweza kuzuia \walaghai ambao huenda wamekuwa wakifuatilia shughuli zako kwa muda mrefu, kupata ufikiaji wa seva yako ya mysql.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Sasisha Kifurushi cha Seva ya MySQL Mara kwa Mara

Inapendekezwa sana kuboresha vifurushi vya mysql/mariadb mara kwa mara ili kuendelea na masasisho ya usalama na marekebisho ya hitilafu, kutoka kwa hazina ya muuzaji. Kwa kawaida vifurushi katika hifadhi chaguomsingi za mfumo wa uendeshaji vimepitwa na wakati.

# yum update
# apt update

Baada ya kufanya mabadiliko yoyote kwa seva ya mysql/mariadb, anzisha tena huduma kila wakati.

# systemctl restart mariadb		#RHEL/CentOS
# systemctl restart mysql		#Debian/Ubuntu

Ni hayo tu! Tunapenda kusikia kutoka kwako kupitia fomu ya maoni hapa chini. Shiriki nasi vidokezo vyovyote vya usalama vya MySQL/MariaDB ambavyo havipo kwenye orodha iliyo hapo juu.