Tutorial

Cara Menginstal dan Mengamankan phpMyAdmin pada Ubuntu 20.04

UbuntuApachePHPApplicationsUbuntu 20.04

Versi tutorial sebelumnya ditulis oleh Brennan Bearnes.

Pengantar

Walaupun banyak pengguna membutuhkan fungsionalitas dari sistem manajemen basis data seperti MySQL, mereka mungkin tidak merasa nyaman berinteraksi dengan sistem hanya dari prompt MySQL.

phpMyAdmin diciptakan sehingga pengguna dapat berinteraksi dengan MySQL melalui antarmuka web. Dalam panduan ini, kita akan membahas cara menginstal dan mengamankan phpMyAdmin sehingga Anda dapat menggunakannya secara aman untuk mengelola basis data Anda pada sistem Ubuntu 20.04.

Prasyarat

Agar bisa menyelesaikan panduan ini, Anda membutuhkan:

Selain itu, ada pertimbangan keamanan penting saat menggunakan perangkat lunak seperti phpMyAdmin, karena perangkat lunak tersebut:

  • Berkomunikasi secara langsung dengan instalasi MySQL Anda
  • Menangani autentikasi dengan menggunakan kredensial MySQL
  • Menjalankan dan memberikan hasil untuk kueri SQL arbitrer

Karena alasan-alasan ini, dan karena aplikasi PHP yang digunakan secara luas sering menjadi target penyerangan, Anda jangan pernah menjalankan phpMyAdmin pada sistem jarak jauh melalui koneksi HTTP biasa.

Jika Anda tidak memiliki domain yang sudah dikonfigurasi dengan sertifikat SSL/TLS, Anda dapat mengikuti panduan mengamankan Apache dengan Let’s Encrypt pada Ubuntu 20.04 ini. Ini akan mengharuskan Anda untuk mendaftarkan nama domain, menciptakan catatan DNS untuk server Anda, dan menyiapkan Hos Virtual Apache.

Langkah 1 — Menginstal phpMyAdmin

Anda dapat menggunakan APT untuk menginstal phpMyAdmin dari repositori Ubuntu asali.

Sebagai pengguna sudo non-root Anda, perbarui indeks paket server Anda:

  • sudo apt update

Setelah itu, Anda dapat menginstal paket phpmyadmin. Bersama dengan paket ini, dokumentasi resmi juga menganjurkan Anda menginstal beberapa ekstensi PHP ke server Anda untuk mengaktifkan fungsionalitas tertentu dan meningkatkan kinerja.

Jika Anda mengikuti prasyarat tutorial tumpukan LAMP, beberapa dari modul-modul ini akan telah terinstal bersama dengan paket php. Namun, Anda disarankan untuk menginstal paket-paket ini juga:

  • php-mbstring: Modul untuk mengelola string non-ASCII dan mengubah string menjadi pengodean yang berbeda-beda
  • php-zip: Ekstensi ini mendukung pengunggahan berkas .zip ke phpMyAdmin
  • php-gd: Mengaktifkan dukungan untuk Pustaka Grafis GD
  • php-json: Menyediakan PHP dengan dukungan untuk serialisasi JSON
  • php-curl: Mengizinkan PHP untuk berinteraksi dengan berbagai jenis server menggunakan protokol yang berbeda-beda

Jalankan perintah berikut untuk menginstal paket-paket ini ke sistem Anda. Namun, harap dicatat, bahwa proses instalasi mengharuskan Anda untuk membuat beberapa pilihan untuk mengonfigurasi phpMyAdmin dengan benar. Kita akan membahas opsi-opsi ini segera:

  • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Berikut ini adalah opsi yang Anda harus pilih saat diminta untuk mengonfigurasi instalasi Anda dengan benar:

  • Untuk pilihan server, pilih apache2 Peringatan: Ketika prompt muncul, “apache2” disorot, tetapi tidak dipilih. Jika Anda tidak menekan bilah SPACE untuk memilih Apache, penginstal tidak akan memindahkan berkas yang diperlukan selama instalasi. Tekan SPACE, TAB, lalu ENTER untuk memilih Apache.
  • Pilih Yes saat Anda ditanya apakah ingin menggunakan dbconfig-common untuk menyiapkan basis data
  • Lalu, Anda akan diminta untuk memilih dan mengonfirmasi kata sandi aplikasi MySQL untuk phpMyAdmin

Catatan: Dengan asumsi Anda telah menginstal MySQL dengan mengikuti Langkah 2 dari tutorial prasyarat tumpukan LAMP, Anda mungkin telah memutuskan untuk mengaktifkan plugin Validate Password. Saat penulisan dokumen ini, mengaktifkan komponen ini akan memicu kesalahan saat Anda mencoba mengatur kata sandi untuk pengguna phpmyadmin:

Kesalahan validasi kata sandi phpMyAdmin

Untuk menyelesaikan ini, pilih opsi abort untuk menghentikan proses instalasi. Lalu, buka prompt MySQL Anda:

  • sudo mysql

Atau, jika Anda mengaktifkan autentikasi kata sandi untuk pengguna MSQL root, jalankan perintah ini lalu masukkan kata sandi Anda saat diminta:

  • mysql -u root -p

Dari prompt, jalankan perintah berikut untuk menonaktifkan komponen Validate Password. Perhatikan bahwa ini tidak benar-benar akan menghapus instalasinya, tetapi hanya menghentikan komponen dimuat pada server MySQL Anda:

  • UNINSTALL COMPONENT "file://component_validate_password";

Setelah itu, Anda dapat menutup klien MySQL:

  • exit

Lalu, coba instal paket phpmyadmin lagi dan proses akan bekerja seperti yang diharapkan:

  • sudo apt install phpmyadmin

Setelah phpMyAdmin terinstal, Anda dapat membuka prompt MySQL sekali lagi dengan sudo mysql atau mysql -u root -u -p lalu jalankan perintah berikut untuk mengaktifkan kembali komponen Validate Password:

  • INSTALL COMPONENT "file://component_validate_password";

Proses instalasi ini menambahkan berkas konfigurasi phpMyAdmin Apache ke dalam direktori /etc/apache2/conf-enabled/, di mana berkas konfigurasi tersebut terbaca secara otomatis. Untuk menyelesaikan konfigurasi Apache dan PHP untuk bekerja dengan phpMyAdmin, tugas yang tersisa dalam bagian tutorial ini adalah untuk secara eksplisit mengaktifkan ekstensi PHP mbstring, yang dapat Anda lakukan dengan mengetik:

  • sudo phpenmod mbstring

Setelah itu, mulai ulang Apache supaya perubahan Anda dapat dikenali:

  • sudo systemctl restart apache2

phpMyAdmin sekarang sudah terinstal dan dikonfigurasi untuk bekerja dengan Apache. Namun, sebelum Anda dapat log masuk dan mulai berinteraksi dengan basis data MySQL Anda, Anda perlu memastikan bahwa pengguna MySQL Anda memiliki privilese yang dibutuhkan untuk berinteraksi dengan program ini.

Langkah 2 — Menyesuaikan Autentikasi dan Privilese Pengguna

Saat Anda menginstal phpMyAdmin ke server Anda, proses ini secara otomatis menciptakan pengguna basis data yang disebut phpmyadmin, yang menjalankan proses mendasar tertentu untuk program. Alih-alih log masuk sebagai pengguna dengan kata sandi administratif yang Anda atur selama instalasi, Anda disarankan untuk log masuk sebagai pengguna MYSQL root atau sebagai pengguna yang dikhususkan untuk mengelola basis data melalui antarmuka phpMyAdmin.

Mengonfigurasi Akses Kata Sandi untuk Akun Root MySQL

Dalam sistem Ubuntu yang menjalankan MySQL 5.7 (dan versi lebih baru), pengguna MySQL root ditetapkan untuk melakukan autentikasi dengan menggunakan plugin auth_socket secara asali alih-alih dengan kata sandi. Ini mengizinkan keamanan dan kebergunaan yang lebih besar dalam banyak kasus, tetapi juga dapat memperumit keadaan saat Anda perlu untuk mengizinkan program eksternal — seperti phpMyAdmin — untuk mengakses pengguna.

Untuk log masuk ke phpMyAdmin sebagai pengguna MySQL root, Anda perlu mengganti metode autentikasi dari auth_socket menjadi salah satu metode yang memanfaatkan kata sandi, jika Anda belum melakukan itu. Untuk melakukan ini, buka prompt MySQL dari terminal Anda:

  • sudo mysql

Selanjutnya, periksa metode autentikasi mana yang masing-masing akun pengguna MySQL Anda gunakan dengan perintah berikut:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

Pada contoh ini, Anda dapat melihat bahwa pengguna root memang mengautentikasi dengan menggunakan plugin auth_socket. Untuk mengonfigurasi akun root agar mengautentikasi dengan kata sandi, jalankan perintah ALTER USER berikut. Pastikan untuk mengubah password menjadi kata sandi yang kuat pilihan Anda:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Catatan: Pernyataan ALTER USER sebelumnya telah menetapkan pengguna MYSQL root untuk mengautentikasi dengan plugin caching_sha2_password. Sesuai dokumentasi MySQL resmi, caching_sha2_password adalah plugin autentikasi MySQL yang lebih disukai, karena plugin ini menyediakan enkripsi kata sandi yang lebih aman daripada mysql_native_password yang lebih tua tetapi masih digunakan secara luas.

Namun, beberapa versi PHP tidak berfungsi secara andal dengan caching_sha2_password. PHP telah melaporkan bahwa isu ini sudah diperbaiki pada PHP 7.4, tetapi jika Anda menjumpai kesalahan saat mencoba log masuk ke phpMyAdmin nantinya, Anda mungkin ingin mengatur root untuk mengautentikasi dengan mysql_native_password sebagai gantinya:

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

Lalu, periksa lagi metode autentikasi yang digunakan oleh setiap pengguna Anda untuk mengonfirmasi bahwa root tidak lagi mengautentikasi dengan menggunakan plugin auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

Anda dapat melihat dari keluaran ini bahwa pengguna root akan mengautentikasi dengan menggunakan kata sandi. Anda kini dapat log masuk ke antarmuka phpMyAdmin sebagai pengguna root Anda dengan kata sandi yang Anda sudah atur untuk itu di sini.

Mengonfigurasi Akses Kata Sandi untuk Pengguna MySQL Khusus

Selain itu, sebagian orang mungkin menganggap bahwa terhubung ke phpMyAdmin dengan pengguna khusus terasa lebih cocok dengan alur kerja mereka. Untuk melakukan ini, buka shell MySQL sekali lagi:

  • sudo mysql

Jika Anda memiliki autentikasi kata sandi yang diaktifkan untuk pengguna root Anda, seperti yang dijelaskan di bagian sebelumnya, Anda perlu menjalankan perintah berikut dan memasukkan kata sandi Anda saat diminta agar terhubung:

  • mysql -u root -p

Dari sana, ciptakan pengguna baru dan beri kata sandi yang kuat:

  • CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Catatan: Sekali lagi, tergantung versi PHP yang telah Anda instal, Anda mungkin ingin mengatur pengguna baru Anda untuk mengautentikasi dengan mysql_native_password alih-alih caching_sha2_password:

  • ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Lalu, beri privilese yang sesuai kepada pengguna baru Anda. Sebagai contoh, Anda dapat memberikan privilese kepada pengguna untuk semua tabel di dalam basis data, serta kekuasaan untuk menambah, mengubah, dan menghapus privilese pengguna, dengan perintah ini:

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Setelah itu, keluarlah dari shell MySQL:

  • exit

Anda kini dapat mengakses antarmuka web dengan mengunjungi nama domain atau alamat IP publik server Anda yang diikuti dengan /phpmyadmin:

https://your_domain_or_IP/phpmyadmin

Layar log masuk phpMyAdmin

Lakukan log masuk ke antarmuka, baik sebagai root atau dengan nama pengguna dan kata sandi baru yang baru saja Anda konfigurasikan.

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

Antarmuka pengguna phpMyAdmin

Karena Anda sekarang dapat terhubung dan berinteraksi dengan phpMyAdmin, yang tersisa hanyalah memperkuat keamanan sistem Anda untuk melindunginya dari penyerang.

Langkah 3 — Mengamankan Instans phpMyAdmin Anda

Karena sangat umum digunakan di mana-mana, phpMyAdmin adalah target populer bagi penyerang, dan Anda harus lebih berhati-hati untuk mencegah akses yang tidak sah. Salah satu cara melakukan ini adalah dengan menempatkan gateway di depan seluruh aplikasi dengan menggunakan fungsionalitas autentikasi dan otorisasi .htaccess bawaan dari Apache.

Untuk melakukan ini, Anda harus terlebih dahulu mengaktifkan penggunaan dari penimpaan berkas .htaccess dengan mengedit berkas konfigurasi Apache dari instalasi phpMyAdmin Anda.

Gunakan editor teks khusus yang Anda sukai untuk mengedit berkas phpmyadmin.conf yang telah ditempatkan di dalam direktori konfigurasi Apache Anda. Di sini, kita akan menggunakan nano:

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

Tambahkan arahan AllowOverride All di dalam bagian <Directory /usr/share/phpmyadmin> dari berkas konfigurasi, seperti ini:

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

Saat Anda telah menambahkan baris ini, simpan dan tutup berkas. Jika Anda menggunakan nano untuk mengedit berkas, lakukan itu dengan menekan CTRL + X, Y, lalu ENTER.

Untuk menerapkan perubahan yang Anda buat, mulai ulang Apache:

  • sudo systemctl restart apache2

Karena sekarang Anda telah mengaktifkan penggunaan berkas .htaccess untuk aplikasi Anda, Anda perlu menciptakan satu berkas untuk benar-benar menerapkan keamanan.

Agar ini berhasil, berkas tersebut harus diciptakan di dalam direktori aplikasi. Anda dapat menciptakan berkas yang diperlukan dan membukanya di dalam editor teks Anda dengan privilese root dengan mengetik:

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

Dalam berkas ini, masukkan informasi berikut ini:

/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Berikut ini adalah makna dari masing-masing baris ini:

  • AuthType Basic: Baris ini menentukan tipe autentikasi yang Anda sedang terapkan. Jenis ini akan menerapkan autentikasi kata sandi dengan menggunakan berkas kata sandi.
  • AuthName: Ini menetapkan pesan untuk kotak dialog autentikasi. Anda harus menjaga ini tetap generik sehingga pengguna yang tidak sah tidak akan mendapatkan informasi tentang apa yang dilindungi.
  • AuthUserFile: Ini menetapkan lokasi berkas kata sandi yang akan digunakan untuk autentikasi. Ini harus berada di luar direktori yang sedang dilayani. Kita akan segera membuat berkas ini.
  • Require valid-user: Ini menentukan bahwa hanya pengguna terautentikasi yang diberi akses ke sumber daya ini. Inilah yang sebenarnya menghentikan masuknya pengguna yang tidak sah.

Setelah Anda selesai, simpan dan tutup berkas.

Lokasi yang Anda sudah pilih untuk berkas kata sandi Anda adalah /etc/phpmyadmin/.htpasswd. Anda kini dapat menciptakan berkas ini dan memberikannya kepada pengguna awal dengan utilitas htpasswd:

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

Anda akan diminta untuk memilih dan mengonfirmasi kata sandi untuk pengguna yang Anda buat. Setelah itu, berkas dibuat dengan kata sandi yang telah melalui proses hash yang Anda masukkan.

Jika Anda ingin memasukkan pengguna tambahan, Anda perlu melakukannya tanpa bendera -c, seperti ini:

  • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Sekarang, saat Anda mengakses subdirektori phpMyAdmin Anda, Anda akan diminta nama akun dan kata sandi tambahan yang Anda baru saja konfigurasikan:

https://domain_name_or_IP/phpmyadmin

Kata sandi apache phpMyAdmin

Setelah memasukkan autentikasi Apache, Anda akan dibawa ke laman autentikasi phpMyAdmin reguler untuk memasukkan kredensial MySQL Anda. Dengan menambahkan set kredensial non-MySQL ekstra, Anda memberikan basis data Anda suatu lapisan keamanan tambahan. Ini adalah sesuatu yang baik karena sejak dulu phpMyAdmin rentan terhadap ancaman keamanan.

Kesimpulan

Anda seharusnya kini telah memiliki phpMyAdmin yang terkonfigurasi dan siap digunakan pada server Ubuntu 20.04 Anda. Menggunakan antarmuka ini, Anda dapat menciptakan basis data, pengguna, dan tabel, serta melakukan operasi biasa seperti menghapus serta memodifikasi struktur dan data.

Creative Commons License