phpMyAdmin is an open-source software tool used for managing MySQL/MariaDB databases. It provides an easy way to interact with MySQL through a web browser. phpMyAdmin is very useful for users who are not comfortable administering their data from the command line, so it is essential for any system administrator to secure phpMyAdmin from different kinds of attacks.
In this tutorial, we will show you how to install and secure phpMyAdmin on CentOS 8.
Step 1 – Install Apache, MariaDB and PHP
Before starting, install Apache, MariaDB, PHP and other required PHP extensions with the following command:
dnf update -y dnf install httpd mariadb-server php php-cli php-json php-mbstring php-pdo php-pecl-zip php-mysqlnd -y
After installing all the packages, you can proceed to the next step.
Step 2 – Set MariaDB Root Password
First, start the MariaDB service and enable it to start on boot time with the following command:
systemctl start mariadb systemctl enable mariadb
Next, set the MySQL root password using the following script:
mysql_secure_installation
This script will set the MySQL root password, remove anonymous users, disallow root login remotely and remove the test database and access to it, as shown below:
Enter current password for root (enter for none):
Set root password? [Y/n] Y New password: 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
Step 3 – Install phpMyAdmin
First, download the latest version of phpMyAdmin to the Apache web root directory using the following command:
cd /var/www/html wget https://files.phpmyadmin.net/phpMyAdmin/4.9.4/phpMyAdmin-4.9.4-all-languages.zip
Once downloaded, unzip the downloaded file with the following command:
unzip phpMyAdmin-4.9.4-all-languages.zip
Next, rename the extracted directory to phpmyadmin as shown below:
mv phpMyAdmin-4.9.4-all-languages phpmyadmin
Next, change the ownership of the phpmyadmin directory to the apache user:
chown -R apache:apache /var/www/html/phpmyadmin
Next, rename the config.sample.inc.php file:
cd /var/www/html/phpmyadmin mv config.sample.inc.php config.inc.php
Next, edit the file and define your secure password:
nano config.inc.php
Find the line below and update with your secure password, as shown below:
$cfg['blowfish_secret'] = 'your-secure-password';
Save and close the file. Then, import the tables for phpMyAdmin with the following command:
mysql < sql/create_tables.sql -u root -p
Once you are done, you can proceed to the next step.
Step 4 – Configure Apache for phpMyAdmin
Next, create an Apache virtual host configuration file for phpMyAdmin:
nano /etc/httpd/conf.d/phpmyadmin.conf
Add the following lines:
Alias /phpmyadmin /var/www/html/phpmyadmin <Directory /var/www/html/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 /var/www/html/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>
Save and close the file. Then, start the Apache service and enable it to start after system reboot with the following command:
systemctl start httpd systemctl enable httpd
Now, open your web browser and visit the URL your-server-ip/phpmyadmin. You should see the phpMyAdmin web interface in the following screen:
Log in with your MySQL credentials created earlier.
Step 5 – Secure phpMyAdmin
In this section, we will show different ways to secure your phpMyAdmin web interface.
Change phpMyAdmin Access Location
It is a good idea to change the access URL of your phpMyAdmin interface. You can change it by editing the phpmyadmin.conf file:
nano /etc/httpd/conf.d/phpmyadmin.conf
Find the following line:
Alias /phpmyadmin /var/www/html/phpmyadmin
Replace it with the following line:
Alias /securelocation /var/www/html/phpmyadmin
Save and close the file, then restart the Apache service to implement the changes:
systemctl restart httpd
You can now access the phpMyAdmin interface using the URL: your-server-ip/securelocation.
Allow phpMyAdmin from Specific IP
It is always a good idea to allow phpMyAdmin only to be accessible from a specific IP address.
To do so, open the phpmyadmin.conf file:
nano /etc/httpd/conf.d/phpmyadmin.conf
Find the following lines:
<RequireAny> Require all granted </RequireAny>
Replace it with the following:
<RequireAny> Require ip your-client-ip-address Require ip ::1 </RequireAny>
Save and close the file, then restart the Apache service to implement the changes:
systemctl restart httpd
Your phpMyAdmin interface is now only accessible from a specified IP address.
Password Protect phpMyAdmin Interface
You can also add an extra layer of password protection on phpMyAdmin by setting up basic authentication.
First, create an authentication file using the following command:
htpasswd -c /etc/httpd/.htpasswd phpadmin
Provide a secure password as shown below:
New password: Re-type new password: Adding password for user phpadmin
Next, create the .htaccess file within the phpmyadmin directory:
nano /var/www/html/phpmyadmin/.htaccess
Add the following lines:
AuthType basic AuthName "Authentication Required" AuthUserFile /etc/httpd/.htpasswd Require valid-user
Save and close the file when you are finished.
Next, edit the phpmyadmin.conf file and configure Apache to use the .htpasswd file.
nano /etc/httpd/conf.d/phpmyadmin.conf
Add the following lines below the line “AddDefaultCharset UTF-8”:
AllowOverride All
Save the file, then restart the Apache service to implement the changes:
systemctl restart httpd
Step 6 – Test phpMyAdmin
At this point, the phpMyAdmin interface is secured with an extra layer of password protection. To test it, open your web browser and type the URL http://your-server-ip/securelocation. You will be asked to provide the login credentials that we created earlier:
Type your username and password and click on the OK button. You will be redirected to the phpMyAdmin login page:
Provide your MySQL username and password, then click on the Go button. You should see your phpMyAdmin web interface in the following screen:
Conclusion
In the above guide, we learned how to install and secure phpMyAdmin on CentOS 8. Your phpMyAdmin interface is now secured with additional password protection. You can use this method to secure a server under an Atlantic.Net VPS Hosting Plan.
Learn more about our VPS hosting services and Virtual private servers.