Jumat, 21 September 2018

Instal dan Secure phpMyAdmin di Ubuntu 18.04

Tags

phpMyAdmin dibuat untuk memudahkan pengguna berinteraksi dengan MySQL melalui antarmuka web. Dalam panduan ini, kita akan membahas cara menginstal dan mengamankan (secure) phpMyAdmin sehingga kita dapat menggunakannya dengan aman untuk mengelola database pada sistem Ubuntu 18.04.

Sebelum memulai panduan ini, kita sebelumnya harus menyelesaikan beberapa langkah awal.

Pertama, disini saya akan menganggap bahwa server kalian memiliki pengguna non-root dengan hak akses sudo, serta firewall yang dikonfigurasi dengan UFW.

Saya juga akan berasumsi bahwa kalian telah menyelesaikan instalasi LAMP (Linux, Apache, MySQL, dan PHP) pada lokal atau server Ubuntu 18.04. Jika belum selesai, kalian dapat mengikuti panduan memasang LAMP di Ubuntu 18.04.

Ada pertimbangan keamanan penting ketika menggunakan perangkat lunak seperti phpMyAdmin, karena:

  • Berkomunikasi langsung dengan instalasi MySQL.
  • Menangani otentikasi menggunakan kredensial MySQL
  • Mengeksekusi dan mengembalikan hasil untuk query SQL.

Dengan alasan tersebut dan karena phpMyAdmnin adalah aplikasi PHP yang digunakan secara luas dan sering ditargetkan untuk serangan, kalian sebaiknya menjalankan phpMyAdmin dengan sistem remote melalui koneksi HTTPS.

Setelah selesai dengan langkah-langkah awal, berikutnya mari kita mulai panduan cara instal dan keamananan phpMyAdmin di Ubuntu 18.04.

Langkah 1 - Memasang phpMyAdmin

Untuk memulai, kita akan menginstal phpMyAdmin dari repositori default Ubuntu.

$ sudo apt update

$ sudo apt install phpmyadmin php-mbstring php-gettext

Jawab beberapa pertanyaan untuk mengonfigurasi pemasangan phpMyAdmin dengan benar.

Note: Ketika muncul prompt, "apache2" disorot namun tidak terpilih. Jika kalian tidak menekan SPACE untuk memilih Apache, penginstal tidak akan memindahkan file yang diperlukan selama instalasi. Tekan SPACE, TAB, dan kemudian ENTER untuk memilih Apache.

Untuk pemilihan server, pilih apache2.
Pilih Ya ketika ditanya apakah akan menggunakan "dbconfig-common" untuk mengatur database.
Pilih dan konfirmasi kata sandi aplikasi MySQL untuk phpMyAdmin.

Proses instalasi akan menambahkan file konfigurasi Apache phpMyAdmin ke dalam direktori /etc/apache2/conf-enabled/, dan dibaca secara otomatis. Satu-satunya hal yang perlu kalian lakukan adalah secara eksplisit mengaktifkan ekstensi PHP mbstring, yang dapat dilakukan dengan mengetik:

$ sudo phpenmod mbstring

Setelah itu, start ulang Apache agar perubahan dikenali:

$ sudo service apache2 restart

phpMyAdmin sekarang selesai diinstal dan dikonfigurasi. Namun, sebelum dapat masuk dan mulai berinteraksi dengan database MySQL, kita harus memastikan bahwa pengguna MySQL memiliki hak istimewa yang diperlukan untuk berinteraksi dengan program.

Langkah 2 - Atur User Authentication dan Privileges

Ketika menginstal phpMyAdmin, secara otomatis akan membuat pengguna database bernama "phpmyadmin" yang melakukan proses mendasar tertentu untuk program tersebut. Daripada masuk sebagai pengguna ini dengan kata sandi administratif yang ditetapkan saat pemasangan, sebaiknya kalian masuk sebagai pengguna MySQL root atau sebagai pengguna yang didedikasikan untuk mengelola basis data melalui antarmuka phpMyAdmin.

Konfigurasi Kata Sandi untuk Akun Root MySQL

Dalam sistem Ubuntu yang menjalankan MySQL 5.7 (dan versi yang lebih baru), pengguna MySQL root diatur untuk mengotentikasi menggunakan plugin "auth_socket" secara default daripada dengan kata sandi. Hal ini ditujukan untuk keamanan dan kegunaan yang lebih besar dalam banyak kasus, tetapi juga dapat menyulitkan ketika kita perlu mengizinkan program eksternal - seperti phpMyAdmin - untuk mengakses pengguna tersebut.

Untuk masuk ke phpMyAdmin sebagai pengguna MySQL root, kalian perlu mengubah metode autentikasinya dari "auth_socket" ke "mysql_native_password" jika belum melakukannya. Untuk melakukan ini, buka prompt MySQL dari terminal:

$ sudo mysql

Selanjutnya, periksa metode otentikasi mana yang digunakan akun pengguna MySQL kalian dengan perintah berikut:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Output

+------------------+-------------------------------------------+-----------------------+-----------+

| user             | authentication_string                     | plugin                | host      |

+------------------+-------------------------------------------+-----------------------+-----------+

| root             |                                           | auth_socket           | localhost |

| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |

| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |

+------------------+-------------------------------------------+-----------------------+-----------+

5 rows in set (0.00 sec)

Dalam contoh ini, kita dapat melihat bahwa pengguna root benar-benar mengautentikasi menggunakan plugin auth_socket. Untuk mengkonfigurasi akun root untuk mengotentikasi dengan kata sandi, jalankan perintah "ALTER USER". Pastikan untuk mengubah kata sandi dengan kata sandi yang kuat:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Kemudian, jalankan FLUSH PRIVILEGES untuk memberi tahu server untuk memuat ulang "grant tables" dan menerapkan perubahan baru:

mysql> FLUSH PRIVILEGES;

Periksa metode autentikasi yang digunakan oleh setiap pengguna untuk memastikan bahwa root tidak lagi diautentikasi menggunakan plugin auth_socket:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Output

+------------------+-------------------------------------------+-----------------------+-----------+

| user             | authentication_string                     | plugin                | host      |

+------------------+-------------------------------------------+-----------------------+-----------+

| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost |

| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |

| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |

| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |

+------------------+-------------------------------------------+-----------------------+-----------+

5 rows in set (0.00 sec)

Sekarang kita dapat melihat dari output bahwa pengguna root akan mengotentikasi menggunakan kata sandi. Kalian sekarang dapat masuk ke antarmuka phpMyAdmin sebagai pengguna root dengan kata sandi yang sudah ditetapkan sebelumnya.

Konfigurasi Kata Sandi untuk Pengguna MySQL Terdedikasi

Sebagai alternatif, kita bisa juga terhubung ke phpMyAdmin dengan menggunakan nama user tertentu. Untuk melakukan ini, buka shell MySQL sekali lagi:

$ sudo mysql

Note: Jika kalian mengaktifkan otentikasi kata sandi, seperti yang dijelaskan di bagian sebelumnya, kalian harus menggunakan perintah yang berbeda untuk mengakses shell MySQL. Berikut ini kita akan menjalankan klien MySQL dengan hak akses pengguna biasa, dan hanya akan mendapatkan hak administrator dalam database dengan mengautentikasi:
mysql -u root -p

Lalu buat pengguna baru dan berikan kata sandi yang kuat:

mysql> CREATE USER 'rama'@'localhost' IDENTIFIED BY 'password';

Kemudian, berikan hak istimewa baru kepada pengguna tersebut. Misalnya, berikan hak istimewa pengguna ke semua tabel dalam database, serta kemampuan untuk menambah, mengubah, dan menghapus hak pengguna, dengan perintah ini:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'rama'@'localhost' WITH GRANT OPTION;

Keluar dari shell MySQL:

mysql> exit

Sekarang kita dapat mengakses antarmuka phpMyAdmin dengan mengunjungi nama domain server atau alamat IP publik yang diikuti oleh /phpmyadmin:

https://nama_domain_atau_alamat_ip/phpmyadmin


Login, baik sebagai root atau dengan nama pengguna dan kata sandi baru yang baru saja kita konfigurasikan.

Saat masuk, kalian akan melihat antarmuka pengguna, yang akan terlihat seperti ini:



Setelah dapat terhubung dan berinteraksi dengan phpMyAdmin, hal terakhir untuk dilakukan adalah memperkuat keamanan sistem untuk melindunginya dari penyerang.

Langkah 3 - Mengamankan Instansi phpMyAdmin

Karena sangat populer, phpMyAdmin adalah target utama untuk penyerang, dan kita harus lebih berhati-hati untuk mencegah akses yang tidak sah. Salah satu cara termudah untuk melakukannya adalah dengan menempatkan gateway di depan seluruh aplikasi dengan menggunakan .htaccess built-in Apache otentikasi dan otorisasi.

Untuk melakukan ini, kita harus terlebih dahulu mengaktifkan penggunaan ".htaccess file override" dengan mengedit file konfigurasi.

$ sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Tambahkan "AllowOverride All" dalam bagian <Directory/usr/share/phpmyadmin> dari file konfigurasi, seperti ini:


    Options FollowSymLinks

    DirectoryIndex index.php

    AllowOverride All

    . . .


Setelah menambahkan baris ini, simpan dan tutup file.

Untuk menerapkan perubahan yang dibuat, restart Apache:

$ sudo service apache2 restart

Sekarang kita telah mengaktifkan penggunaan .htaccess, selanjutnya kita perlu membuat satu file htaccess untuk menerapkan beberapa keamanan. Agar sukses, file harus dibuat dalam direktori aplikasi. Buat file dengan hak akses root dengan mengetik:

$ sudo nano /usr/share/phpmyadmin/.htaccess

Di dalam file ini, masukkan informasi berikut:

AuthType Basic

AuthName "Restricted Files"

AuthUserFile /etc/phpmyadmin/.htpasswd

Require valid-user

Berikut adalah arti masing-masing baris:

  • AuthType Basic: Baris ini menentukan jenis otentikasi yang diimplementasikan. Tipe ini akan menerapkan otentikasi kata sandi menggunakan file kata sandi.
  • AuthName: Mengatur pesan untuk kotak dialog otentikasi sehingga pengguna yang tidak sah tidak akan mendapatkan informasi apa pun tentang apa yang sedang dilindungi.
  • AuthUserFile: Menetapkan lokasi file kata sandi yang akan digunakan untuk otentikasi. Ini harus berada di luar direktori yang sedang dilayani. Kita akan membuat file ini.
  • Require valid-user: Menetapkan bahwa hanya pengguna yang diautentikasi yang harus diberi akses. Inilah yang sebenarnya menghentikan pengguna yang tidak sah masuk.

Setelah selesai, simpan dan tutup file.

Lokasi yang kita pilih untuk file kata sandi adalah /etc/phpmyadmin/.htpasswd. Kita sekarang dapat membuat file ini dan memberikannya initial user dengan utilitas htpasswd:

$ sudo htpasswd -c /etc/phpmyadmin/.htpasswd username


Kalian akan diminta untuk memilih dan mengkonfirmasi kata sandi untuk pengguna yang dibuat. Setelah itu, file dibuat dengan kata sandi hash yang kalian masukkan.

Jika ingin memasukkan pengguna tambahan, kalian harus melakukannya tanpa flag -c, seperti ini:

$ sudo htpasswd /etc/phpmyadmin/.htpasswd tambahuser

Sekarang, ketika kita mengakses subdirektori phpMyAdmin, kalian akan diminta untuk memasukkan nama akun dan kata sandi yang baru saja dikonfigurasikan:

https://nama_domain_atau_alamat_IP/phpmyadmin



Setelah memasukkan otentikasi Apache, kalian akan dibawa ke halaman otentikasi phpMyAdmin biasa untuk memasukkan kredensial MySQL kalian. Pengaturan ini akan menambahkan lapisan keamanan tambahan, yang diinginkan karena sejak awal phpMyAdmin selalu menjadi bagian yang paling rentan keamanannya di masa lalu.

Sampai disini kalian sudah memiliki phpMyAdmin yang sudah dikonfigurasi dan siap untuk digunakan pada server Ubuntu 18.04. Dengan menggunakan phpMyAdmin, kalian dapat dengan mudah membuat basis data, pengguna, tabel, dll., Dan melakukan operasi biasa seperti menghapus dan memodifikasi struktur data.


EmoticonEmoticon