Jaga keamanan database MySQL Anda dengan membuat pengguna dan izin terpisah

Saya selalu menjadi teman praktik yang baik, terlebih jika praktik tersebut membantu kami menjaga keamanan server, layanan, atau informasi kami.

Kebiasaan (kebiasaan buruk) yang dimiliki banyak administrator atau pengguna adalah menggunakan akses akar untuk semua database, yaitu ... mereka menginstal situs menggunakan CMS WordPress, dan sebagai akses data ke database (untuk WP menggunakan server MySQL dan menggunakan DB-nya) mereka menempatkan pengguna administrasi server MySQL: root

Juga, mereka menginstal aplikasi web lain (obrolan, tempel, forum, dll) dan melakukan hal yang sama, mereka selalu menggunakan pengguna root MySQL ...

KESALAHAN!!!

Ini hanyalah kebiasaan yang fatal.

Misalkan kita memiliki layanan berikut di server:

  1. Situs atau portal yang menggunakan WordPress.
  2. Forum dukungan kami, pembicaraan, dll ... seluruh komunitas.
  3. FTP yang menggunakan database MySQL untuk menyimpan pengguna dan kata sandi.
  4. Pengguna email disimpan (pengguna dan kata sandi) dalam database MySQL.
  5. WebChat kecil yang kami pasang untuk mengobrol dengan seseorang yang Anda kenal.

Dan di semuanya, di 5 layanan kami menggunakan pengguna root MySQL sehingga setiap layanan mengakses dan menyimpan data di database yang sesuai.

Suatu hari, salah satu dari sekian banyak troll di luar sana, tetapi ini bukan hanya troll, tetapi juga menguasai beberapa eksploitasi, kerentanan, peretasan, dll ... memutuskan untuk melakukan sesuatu yang berbahaya bagi kami.

Temukan bug di WebChat yang kami gunakan, memanfaatkan bug ini, ia berhasil mengakses file WebChat, termasuk file konfigurasi WebChat, dan… di file ini, jelas, adalah nama pengguna dan kata sandi yang digunakan WebChat untuk mengakses Server MySQL, dan coba tebak? … Tidak lebih dan tidak kurang ROOT USER!

Dengan mendapatkan informasi ini, dengan cara yang sangat sederhana troll dapat:

  1. Hapus kami dan / atau curi semua yang berhubungan dengan situs atau portal yang kami miliki (WordPress).
  2. Anda dapat menghapus dan / atau mencuri informasi dari kami DAN dari pengguna kami yang menggunakan Forum, komunitas yang kami buat.
  3. Anda juga dapat mencuri nama pengguna dan kata sandi SEMUA pengguna yang memiliki akun email di server kami, serta mencuri informasi dari email mereka, meniru identitas, dll.
  4. Dan sekarang akhirnya, Anda dapat menggunakan akun di server FTP kami, dan mengunggah file apa pun yang berisi perangkat lunak jahat, yang akan memungkinkan Anda untuk mendapatkan kendali ABSOLUT dan TOTAL dari server kami.

Nah... bagaimana menurut anda? …

Apakah Anda melihat semua yang bisa terjadi hanya dengan tidak membuat pengguna independen untuk setiap database yang kita miliki?

Ini BUKAN berlebihan sobat, ini bisa terjadi dengan sangat mudah ... nah, semua yang dibutuhkan untuk memicu malapetaka hanyalah bug di beberapa aplikasi web yang sudah anda instal.

Sekarang…

Bagaimana cara membuat pengguna MySQL terpisah untuk setiap aplikasi web?

Pertama kita harus masuk ke server MySQL dengan pengguna root, karena dialah yang memiliki hak untuk membuat database, membuat izin, membuat pengguna, dll:

mysql -u root -p

Saat mereka menulis di atas dan menekan [Memasukkan] Mereka akan dimintai kata sandi dari pengguna root MySQL, mereka menulisnya dan menekan [Memasukkan] sekali lagi, Anda akan langsung diperlihatkan sesuatu seperti ini:

Sekarang kita akan membuat database bernama «webchatdb":
CREATE DATABASE webchatdb;

Perhatikan titik koma «;»Di akhir baris.

Siap, Anda sudah membuat database, sekarang mari kita membuat pengguna «pengguna web«Dengan sandi«kata sandidelputowebchat":

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

Sekarang keajaiban ... kami akan memberikan semua hak istimewa (membaca dan menulis) kepada pengguna web HANYA di DB webchatdb:

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

Dan voila, pengguna sudah memiliki izin di database itu ... sekarang tinggal menyegarkan izin ke MySQL, yaitu, beri tahu MySQL untuk membaca ulang hak istimewa pengguna karena kami baru saja membuat perubahan di dalamnya:

FLUSH PRIVILEGES ;

Saya meninggalkan tangkapan layar:

Dan ini sudah segalanya. Dengan melakukan ini untuk setiap aplikasi web yang kami gunakan, kami menjamin bahwa jika mereka berhasil melanggar salah satu aplikasi web tersebut, yang lain akan aman (setidaknya dari sudut pandang MySQL)

Apa praktik yang baik? 

Saya berharap ini berguna bagi Anda seperti juga bagi saya, karena saya mencoba menjelaskannya sesederhana mungkin.

salam