Instale y asegure phpMyAdmin en CentOS 8
phpMyAdmin es una herramienta gratuita y de código abierto para administrar servidores MySQL y MariaDB a través de una interfaz basada en web. Con phpMyAdmin, puede crear y administrar bases de datos y usuarios, ejecutar declaraciones SQL, importar y exportar datos y realizar actividades de base de datos como crear, eliminar, tablas, columnas, índices, permisos y mucho más. phpMyAdmin es una de las herramientas de administración más populares y más utilizadas, especialmente para los servicios de alojamiento web.
Características
- Proporciona una interfaz web sencilla y fácil de usar.
- Importar datos de CSV y SQL.
- Admite la mayoría de las funciones de MySQL, que incluyen crear, copiar, soltar, renombrar, soltar y modificar bases de datos, tablas, campos e índices.
- Le permite exportar datos a varios formatos, como PDF, CSV, SQL, XML y muchos más.
- Manejo de múltiples servidores.
- Creación de consultas complejas utilizando Query-by-example (QBE).
En este tutorial, le mostraremos cómo configurar phpMyAdmin y cómo asegurar phpMyAdmin en un servidor CentOS 8.
Requisitos
- Un servidor que ejecuta CentOS 8.
- Una contraseña de root está configurada en el servidor.
Instalar servidor LAMP
Primero, deberá instalar Apache, MariaDB, PHP y otras bibliotecas de PHP en su servidor. Puede 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 que todos los paquetes estén instalados, inicie el servicio Apache y MariaDB y habilítelos para que se inicien después de reiniciar el sistema con el siguiente comando:
systemctl start httpd systemctl start mariadb systemctl enable httpd systemctl enable mariadb
Una vez que haya terminado, puede continuar con el siguiente paso.
Configurar MariaDB
De forma predeterminada, MariaDB no está protegido. Por lo tanto, deberá asegurarlo primero. Puede hacerlo ejecutando el script mysql_secure_installation:
mysql_secure_installation
Responda 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 haya terminado, debería ver el siguiente resultado:
... 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, su instalación de MariaDB está asegurada.
Instalar phpMyAdmin
De forma predeterminada, phpMyAdmin no está disponible en el repositorio predeterminado de CentOS 8. Por lo tanto, deberá descargar la última versión de phpMyAdmin desde su sitio web oficial para instalar phpMyAdmin. Puedes descargarlo con el siguiente comando:
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
Una vez descargado, descomprima el archivo descargado con el siguiente comando:
unzip phpMyAdmin-4.9.2-all-languages.zip
A continuación, mueva 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, cambie el directorio a /usr/share/phpmyadmin y cambie el nombre del archivo config.sample.inc.php:
cd /usr/share/phpmyadmin mv config.sample.inc.php config.inc.php
A continuación, abra el archivo con su 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';
Guarde y cierre el archivo cuando haya terminado. Luego, importa create_tables.sql con el siguiente comando:
mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p
Proporcione su contraseña raíz cuando se le solicite importar la tabla.
A continuación, cree un directorio tmp para phpmyadmin y otorgue 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, deberá crear un archivo de configuración de host virtual de Apache para phpMyAdmin. Puedes crearlo con el siguiente comando:
nano /etc/httpd/conf.d/phpmyadmin.conf
Agregue 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>
Guarde y cierre el archivo cuando haya terminado. Luego, reinicie el servicio de Apache con el siguiente comando:
systemctl restart httpd
Puede verificar el estado de Apache con el siguiente comando:
systemctl status httpd
Debería ver el siguiente resultado:
? 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
De manera predeterminada, SELinux está habilitado en CentOS 8. Por lo tanto, deberá configurar SELinux para que phpMyAdmin funcione correctamente.
Primero, instale el paquete policycoreutils-python-utils para administrar un entorno SELinux con el siguiente comando:
dnf install policycoreutils-python-utils
A continuación, habilite 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 recurra a todos los archivos en su directorio phpmyadmin ejecutando el siguiente comando:
restorecon -Rv '/usr/share/phpmyadmin/'
A continuación, deberá 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
phpMyAdmin ahora está instalado y configurado. Ahora es el momento de comprobar si funciona o no.
Abra su navegador web y escriba la URL http://your-server-ip/phpmyadmin. Será redirigido a la página de inicio de sesión de phpMyAdmin, lo que significa que ha conseguido configurar phpMyAdmin correctamente en su servidor CentOS 8.
phpMyAdmin seguro
En este punto, la instancia de phpMyAdmin funciona correctamente. Sin embargo, proteger su instancia de phpMyAdmin del mundo exterior es una tarea importante para usted. En esta sección, le mostraremos cómo proteger su instancia de phpMyAdmin.
Permitir phpMyAdmin desde una IP específica
Primero, deberá configurar su phpMyAdmin para que sea accesible solo desde la dirección IP de su conexión doméstica.
Puede configurarlo editando el archivo /etc/httpd/conf.d/phpmyadmin.conf:
nano /etc/httpd/conf.d/phpmyadmin.conf
Encuentra las siguientes líneas:
<RequireAny> Require all granted </RequireAny>
Y reemplácelos por los siguientes:
<RequireAny> Require ip your-home--connection-ip-address Require ip ::1 </RequireAny>
Guarde y cierre el archivo cuando haya terminado.
Configurar una capa adicional de autenticación
Es una buena idea proteger con contraseña su directorio phpmyadmin configurando una autenticación básica.
Para hacerlo, cree un nuevo archivo de autenticación usando la herramienta htpasswd como se muestra a continuación:
mkdir /etc/phpmyadmin htpasswd -c /etc/phpmyadmin/.htpasswd admin
Se le pedirá que proporcione su contraseña de administrador como se muestra a continuación:
New password: Re-type new password: Adding password for user admin
A continuación, deberá configurar Apache para usar el archivo .htpasswd. Puede hacerlo editando el archivo /etc/httpd/conf.d/phpmyadmin.conf.
nano /etc/httpd/conf.d/phpmyadmin.conf
Agregue 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
Guarde el archivo y reinicie el servicio de Apache para que los cambios surtan efecto:
systemctl restart httpd
Acceder a phpMyAdmin
Ahora, su instancia de phpMyAdmin está protegida con una capa adicional de seguridad. Abra su navegador web y escriba la URL http://your-server-ip/phpmyadmin. Se le pedirá que ingrese las credenciales de inicio de sesión del usuario que creó anteriormente, como se muestra a continuación:
Proporcione su nombre de usuario y contraseña de administrador, luego haga clic en el botón Aceptar. Será redirigido a la página de inicio de sesión de phpMyAdmin:
Ahora, proporcione sus credenciales de inicio de sesión de usuario administrativo de MySQL y haga clic en el botón Ir. Deberías ver la siguiente página, lo que significa que ha logrado ingresar a phpMyAdmin con éxito:
Conclusión
¡Felicidades! Ha instalado y asegurado con éxito phpMyAdmin en su servidor CentOS 8. Ahora puede crear bases de datos, usuarios, tablas y administrarlos desde la interfaz basada en web. No dude en preguntarme si tiene alguna pregunta.