Cara Install phpMyadmin di Ubuntu 20.04
Mengelola database secara manual menggunakan command line interface tentunya tidaklah mudah dan rawan kesalahan.
Untuk itu hadirlah phpMyadmin, sebuah perangkat lunak opensource yang berguna sebagai tools administrasi bagi database MySQL dan MariaDB. Sesuai dengan namanya, phpMyadmin ditulis dengan bahasa php, dan tentunya bersifat web-based application.
Pada tulisan kali ini akan membahas bagaimana menginstall phpMyadmin pada Ubuntu 20.04.
Beberapa prasyarat untuk menginstall phpmyadmin :
- Webserver (pada artikel ini akan menggunakan NGINX)
- PHP 7.1.3 atau yang terbaru
- Relational Database seperti MySQL dan MariaDB
Penulis asumsikan pembaca sudah memenuhi prasyarat tersebut, namun jika belum silahkan ikuti tutorialnya dengan klik pada masing-masing prasyarat di atas.
Langkah 1 : Menginstall phpmyadmin
Silahkan jalankan perintah berikut untuk menginstall package phpMyadmin.
~$ sudo apt install phpmyadmin -y
Saat proses instalasi berjalan, akan muncul prompt seperti ini. Pada bagian konfigurasi webserver, pilihan NGINX tidak tersedia, oleh karena itu silahkan pilih Ok untuk melanjutkan.
Selanjutnya pada bagian konfigurasi dbconfig-common
silahkan pilih yes untuk menyimpan konfigurasi aplikasi phpMyAdmin.
Pada bagian konfigurasi password silahkan kosongkan saja dan pilih Ok. Password ini adalah password yang akan digunakan sebagai credential phpmyadmin. Penulis tidak akan menggunakan credential tersebut.
Tunggu proses instalasinya hingga selesai.
Langkah 2 : Konfigurasi NGINX
Agar bisa mengakses aplikasi phpmyadmin dari web browser, kita akan membutuhkan sedikit konfigurasi pada virtual host
nginx dan root direktori web server. Jalankan perintah berikut ini untuk membuat symbolic
link ke root direktori web server.
~$ sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin
Selanjutnya adalah mengkonfigurasi location
blok untuk url aplikasi phpmyadmin yang mau diakses. Silahkan edit file konfigurasi virtual host nginx.
~$ sudo vim /etc/nginx/sites-available/default
Di dalam server block tambahkan baris konfigurasi seperti di bawah ini.
location /phpmyadmin {
alias /var/www/phpmyadmin;
#handle .php
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
Dan jangan lupa untuk menambahkan index.php
pada directive index
nginxnya. Setelah semua konfigurasi sudah dilakukan, silahkan restart service nginx. Kemudian akses aplikasi phpmyadmin dengan format ip_public/phpmyadmin
. Kemudian akan muncul tampilan login phpmyadmin. Login phpMyAdmin menggunakan credintial yang sama dengan MySQL, sehingga kita bisa login menggunakan user dan password yang digunakan untuk login ke MySQL.
Langkah 3 : Mengamankan Akses phpMyAdmin
Karena aplikasi phpMyAdmin adalah tools adminstrasi database yang sudah pasti berinteraksi langsung dengan database, maka akan sangat rentan bila aksesnya sangat terbuka di internet. Oleh karena itu kita akan memerlukan sistem keamanan untuk melindungi akses langsung ke database.
Cara yang cukup ampuh adalah dengan membuat url/path-nya sulit ditemukan. Keyword seperti /phpmyadmin
, /pma
, /admin
, /mysql
atau semacamnya sangat familiar untuk disusupi. Kita bisa menggunakan nama yang unik agar bot atau attacker sulit untuk menjangkau aplikasi phpMyAdmin.
Caranya cukup mudah, dengan mengganti location_match
pada blok location
nginx yang sudah dikonfigurasi sebelumnya. Misalnya location /phpmyadmin
kita ganti menjadi location /gudangdata
. Sehingga konfigurasinya akan menjadi seperti ini.
location /gudangdata {
alias /var/www/phpmyadmin;
#handle .php
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
Kemudian coba buka kembali aplikasi phpMyAdmin, dan tes akses dengan menggunakan url/path yang baru.
Setelah membuatnya sulit ditemukan, kita akan menghapus akses root
terhadap login phpMyAdmin. Ini untuk mencegah privileged tidak terbatas yang dimiliki oleh root
. Untuk melakukannya kita akan menambah satu file konfigurasi yang ada di /etc/phpmyadmin
~$ sudo vim /etc/phpmyadmin/conf.d/pma_secure.php
Silahkan copy script berikut dan pastekan di dalam file konfigurasi.
<?php
$cfg['blowfish_secret'] = '[STRING]';
$i=0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['AllowRoot'] = false;
?>
Pada bagian [STRING]
silahkan ganti dengan 32 karakter random. Simpan konfigurasi filenya, dan akses kembali aplikasi phpMyAdmin dengan login root
. Ketika mengakses dengan root
akan muncul error Access denied!
.
Selanjutnya kita bisa menambahkan layer autentikasi tambahan. Jadi ketika attacker akan mencapai halaman login phpMyAdmin akan terlebih dahulu diminta melakukan autentikasi HTTP dengan memasukkan nama pengguna dan kata sandi yang valid. Langkah awal yang dilakukan adalah generate hash
password. Masukkan perintah berikut dan isi password pada prompt yang muncul.
openssl passwd
Output yang menghasilkan password yang terenkripsi berupa karakter acak.
Kemudian buat sebuah file konfigurasi untuk menyimpan user dan password login.
~$ sudo vim /etc/nginx/pma_pass
Masukkan user dan dan password yang sudah terenkripsi dengan format seperti di bawah ini.
user:encrypted_pass
Selanjutnya tambahkan 2 baris berikut di dalam location block /gudangdata
:
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
Sehingga konfigurasinya akan seperti berikut ini.
location /gudangdata {
alias /var/www/phpmyadmin;
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
#handle .php
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
Simpan konfigurasinya kemudian restart service nginx. Setelah itu akses kembali aplikasi phpMyAdmin. Akan muncul pop-up login.
Silahkan login menggunakan user yang sudah tersimpan di dalam konfigurasi file, untuk passwordnya masukkan dengan password yang diinput ketika menjalankan perintah openssl passwd
(bukan hasil generate).
Metode berikutnya yang bisa digunakan adalah membatasi akses dengan hanya mengizinkan host/IP yang terautorisasi. Buka kembali konfigurasi virtual host dan kemudian tambah directive berikut di dalam location block
, kemudian simpan konfigurasinya dan restart service nginx.
deny all;
Coba akses kembali phpMyAdmin, maka akan muncul error 403 Forbidden
.
Error ini menunjukkan bahwa resource yang dituju oleh sebuah host/IP tidak mendapatkan permission karena host/IP-nya tidak terautorisasi. Untuk menambahkan autorisasinya kita akan menggunakan directive allow
pada konfigruasi virtual host nginx dengan format seperti berikut.
allow [IP_Adrress/Host];
Berikut contoh lengkap konfigurasi location block
di virtual host setelah menambahkan IP/host yang terautorisasi.
location /gudangdata{
alias /var/www/phpmyadmin;
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
allow [IP_Adrress/Host];
deny all;
#handle .php
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
Ganti [IP_Address/Host]
dengan IP yang ingin diizinkan.
Setelah semuanya selesai silahkan simpan konfigurasinya dan restart service nginx dan coba akses kembali phpMyAdmin-nya. Dengan demikian kita bisa membatasi akses publik ke dalam phpMyAdmin dan tentunya bisa mencegah serangan ke dalam database.
Demikian untuk cara install phpMyAdmin dan juga cara mengamankannya dari akses publik.