phpMyAdmin adalah tools yang free dan open source untuk mengelola server MySQL dan MariaDB melalui antarmuka berbasis web.

Dengan phpMyAdmin, Anda dapat membuat dan mengelola database dan pengguna, menjalankan statement SQL, mengimpor dan mengekspor data, dan melakukan aktivitas basis data seperti, membuat, menghapus, tables, columns, indeks, izin, dan banyak lagi.

phpMyAdmin adalah salah satu alat administrasi yang paling populer dan paling banyak digunakan, terutama untuk layanan web hosting.

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara menginstal dan mengamankan phpMyAdmin pada server CentOS 8.

Persyaratan

Instal LAMP Server

Pertama, Anda harus menginstal Apache, MariaDB, PHP dan library PHP lainnya ke server. Anda dapat menginstal semuanya dengan perintah berikut:

dnf install httpd mariadb-server php php-pdo php-pecl-zip php-json php-common php-fpm php-mbstring php-cli php-mysqlnd php-json php-mbstring wget unzip

Setelah semua paket diinstal, mulai layanan Apache dan MariaDB dan aktifkan untuk memulai setelah sistem reboot dengan perintah berikut:

systemctl start httpd
 systemctl start mariadb
 systemctl enable httpd
 systemctl enable mariadb

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Konfigurasi MariaDB

Mulai dengan menjalankan script mysql_secure_installation untuk melakukan peningkatan keamanan dasar:

mysql_secure_installation

Perintah ini akan mengubah kata sandi root, menghapus pengguna anonim, melarang login root dari jarak jauh dan menghapus database pengujian. Jawab pertanyaan seperti yang ditunjukkan di bawah ini dan pastikan untuk memilih kata sandi yang aman untuk pengguna root:

Enter current password for root (enter for none):
 Set root password? [Y/n] N
 Remove anonymous users? [Y/n] y
 Disallow root login remotely? [Y/n] y
 Remove test database and access to it? [Y/n] y
 Reload privilege tables now? [Y/n] y

Setelah selesai, Anda akan melihat Output berikut

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

pada poin ini, Konfigurasi untuk mengamankan MariaDB telah selesai.

Install phpMyAdmin

Secara default, phpMyAdmin tidak tersedia di repositori default CentOS 8. Jadi, Anda perlu mengunduh versi terbaru phpMyAdmin dari situs web resmi mereka. Anda dapat mengunduhnya dengan perintah berikut:

wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip

Pada saat penulisan, versi phpMyadmin yang tersedia adalah versi 4.9.2, kunjungi halaman resmi phpMyAdmin untuk melihat versi baru yang tersedia.

Setelah diunduh, unzip file yang diunduh dengan perintah berikut:

unzip phpMyAdmin-4.9.2-all-languages.zip

Selanjutnya, pindahkan konten yang diekstraksi ke direktori /usr/share seperti yang ditunjukkan di bawah ini:

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

Selanjutnya, masuk ke direktori /usr/share/phpmyadmin dan ganti nama file config.sample.inc.php menjadi config.inc.php:

cd /usr/share/phpmyadmin
 mv config.sample.inc.php config.inc.php

Selanjutnya, buka file dengan editor teks favorit Anda seperti yang ditunjukkan di bawah ini:

sudo nano config.inc.php

Ubah baris berikut:

$cfg['blowfish_secret'] = 'gunakan-password-generator-sebanyak-16-karakter';

disarankan untuk menggunakan password generator untuk mengisi baris di atas, Anda tidak perlu menghafal input kata dari blowfish_secret ini.

Simpan dan tutup file setelah Anda selesai. Kemudian, impor create_tables.sql dengan perintah berikut:

mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p

Berikan kata sandi root Anda saat diminta untuk mengimpor tabel.

Selanjutnya, buat direktori tmp untuk phpmyadmin dan berikan izin yang tepat:

sudo mkdir /usr/share/phpmyadmin/tmp
sudo chown -R apache:apache /usr/share/phpmyadmin
sudo chmod 777 /usr/share/phpmyadmin/tmp

Konfigurasikan Apache untuk phpMyAdmin

Selanjutnya, Anda perlu membuat file konfigurasi virtual host Apache untuk phpMyAdmin. Anda dapat membuatnya dengan perintah berikut:

sudo nano /etc/httpd/conf.d/phpmyadmin.conf

Tambahkan baris berikut:

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny> 
      Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpmyadmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

Simpan dan tutup file setelah Anda selesai. Kemudian restart Apache dengan perintah berikut:

systemctl restart httpd

Anda dapat memeriksa status Apache dengan perintah berikut:

systemctl status httpd

Anda akan melihat output berikut:

? httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           ??php-fpm.conf
   Active: active (running) since Wed 2019-12-18 01:07:52 EST; 6s ago
     Docs: man:httpd.service(8)
 Main PID: 5636 (httpd)
   Status: "Started, listening on: port 80"
    Tasks: 213 (limit: 25044)
   Memory: 28.7M
   CGroup: /system.slice/httpd.service
           ??5636 /usr/sbin/httpd -DFOREGROUND
           ??5639 /usr/sbin/httpd -DFOREGROUND
           ??5640 /usr/sbin/httpd -DFOREGROUND
           ??5641 /usr/sbin/httpd -DFOREGROUND
           ??5642 /usr/sbin/httpd -DFOREGROUND

Dec 18 01:07:52 centos8 systemd[1]: Stopped The Apache HTTP Server.
Dec 18 01:07:52 centos8 systemd[1]: Starting The Apache HTTP Server...
Dec 18 01:07:52 centos8 httpd[5636]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::200:d0>
Dec 18 01:07:52 centos8 httpd[5636]: Server configured, listening on: port 80
Dec 18 01:07:52 centos8 systemd[1]: Started The Apache HTTP Server.

Konfigurasikan SELinux dan Firewall

Secara default, SELinux diaktifkan di CentOS 8. Jadi Anda perlu mengkonfigurasi SELinux agar phpMyAdmin berfungsi dengan benar.

Pertama, instal paket policycoreutils-python-utils untuk mengelola SELinux environment dengan perintah berikut:

dnf install policycoreutils-python-utils

Selanjutnya, aktifkan akses ke direktori /usr/share/phpmyadmin dengan perintah berikut:

semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/phpmyadmin/'
 semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/phpmyadmin/tmp(/.*)?"

Sekarang recurse semua file di direktori phpmyadmin Anda dengan menjalankan perintah berikut:

restorecon -Rv '/usr/share/phpmyadmin/'

Selanjutnya, Anda harus membuat rule di firewall untuk mengizinkan layanan HTTP dari jaringan eksternal. Anda dapat mengizinkannya lalu lintas dengan perintah berikut:

firewall-cmd --permanent --add-service=http
 firewall-cmd --reload

phpMyAdmin sekarang diinstal dan dikonfigurasi. Sekarang saatnya untuk memeriksa apakah konfigurasi tersebut berfungsi atau tidak.

Buka browser web Anda dan ketik URL http://serverIP/phpmyadmin. Anda akan diarahkan ke halaman berikut:

PHPMyAdmin Login

Amankan phpMyAdmin (OPSIONAL)

Pada titik ini, instance phpMyAdmin berfungsi dengan benar. Namun, mengamankan instance phpMyAdmin Anda dari dunia luar merupakan tugas penting bagi Anda. Di bagian ini, kami akan menunjukkan kepada Anda bagaimana cara mengamankan instance phpMyAdmin.

Izinkan phpMyAdmin dari IP Tertentu

Pertama, Anda perlu mengkonfigurasi phpMyAdmin Anda agar hanya dapat diakses dari alamat IP koneksi rumah Anda. Dengan begini, phpMyAdmin tidak akan dapat di akses selain dari IP yang telah Anda tentukan.

Anda dapat mengonfigurasinya dengan mengedit file

nano /etc/httpd/conf.d/phpmyadmin.conf

Temukan baris berikut:

     <RequireAny>
       Require all granted
     </RequireAny>

Dan, ganti dengan yang berikut ini:

<RequireAny>
    Require ip Alamat_IP_Masukkan_di_Sini
    Require ip ::1
</RequireAny>

Simpan dan tutup file setelah Anda selesai.

Konfigurasikan Otentikasi Tambahan

Merupakan ide bagus untuk melindungi direktori phpmyadmin Anda dengan membuat otentikasi dasar berupa kata sandi, tentunya opsi ini mengurangi serangan brute-force.

Untuk melakukannya, buat file otentikasi baru menggunakan tool htpasswd seperti yang ditunjukkan di bawah ini:

mkdir /etc/phpmyadmin
 htpasswd -c /etc/phpmyadmin/.htpasswd admin

Anda akan diminta untuk memberikan kata sandi admin Anda seperti yang ditunjukkan di bawah ini:

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

Selanjutnya, Anda perlu mengkonfigurasi Apache untuk menggunakan file .htpasswd. Anda dapat melakukan ini dengan mengedit file /etc/httpd/conf.d/phpmyadmin.conf.

nano /etc/httpd/conf.d/phpmyadmin.conf

Tambahkan baris berikut di bawah baris “AddDefaultCharset UTF-8“:

    Options  +FollowSymLinks +Multiviews +Indexes
    AllowOverride None
    AuthType basic
    AuthName "Authentication Required"
    AuthUserFile /etc/phpmyadmin/.htpasswd
    Require valid-user

Simpan file dan restart layanan Apache agar perubahan diterapkan:

systemctl restart httpd

Akses phpMyAdmin

Sekarang, instance phpMyAdmin Anda diamankan dengan lapisan keamanan ekstra. Buka browser web Anda dan ketik URL http://server-ip/phpmyadmin. Anda akan diminta untuk memasukkan kredensial masuk dari pengguna yang sebelumnya Anda buat seperti yang ditunjukkan di bawah ini

Secured phpMyAdmin

Berikan nama user dan kata sandi admin Anda, lalu klik tombol OK. Anda akan diarahkan ke halaman login phpMyAdmin:

Login as root user to phpMyAdmin

Sekarang, berikan kredensial login user administratif MySQL Anda dan klik tombol Go. Anda akan melihat halaman berikut:

phpMyAdmin database dashboard

Kesimpulan

Selamat! Anda telah berhasil menginstal dan mengamankan phpMyAdmin di server CentOS 8. Anda sekarang dapat membuat database, pengguna, tabel dan mengelolanya dari antarmuka berbasis web.