Instalar y asegurar phpMyAdmin en CentOS 8
phpMyAdmin es una herramienta gratuita y de código abierto para gestionar servidores MySQL y MariaDB a través de una interfaz basada en la web. Con phpMyAdmin, puedes crear y gestionar bases de datos y usuarios, ejecutar sentencias SQL, importar y exportar datos, y realizar actividades en la base de datos como, crear, eliminar, tablas, columnas, índices, permisos y muchas más. phpMyAdmin es una de las herramientas de administración más populares y más utilizadas, especialmente para servicios de alojamiento web.
Características
- Proporciona una interfaz web sencilla y fácil de usar.
- Importa datos desde CSV y SQL.
- Soporta la mayoría de las funciones de MySQL, como crear, copiar, eliminar, renombrar y alterar bases de datos, tablas, campos e índices.
- Permite exportar datos a varios formatos como, PDF, CSV, SQL, XML y muchos más.
- Gestionar varios servidores.
- Crear consultas complejas mediante Query-by-example (QBE).
En este tutorial, te mostraremos cómo instalar y asegurar phpMyAdmin en un servidor CentOS 8.
Requisitos
- Un servidor con CentOS 8.
- Una contraseña de root configurada en el servidor.
Instalar el servidor LAMP
En primer lugar, necesitarás instalar Apache, MariaDB, PHP y otras librerías PHP en tu servidor. Puedes instalarlos todos con el siguiente comando:
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
Una vez instalados todos los paquetes, inicia el servicio de Apache y MariaDB y permite que se inicien tras el reinicio del sistema con el siguiente comando:
systemctl start httpd
systemctl start mariadb
systemctl enable httpd
systemctl enable mariadb
Una vez que hayas terminado, puedes pasar al siguiente paso.
Configurar MariaDB
Por defecto, MariaDB no está protegida. Así que primero tendrás que asegurarlo. Puedes hacerlo ejecutando el script mysql_secure_installation:
mysql_secure_installation
Responde a todas las preguntas como se muestra a continuación:
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
Una vez que hayas terminado, deberías ver la siguiente salida:
... 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!
En este punto, tu instalación de MariaDB está asegurada.
Instalar phpMyAdmin
Por defecto, phpMyAdmin no está disponible en el repositorio por defecto de CentOS 8. Por tanto, tendrás que descargar la última versión de phpMyAdmin desde su sitio web oficial. Puedes descargarla con el siguiente comando:
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
Una vez descargado, descomprime el archivo descargado con el siguiente comando:
unzip phpMyAdmin-4.9.2-all-languages.zip
A continuación, mueve el contenido extraído al directorio /usr/share como se muestra a continuación:
mv phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin
A continuación, cambia el directorio a /usr/share/phpmyadmin y cambia el nombre del archivo config.sample.inc.php:
cd /usr/share/phpmyadmin
mv config.sample.inc.php config.inc.php
A continuación, abre el archivo con tu editor de texto favorito como se muestra a continuación:
nano config.inc.php
Cambia la siguiente línea:
$cfg['blowfish_secret'] = 'your-secret-password';
Guarda y cierra el archivo cuando hayas terminado. A continuación, importa el archivo create_tables.sql con el siguiente comando:
mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p
Proporciona tu contraseña de root cuando se te pida que importes la tabla.
A continuación, crea un directorio tmp para phpmyadmin y dale los permisos adecuados:
mkdir /usr/share/phpmyadmin/tmp
chown -R apache:apache /usr/share/phpmyadmin
chmod 777 /usr/share/phpmyadmin/tmp
Configurar Apache para phpMyAdmin
A continuación, tendrás que crear un archivo de configuración del host virtual de Apache para phpMyAdmin. Puedes crearlo con el siguiente comando:
nano /etc/httpd/conf.d/phpmyadmin.conf
Añade las siguientes líneas:
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>
Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio Apache con el siguiente comando:
systemctl restart httpd
Puedes comprobar el estado del Apache con el siguiente comando:
systemctl status httpd
Deberías ver la siguiente salida:
? 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.
Configurar SELinux y Firewall
Por defecto, SELinux está activado en CentOS 8. Así que tendrás que configurar SELinux para que phpMyAdmin funcione correctamente.
Primero, instala el paquete policycoreutils-python-utils para gestionar un entorno SELinux con el siguiente comando:
dnf install policycoreutils-python-utils
A continuación, habilita el acceso al directorio /usr/share/phpmyadmin con el siguiente comando:
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(/.*)?"
Ahora recurre a todos los archivos de tu directorio phpmyadmin ejecutando el siguiente comando:
restorecon -Rv '/usr/share/phpmyadmin/'
A continuación, tendrás que crear una regla de firewall para permitir el servicio HTTP desde redes externas. Puedes permitirlo con el siguiente comando:
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
Ahora phpMyAdmin está instalado y configurado. Ahora es el momento de comprobar si funciona o no.
Abre tu navegador web y escribe la URL http://your-server-ip/phpmyadmin. Serás redirigido a la siguiente página:
Proteger phpMyAdmin
En este punto, la instancia de phpMyAdmin está funcionando correctamente. Sin embargo, proteger tu instancia de phpMyAdmin del mundo exterior es una tarea importante para ti. En esta sección, te mostraremos cómo asegurar tu instancia de phpMyAdmin.
Permitir phpMyAdmin desde una IP específica
En primer lugar, tendrás que configurar tu phpMyAdmin para que sólo sea accesible desde la dirección IP de tu conexión doméstica.
Puedes configurarlo editando el archivo /etc/httpd/conf.d/phpmyadmin.conf:
nano /etc/httpd/conf.d/phpmyadmin.conf
Busca las siguientes líneas:
<RequireAny> Require all granted </RequireAny>
Y, sustitúyelas por las siguientes:
<RequireAny> Require ip your-home--connection-ip-address Require ip ::1 </RequireAny>
Guarda y cierra el archivo cuando hayas terminado.
Configurar una capa adicional de autenticación
Es una buena idea proteger con contraseña tu directorio phpmyadmin configurando una autenticación básica.
Para ello, crea un nuevo archivo de autenticación utilizando la herramienta htpasswd como se muestra a continuación:
mkdir /etc/phpmyadmin
htpasswd -c /etc/phpmyadmin/.htpasswd admin
Se te pedirá que proporciones tu contraseña de administrador como se muestra a continuación:
New password: Re-type new password: Adding password for user admin
A continuación, tendrás que configurar Apache para que utilice el archivo .htpasswd. Puedes hacerlo editando el archivo /etc/httpd/conf.d/phpmyadmin.conf.
nano /etc/httpd/conf.d/phpmyadmin.conf
Añade las siguientes líneas debajo de la línea «AddDefaultCharset UTF-8»:
Options +FollowSymLinks +Multiviews +Indexes AllowOverride None AuthType basic AuthName "Authentication Required" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
Guarda el archivo y reinicia el servicio Apache para que los cambios surtan efecto:
systemctl restart httpd
Accede a phpMyAdmin
Ahora, tu instancia de phpMyAdmin está protegida con una capa extra de seguridad. Abre tu navegador web y escribe la URL http://your-server-ip/phpmyadmin. Se te pedirá que introduzcas las credenciales de acceso del usuario que has creado previamente, como se muestra a continuación:
Proporciona tu nombre de usuario y contraseña de administrador, y luego haz clic en el botón Aceptar. Serás redirigido a la página de inicio de sesión de phpMyAdmin:
Ahora, proporciona tus credenciales de inicio de sesión del usuario administrativo de MySQL y haz clic en el botón Ir. Deberías ver la siguiente página:
Conclusión
Enhorabuena! has instalado y asegurado con éxito phpMyAdmin en el servidor CentOS 8. Ahora puedes crear bases de datos, usuarios, tablas y administrarlas desde la interfaz basada en la web. No dudes en preguntarme si tienes alguna duda.