Instalasi phpMyAdmin

Muhammad Fajri
Tuesday, 06 June 2023

Bismillahirrahmanirrahim.

Untuk memudahkan mengelola (me-manage) database server melalui GUI, maka diperlukan sebuah tool agar pengelolaan database tidak harus menggunakan perintah-perintah SQL melalui CLI.

Dalam proses kali ini akan dilakukan instalasi phpMyAdmin sebagai tool administrasi MySQL/MariaDB berbasis web. Pada proses ini juga akan dipaparkan bagaimana mengamankan phpMyAdmin agar terdapat keamanan berlapis karena phpMyAdmin rentan terhadap ancaman keamanan.

Instalasi Manual phpMyAdmin

Update sistem terlebih dahulu:

sudo apt update

Saat mencoba menjalankan perintah instalasi phpMyAdmin, akan didapati error dikarenakan tidak tersedia lagi di repositori, sehingga harus diunduh melalui situs web phpMyAdmin. Unduh file tar.gz pada halaman pengunduhan phpMyAdmin. Versi terbaru saat penulisan artikel ini yaitu 5.2.1.

Pada halaman pengunduhan, terdapat beberapa file arsip dengan ekstensi masing-masing (.zip, .tar.gz, dan .tar.xz) dan nama file arsip dengan label all-languages, english, dan source. Silahkan pilih salah satunya, pada artikel ini dipilih file arsip .tar.gz dengan label all-languages.

Pengunduhan phpMyAdmin bisa langsung memilih salah satu file dan langsung unduh atau melalui perintah terminal dengan bantuan utilitas wget.

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz

Proses pengunduhan:

--2023-06-18 00:18:03--  https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz
Resolving files.phpmyadmin.net (files.phpmyadmin.net)... 143.244.33.157, 89.187.162.154, 143.244.33.172, ...
Connecting to files.phpmyadmin.net (files.phpmyadmin.net)|143.244.33.157|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13041998 (12M) [application/octet-stream]
Saving to: ‘phpMyAdmin-5.2.1-all-languages.tar.gz’

phpMyAdmin-5.2.1-all-l 100%[==========================>]  12.44M   504KB/s    in 35s     

2023-06-18 00:18:40 (366 KB/s) - ‘phpMyAdmin-5.2.1-all-languages.tar.gz’ saved [13041998/13041998]

fajri@fajri-PC:~$

Ekstrak file tar.gz:

tar xvf phpMyAdmin-5.2.1-all-languages.tar.gz

Salin semua isi folder phpMyAdmin yang sudah diekstrak pada direktori /usr/share/ dan ubah namanya menjadi phpmyadmin saja.

sudo mv phpMyAdmin-5.2.1-all-languages/ /usr/share/phpmyadmin

Sampai tahap ini, phpMyAdmin sudah berhasil diinstal. Tetapi, agar dapat diakses melalui web browser dibutuhkan sejumlah perubahan konfigurasi.

Konfigurasi Manual phpMyAdmin

Ketika instalasi dilakukan melalui package manager, maka phpMyAdmin sudah terinstal dengan baik termasuk konfigurasi yang otomatis dilakukan oleh sistem. Namun, instalasi phpMyAdmin dilakukan melalui source file maka harus dilakukan konfigurasi secara manual.

Membuat direktori penyimpanan file sementara (temporary file):

sudo mkdir -p /var/lib/phpmyadmin/tmp

Atur kepemilikan direktori ke www-datauser profile yang menjalankan web server seperti Apache secara default digunakan pada sistem Ubuntu dan Debian:

sudo chown -R www-data:www-data /var/lib/phpmyadmin

Sebelumnya, sudah dilakukan ekstrak folder yang menyertakan contoh file konfigurasi. Buat salinan, dan ubah namanya menjadi config.inc.php.:

sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Buka file dengan teks editor, misalnya nano:

sudo nano /usr/share/phpmyadmin/config.inc.php

Secara default, phpMyAdmin menggunakan metode autentikasi cookie yang memungkinkan login dengan salah satu user valid MariaDB. Pada metode ini, kata sandi pengguna MariaDB disimpan dan dienkripsi dengan algoritma AES (Advanced Encryption Standard) pada cookie sementara. Pada phpMyAdmin menggunakan cipher Blowfish untuk tujuan ini. Cari dan temukan pada file konfigurasi tulisan $cfg['blowfish_secret'] lalu tambahkan string acak sebanyak 32 karakter, (tidak perlu diingat, hanya untuk keperluan internal algoritma AES).

$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTER'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Untuk membuat karakter acak dapat memanfaatkan program pwgen (sudo apt install pwgen). Buat 1 buah string acak sebanyak 32 karakter: pwgen -s 32 1.

Selanjutnya, temukan baris /* User used to manipulate with storage */. Lalu isi pada bagian controluser (user mariaDB) –pma merupakan user khusus yang melakukan tugas administratif tertentu– dan controlpass (kata sandi user MariaDB). Jangan lupa hapus tanda dua garis miring yang ada pada bagian depan baris. Ini dilakukan agar tidak sembarang user yang dapat mengakses database melalui phpMyAdmin.

/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'password';

Skrol ke bawah, pada bagian /* Storage database and tables */ terdapat akses-akses administratif user database pma. Hilangkan tanda dua garis miring (komentar) pada tiap bagian sehingga menjadi:

/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

Tabel-tabel di atas ini belum ada, namun akan segera dibuat.

Terakhir, skrol ke paling bawah dan tambahkan baris berikut. Direktori temporary akan digunakan oleh phpMyAdmin sebagai template cache agar loading halaman lebih cepat.

$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

Simpan dan tutup file (CTRL + X, Y, lalu ENTER).

Selanjutnya, perlu untuk membuat storage tabel dan database phpMyAdmin. Pada instalasi phpMyAdmin, terdapat file dengan nama create_tables.sql. File SQL ini memuat perintah-perintah yang dibutuhkan untuk membuat storage tabel dan database phpMyAdmin agar dapat berfungsi dengan baik.

Jalankan perintah:

sudo mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

Selanjutnya, buat user administratif pma. Buka prompt MariaDB:

sudo mariadb

Buat user pma dsn GRANT izin yang sesuai, pastikan input password sesuai dengan yang ada pada dile config.inc.php.

GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'password';

Untuk mengelola database melalui phpMyAdmin, buat user baru yang memiliki privilege terhadap semua tabel yang ada dalam database dan buat kata sandi yang kuat.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Keluar dari prompt MariaDB:

exit

phpMyAdmin sudah sepenuhnya terinstal dan dikonfigurasi pada server. Tetapi, server Apache belum bisa men-serve aplikasi. Buat file konfigurasi Apache untuk mengatasinya.

Konfigurasi Apache untuk Men-serve phpMyAdmin

Saat instalasi phpMyAdmin melalui repositori, proses instalasi akan membuat file konfigurasi Apache secara otomatis (phpmyadmin.conf) dan disimpan pada direktori /etc/apache2/conf-enabled/. Karena instalasi dilakukan secara manual maka harus membuat filenya sendiri.

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

Lalu tambahkan isi:

# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    <IfModule mod_php5.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
    <IfModule mod_php.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authz_core.c>
        <IfModule mod_authn_file.c>
            AuthType Basic
            AuthName "phpMyAdmin Setup"
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        </IfModule>
        Require valid-user
    </IfModule>
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

Simpan dan tutup file, lalu aktifkan dengan mengetikkan:

sudo a2enconf phpmyadmin.conf

Output:

Enabling conf phpmyadmin.
To activate the new configuration, you need to run:
  systemctl reload apache2

Lalu reload service apache2 agar konfigurasi diterapkan.

sudo systemctl reload apache2

Setelah selesai, phpMyAdmin sudah dapat diakses melalui web browser.

https://<alamat_domain>/phpmyadmin

phpmyadmin_test_deepin

Berikut tampilan phpMyAdmin setelah login.

phpmyadmin_test_deepin_login

Sekarang sudah dapat terkoneksi dan berinteraksi dengan phpMyAdmin, langkah terakhir yaitu memperkuat keamanan sistem agar terlindungi dari penyerang.

Mengamankan phpMyAdmin Lebih Lanjut

Karena phpMyAdmin banyak digunakan dimana-mana sehingga sangat berpotensi menjadi target bagi penyerang, sehingga perlu untuk menambahkan perlindungan akses terautorisasi. Salah satu cara termudah yaitu menempatkan sebuah gateway di depan semua aplikasi menggunakan fungsionalitas autorisasi dan autentikasi Apache yaitu .htaccess.

Edit file konfigurasi Apache:

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

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

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All

    <IfModule mod_php5.c>
    ...

Simpan dan tutup file. Restart service Apache:

sudo systemctl restart apache2

Sekarang .htaccess sudah diaktifkan. Lanjutkan, dengan membuat file .htaccess. Agar berhasil, file ini harus dibuat di dalam direktori aplikasi:

sudo nano /usr/share/phpmyadmin/.htaccess

Tambahkan baris:

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

Lokasi yang dipilih untuk file password yaitu /usr/share/phpmyadmin/.htpasswd. Buat file dengan utilitas htpasswd dan sebuah user:

sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd root

Output:

New password: 
Re-type new password: 
Adding password for user root

Untuk membuat user tambahan, jalankan seperti perintah di atas tanpa -c:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Restart service Apache agar autentikasi tambahan diterapkan:

sudo systemctl restart apache2

Sekarang, saat mengakses phpMyAdmin melalui web browser, akan dihadapkan tampilan login tambahan (autentikasi Apache) sebelum dihadapkan pada halaman login phpMyAdmin. Pengaturan ini menambahkan layer keamanan tambahan yang diinginkan karena phpMyAdmin rawan terhadap kerentanan.

phpmyadmin_test_deepin_apache_login

Jika tidak dapat melakukan autentikasi dengan data yang benar, saat menekan tombol Cancel akan dihadapkan pada halaman error Unauthorized.

phpmyadmin_test_deepin_apache_login_error

Akhirnya sampai juga di bagian akhir artikel ini. Terima kasih sudah membaca artikel ini sampai bagian akhir.

Demikian langkah-langkah instalasi phpMyAdmin ini. Semoga bermanfaat. Jangan lupa di-share.

Referensi