MySQL
MySQL adalah sistem manajemen basis data relasional sumber terbuka. Panduan ini akan menunjukkan cara mengamankan dan mengaudit server MySQL. Nama tersebut merupakan kombinasi dari “My”, nama putri salah satu pendiri Michael Widenius, dan “SQL”, singkatan dari Structured Query Language.
Sebelum Anda Mulai
-
Pastikan Anda telah mengikuti panduan Memulai dan Mengamankan Server Anda. Pastikan bahwa nama host Linode telah disetel.
Periksa nama host Linode Anda. Perintah pertama harus menunjukkan nama host pendek Anda dan perintah kedua harus menunjukkan nama domain yang sepenuhnya memenuhi syarat (FQDN).
hostname hostname -f
Catatan Jika Anda memiliki nama domain terdaftar untuk situs web Anda, tambahkan domain ke server Linode tempat Anda berencana memasang tumpukan LAMP. Jika Anda tidak memiliki nama domain terdaftar, maka ganti
example.com
dengan alamat IP server Linode dalam petunjuk berikut. -
Perbarui sistem Anda:
sudo yum update
Catatan Panduan ini ditulis untuk pengguna non-root. Perintah yang memerlukan hak istimewa yang lebih tinggi diawali dengan
sudo
. Jika Anda tidak terbiasa dengansudo
perintah, Anda dapat memeriksa panduan Pengguna dan Grup kami. -
Untuk mengamankan dan mengaudit MySQL, Anda harus memiliki server Linux dengan
MySQL Server
layanan berjalan. Untuk informasi tentang menginstal MySQL, silakan lihat Menginstal MySQLCatatan Instruksi dalam panduan ini didasarkan pada Ubuntu 18.04, meskipun semua langkah adalah distribusi agnostik dengan pengecualian nama paket dan manajer paket.
Menggunakan Penginstal MySQL yang Aman
Paket mysql-server sudah dikonfigurasi sebelumnya dengan utilitas yang disebut mysql_secure_installation
yang digunakan untuk menyiapkan titik awal yang aman untuk server MySQL, dengan menghapus pengguna anonim dan memungkinkan Anda menentukan kebijakan kekuatan sandi yang diinginkan.
mysql_secure_installation
adalah skrip shell yang tersedia di sistem Unix, dan memungkinkan Anda mengamankan instalasi MySQL dengan memungkinkan Anda untuk:
- menetapkan kata sandi untuk akun root
- hapus akun root yang dapat diakses dari luar host lokal
- hapus akun pengguna anonim
- hapus database pengujian, yang secara default dapat diakses oleh pengguna anonim
Mulailah proses keamanan dengan menjalankan utilitas ini segera setelah menginstal mysql-server.
-
Aktifkan utilitas dengan menjalankan perintah berikut:
sudo mysql_secure_installation
-
Proses penyiapan dimulai dan utilitas meminta Anda menentukan apakah Anda ingin mengaktifkan plugin validasi kata sandi yang digunakan untuk menguji kata sandi dan meningkatkan keamanan. Disarankan untuk mengaktifkan fitur ini.
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y
-
Setelah Anda mengaktifkan plugin kata sandi, tentukan kebijakan validasi kata sandi Anda berdasarkan tingkat kekuatan kata sandi yang diinginkan.
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
-
Hapus pengguna anonim. Ini adalah opsi keamanan yang penting karena penyerang dapat memanfaatkan pengguna anonim untuk mendapatkan akses ke server database.
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
-
Nonaktifkan login root dari jarak jauh, ini adalah konfigurasi keamanan yang sangat penting karena mencegah penyerang mengautentikasi dari jarak jauh ke server MySQL sebagai root atau melakukan serangan brute force kata sandi. Otentikasi jarak jauh juga dapat dinonaktifkan sepenuhnya, kita akan melihat bagaimana melakukannya di bagian selanjutnya.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
-
Hapus database pengujian yang dibuat selama proses instalasi server mysql, database ini dibuat untuk tujuan pengujian, sebagai praktik yang baik, disarankan untuk menghapus database ini.
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
-
Muat ulang tabel hak istimewa untuk memastikan bahwa semua perubahan diterapkan dan berlaku.
Anda sekarang memiliki basis yang aman untuk digunakan, di bagian berikutnya, temukan petunjuk untuk mengubah root default nama pengguna dan kata sandi.Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Memodifikasi Pengguna “root”
Secara default, server MySQL telah ditentukan sebelumnya dengan superuser/admin
akun yang memiliki akses ke semua hak istimewa dan fungsionalitas basis data dan pengguna basis data. Dengan kontrol dan akses yang tak tertandingi ini, penting untuk mengunci dan mengamankan akun root karena penyerang biasanya menargetkan akun root di server MySQL karena berpotensi memberikan akses lengkap ke database dan pengguna database.
Langkah pertama dalam mengamankan pengguna “root” adalah mengubah nama pengguna dari root
untuk sesuatu yang lebih pantang menyerah, tujuannya adalah untuk membuat nama pengguna root sulit ditebak atau untuk memaksa penyerang. Setelah itu, disarankan juga untuk mengubah root
sandi akun secara teratur sebagai praktik yang baik.
-
Login ke server MySQL dengan perintah berikut:
sudo mysql -u root
-
Ubah nama pengguna akun “root” dengan menjalankan kueri berikut:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Ubah
root
kata sandi akun untuk sesuatu yang kuat dan sulit ditebak, disarankan untuk menggunakan pembuat kata sandi. Jika Anda mengaktifkan plugin verifikasi kata sandi selama proses pemasangan yang aman, Anda harus memberikan kata sandi yang memenuhi persyaratan kebijakan dalam hal kekuatan.ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Muat ulang tabel hak istimewa untuk memastikan bahwa semua perubahan disimpan dan diaktifkan dengan menjalankan perintah berikut:
flush privileges;
-
Untuk mengkonfirmasi apakah
root
username dan password diubah, jalankan query berikut:use mysql; select user,host,authentication_string from mysql.user;
Ini menampilkan tabel pengguna yang disimpan di bawah database mysql dan harus mencerminkan perubahan yang dibuat.
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| example_user | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
Membuat Pengguna Baru
Praktik keamanan yang baik adalah konsep pemisahan berdasarkan tugas atau peran. Ini berarti bahwa untuk setiap database atau aplikasi yang menggunakan database, buat pengguna baru yang memiliki izin CRUD untuk database tersebut. Ini memastikan bahwa setiap saat, hanya satu pengguna yang memiliki akses ke satu database pada satu waktu dan pengguna tidak dapat mengakses database lain.
-
Buat
Test
database, dengan menjalankan kueri berikut dalam MYSQL:create database Test;
-
Buat pengguna yang bertanggung jawab untuk mengelola database Tes ini:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Tetapkan izin CRUD yang sesuai kepada pengguna untuk
Test
basis data:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
Penting untuk dicatat bahwa hak istimewa ini hanya berlaku untuk
Test
database, jika Anda membuat pengguna untuk aplikasi sepertiphpMyAdmin
, Anda harus memberi penggunaroot
izin. -
Jika Anda memutuskan untuk menghapus pengguna tertentu, jalankan kueri berikut:
drop user '<username>'@'localhost';
-
Muat ulang tabel hak istimewa untuk memastikan perubahan yang dibuat diterapkan dan diaktifkan dengan menjalankan kueri berikut:
flush privileges;
Konfigurasi MySQL Kustom
Anda sekarang dapat menyiapkan konfigurasi khusus yang aman untuk MySQL yang menyediakan opsi konfigurasi keamanan tambahan.
-
File konfigurasi MySQL global terletak di
/etc/mysql/my.cnf
, semua konfigurasi global khusus harus diatur dalam file konfigurasi. -
Konfigurasi khusus perlu ditentukan untuk mysqld (daemon MySQL), opsi yang ditampilkan pada gambar adalah konfigurasi keamanan khusus.
-
Setelah menambahkan konfigurasi khusus, Anda perlu memulai ulang
mysql
layanan untuk memastikan semua perubahan diterapkan.systemctl restart mysql
Audit Keamanan MySQL
Anda sekarang dapat mengaudit keamanan server MySQL dengan menggunakan alat yang disebut MySAT. MySAT melakukan beberapa tes untuk menganalisis konfigurasi database dan kebijakan keamanan. MySAT membantu menilai dan karenanya meningkatkan keamanan database MySQL. MySAT adalah skrip SQL sederhana, mudah dimengerti dan mudah dipelihara. Hasil MySAT adalah output dalam format HTML.
-
Kloning repositori MySAT Github, dengan menjalankan perintah berikut:
git clone https://github.com/meob/MySAT.git
-
Setelah mengkloning direktori, navigasikan ke direktori MySAT, di mana
mysat.sql
file berada dan digunakan bersama dengan server MySQL untuk menampilkan hasilnya ke dalamMySAT.htm
berkas. -
Audit keamanan dengan menjalankan perintah berikut:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Seperti yang ditunjukkan, MySAT memerlukan akses root ke MySQL untuk menjalankan tes yang diperlukan, setelah menjalankan perintah, file MySAT.htm dihasilkan, salin file MySAT.htm dan
mysat.css
file ke server Apache atau NGINX, atau unduh secara lokal denganscp
, sehingga Anda dapat menganalisis hasil audit. -
Hasilnya diformat dalam format yang mudah dibaca dan dipahami, di mana konfigurasi diperiksa dan hasilnya diberi kode warna berdasarkan konfigurasi saat ini dan bagaimana hal itu memengaruhi keamanan server mysql. Misalnya, pemeriksaan konfigurasi yang gagal diberi kode warna oranye dan pemeriksaan yang lulus diberi kode warna hijau.
-
Laporan audit mengungkapkan konfigurasi apa yang perlu diubah atau dimodifikasi dan memberi Anda gambaran tingkat atas tentang keamanan keseluruhan server MySQL.