Panatilihing ligtas ang iyong mga database ng MySQL sa pamamagitan ng paglikha ng magkakahiwalay na mga gumagamit at mga pahintulot

Palagi akong naging kaibigan ng mabubuting kasanayan, higit pa kung matutulungan nila kaming mapanatili ang seguridad ng aming mga server, serbisyo, o simpleng aming impormasyon.

Isang ugali (masamang ugali) na mayroon ang maraming mga tagapangasiwa o gumagamit ay ang paggamit ng pag-access ugat para sa lahat ng mga database, iyon ay ... nag-install sila ng isang site gamit ang WordPress CMS, at bilang pag-access ng data sa database (para magamit ng WP ang MySQL server at gamitin ang DB nito) inilagay nila ang MySQL server administration user: root

Gayundin, nag-i-install sila ng anumang iba pang web application (isang chat, paste, forum, atbp) at ginagawa ang pareho, palagi nilang ginagamit ang root user ng MySQL ...

ERROR !!!

Ito ay simpleng isang nakamamatay na ugali.

Ipagpalagay na mayroon kaming mga sumusunod na serbisyo sa isang server:

  1. Isang site o portal gamit ang WordPress.
  2. Ang aming forum ng suporta, pag-uusap, atbp ... isang buong pamayanan.
  3. Isang FTP na gumagamit ng isang MySQL database upang mag-imbak ng mga gumagamit at password.
  4. Ang mga gumagamit ng email ay naka-imbak (mga gumagamit at password) sa isang MySQL database.
  5. Isang maliit na WebChat na na-install namin upang makipag-chat sa isang kakilala mo.

At sa kanilang lahat, sa 5 mga serbisyo ginagamit namin ang root user ng MySQL upang ma-access at mai-save ng bawat serbisyo ang data sa kaukulang database.

Isang magandang araw, alinman sa maraming mga troll na nasa net, ngunit ito ay hindi lamang isang troll, ngunit din master ang ilang mga pagsasamantala, kahinaan, pag-hack, atbp ... nagpasya na gumawa ng isang bagay na nakakasama sa amin.

Maghanap ng isang bug sa WebChat na ginagamit namin, sinasamantala ang bug na iyon, namamahala ito upang ma-access ang mga file ng WebChat, kasama ang file ng pagsasaayos ng WebChat, at… sa file na ito, tulad ng halata, ay ang username at password na ginagamit ng WebChat upang i-access ang server ng MySQL, at hulaan kung ano? ... Ito ay walang iba pa at walang mas mababa sa ROOT USER!

Sa pamamagitan ng pagkuha ng impormasyong ito, sa isang napaka-simpleng paraan na maaaring ang troll ay:

  1. Tanggalin kami at / o magnakaw ng lahat na nauugnay sa site o portal na mayroon kami (WordPress).
  2. Maaari mong tanggalin at / o magnakaw ng impormasyon mula sa amin AT mula sa aming mga gumagamit na gumagamit ng Forum, ang komunidad na nilikha namin.
  3. Maaari mo ring nakawin ang username at password ng LAHAT ng mga gumagamit na mayroong isang email account sa aming server, pati na rin nakawin ang impormasyon mula sa kanilang mga email, panggagaya, atbp.
  4. At sa wakas, maaari kang gumamit ng isang account sa aming FTP server, at mag-upload ng anumang file na naglalaman ng malware, na magpapahintulot sa iyo na makakuha ng TOTAL at ABSOLUTE na kontrol sa aming server.

Aba ... ano sa palagay mo? … 🙂

Nakikita mo ba ang lahat na maaaring mangyari sa pamamagitan lamang ng hindi paglikha ng mga independiyenteng gumagamit para sa bawat database na mayroon kami?

Ito ay HINDI isang labis na pagmamahal na kaibigan, maaari itong mangyari nang may kamangha-manghang kadalian ... mabuti, lahat ng kailangan upang ma-trigger ang sakuna ay isang bug lamang sa ilan sa mga web application na na-install mo.

Ngayon ...

Paano lumikha ng magkakahiwalay na mga gumagamit ng MySQL para sa bawat web application?

Una dapat naming ipasok ang MySQL server na may root user, dahil siya ang may mga pribilehiyo upang lumikha ng mga database, magtaguyod ng mga pahintulot, lumikha ng mga gumagamit, atbp.

mysql -u root -p

Kapag isinulat nila ang nasa itaas at pindutin [Ipasok] tatanungin sila para sa password ng root user ng MySQL, isulat nila ito at pindutin [Ipasok] muli, agad na ipapakita sa iyo ang katulad nito:

Ngayon ay lilikha kami ng isang database na pinangalanang «webchatdb":
CREATE DATABASE webchatdb;

Pansinin ang semicolon «;»Sa pagtatapos ng linya.

Handa na, nakalikha ka na ng database, ngayon magpatuloy tayo upang likhain ang gumagamit «webchatuser«Gamit ang password«passworddelputowebchat":

CREATE USER 'webchatuser'@'localhost' IDENTIFIED BY 'passworddelputowebchat';

Ngayon ang mahika ... ibibigay namin ang lahat ng mga pribilehiyo (basahin at isulat) sa webchatuser SA DB lang webchatdb:

GRANT ALL PRIVILEGES ON webchatdb.* TO 'webchatuser'@'localhost' WITH GRANT OPTION;

At voila, ang gumagamit ay mayroon nang mga pahintulot sa database na iyon ... ngayon ang natitira lamang ay upang i-refresh ang mga pahintulot sa MySQL, iyon ay, sabihin sa MySQL na basahin muli ang mga pribilehiyo ng mga gumagamit dahil nakagawa lamang kami ng pagbabago sa kanila :

FLUSH PRIVILEGES ;

Nag-iiwan ako ng isang screenshot:

At ito ang naging lahat. Sa pamamagitan ng paggawa nito para sa bawat web application na ginagamit namin, ginagarantiyahan namin na kung sakaling mapamahalaan nilang malabag ang isa sa mga web application na iyon, ang iba ay ligtas (hindi bababa sa pananaw ng MySQL)

Ano ang isang mabuting kasanayan? 😉

Inaasahan kong ito ay naging kapaki-pakinabang sa iyo tulad ng sa akin, habang sinubukan kong ipaliwanag ito nang simple hangga't maaari.

Regards


15 na puna, iwan mo na ang iyo

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Martin dijo

    Magandang post KZKG, kung nasa forum ako hihilingin para sa isang malagkit!

    1.    KZKG ^ Gaara dijo

      Salamat 😀

      1.    CubaRed dijo

        Ang password na itinakda mo para sa webchat ay mabuti, isa pang bagay na may kinalaman sa MySQL ay ang paggamit ng memorya nito

  2.   Hyuuga_Neji dijo

    Hehehe, salamat sa pagpapaalala sa akin ng mga utos ng MySQL. Ngayon tingnan natin kung "naglagay ako ng seguridad" sa World of Warcraft server database na mayroon ako sa aking LAN.

  3.   pagkubkob84 dijo

    ang aking kaalaman dito ay wala, ngunit ito ay halos pareho para sa kapag gumagamit ng MySQL para sa Amarok?
    GUMAWA NG DATABASE amarokdb;
    IPAGBIGAY ANG LAHAT NG PRIVILEGES SA amarokdb. * SA 'amarokuser' KILALA SA 'password'; FLUSH PRIVILEGES;

    1.    KZKG ^ Gaara dijo

      Hindi ko nagamit ang Amarok ng matagal, mahabang panahon, ngunit kung gumagamit ka ng isang DB na MySQL, sa teorya dapat itong gumana nang ganoon din.

  4.   Carlos Andres Restrepo dijo

    Kumusta, makabubuti kung lumikha ka ng isang entry para sa seguridad laban sa mga web server sa Linux, marami sa kanila ay walang tamang seguridad at ang tagapangasiwa ng pareho ay hindi maayos na dalubhasa, pinapabilis lamang nila ang mga bagay, halimbawa ang paggamit ng Pinapayagan ng symlink sa mga server na basahin ang mga file ng pagsasaayos ng iba pang mga account sa parehong server maraming mga tagapangasiwa ang walang kamalayan dito at iyon ang dahilan kung bakit lumaganap ang mga defaces ng website

    Regards

    1.    KZKG ^ Gaara dijo

      Hi kung paano ito pupunta
      Maligayang pagdating sa site 🙂

      Sa totoo lang, hindi ko isinasaalang-alang ang aking sarili na dalubhasa sa bagay na ito sa malayo, ngunit susubukan kong magbigay ng kaunting kaalaman na nakuha ko sa mga nakaraang taon

      Ang isa pang bagay na hindi ginagawa ng maraming mga administrador ng network ay magbigay ng mga pribilehiyo sa mga site na may indibidwal na apache, iyon ay, ang gumagamit at pangkat na www-data (o katulad), na kung saan ay magkakaiba para sa bawat site, at siya namang hawla bawat isa sa mga ito.

      Regards

  5.   hackloper775 dijo

    Magandang tip

    Regards

    1.    KZKG ^ Gaara dijo

      Salamat sa iyo

  6.   nano dijo

    AYAW KO sa hitsura ng iyong terminal, inaalis ako ng aking mga konsentrasyon sa background. Nababaliw ka na xD

    Sa labas ng iyon, nakawiwili dahil nakita ko ang mga nakalulungkot na kaso ng pagkawala ng serbisyo mula sa mga bagay na iyon.

    Ngayon, hindi lamang ito nakasalalay sa mga iyon, ang seguridad ay nakasalalay sa kung paano itinayo ang database, ipinaliwanag sa akin ng isang guro, ngunit hindi pa ako masyadong nalulubog sa DB ... dapat nating pakialaman ang MongoDB = D isa sa mga ito araw

  7.   Carlos Colonel dijo

    nangyari lang sa akin ngayon kasama ang inuupahan kong server

    Sinundan ko ang iyong mga hakbang, nagpunta ako sa cpanel at hanapin ang database ng MYSQL at sinasabi sa akin na wala na ito sa order.

    Hindi ko alam kung paano pumasok ngayon sa ilalim ng root user
    Ako ay isang neophyte dito, ngunit ang pagbabasa dito ay marami kang natutunan, sana ay gabayan mo ako sa pag-access

    1.    KZKG ^ Gaara dijo

      Kamusta 🙂
      Ano ang mayroon ka isang Hosting (SharedHosting) o isang VPS (virtual server)?

      Kung mayroon kang isang Hosting at hindi isang VPS, dapat mong makita kung ang iyong Hosting ay may SSH access (makipag-ugnay sa suportang panteknikal ng kumpanya na nagbenta sa iyo ng hosting at tanungin sila kung paano mag-access sa pamamagitan ng SSH), sa sandaling pumasok ka sa pamamagitan ng SSH, ang gumagamit ay HINDI magiging ugat, ngunit dapat mong gamitin ang gumagamit na ipinasok mo noong na-install mo ang web application na iyon.

      Sa totoo lang ang iyo ay isang kumplikadong paksa, sapagkat ang mga pagkakaiba-iba at posibilidad ay marami, inirerekumenda kong buksan mo ang isang bagong paksa sa aming forum, doon magiging mas komportable upang matulungan ka - » http://foro.desdelinux.net

      Pagbati

  8.   bossbrondem dijo

    mabuti,

    Nauunawaan ko na mabuting kasanayan na huwag ibigay ang lahat ng mga pribilehiyo sa anumang gumagamit maliban sa ugat. Gayunpaman, mula nang mai-install ko ang phpmyadmin isang bagong gumagamit na "phpmyadmin" ay nilikha gamit ang lahat ng mga pribilehiyo. Tila lohikal na ito ang kaso, dahil ito ay isang graphic na bersyon lamang upang pamahalaan ang mga database sa MySQL. Gayunpaman nais kong tiyakin kung maayos ito o dapat bang gumawa ako ng pagbabago sa mga pribilehiyo ng gumagamit na "phpmyadmin".

    Pagbati at salamat po!

  9.   Emmanuel dijo

    Magaling ...
    Isa ako sa mga gumagawa ng lahat nang may ugat, ngunit binuksan mo ang aking mga mata kaibigan ..
    Maraming salamat…