Búsqueda de sitios web

Cómo instalar y asegurar phpMyAdmin con Apache en un servidor CentOS 7


Introducción

Los sistemas de administración de bases de datos relacionales como MySQL y MariaDB son necesarios para una parte importante de los sitios web y las aplicaciones. Sin embargo, no todos los usuarios se sienten cómodos administrando sus datos desde la línea de comandos.

Para solucionar este problema, se creó un proyecto llamado phpMyAdmin con el fin de ofrecer una alternativa en forma de una interfaz de administración basada en web. En esta guía, demostraremos cómo instalar y asegurar una configuración de phpMyAdmin en un servidor CentOS 7. Construiremos esta configuración sobre el servidor web Apache, el servidor web más popular del mundo.

requisitos previos

Antes de comenzar, hay algunos requisitos que deben cumplirse.

Para asegurarse de tener una base sólida sobre la que construir este sistema, debe consultar nuestra guía de configuración inicial del servidor para CentOS 7. Entre otras cosas, esto lo guiará a través de la configuración de un usuario no root con sudo acceso para comandos administrativos.

El segundo requisito previo que se debe cumplir para comenzar con esta guía es instalar una pila LAMP (Linux, Apache, MariaDB y PHP) en su servidor CentOS 7. Esta es la plataforma que usaremos para servir nuestra interfaz phpMyAdmin (MariaDB es también el software de administración de bases de datos que deseamos administrar). Si aún no tiene una instalación de LAMP en su servidor, siga nuestro tutorial sobre cómo instalar LAMP en CentOS 7.

Cuando su servidor esté en un estado de funcionamiento adecuado después de seguir estas guías, puede continuar con el resto de esta página.

Paso uno: instalar phpMyAdmin

Con nuestra plataforma LAMP ya instalada, podemos comenzar de inmediato con la instalación del software phpMyAdmin. Desafortunadamente, phpMyAdmin no está disponible en el repositorio predeterminado de CentOS 7.

Para obtener los paquetes que necesitamos, tendremos que agregar un repositorio adicional a nuestro sistema. El repositorio EPEL (paquetes adicionales para Enterprise Linux) contiene muchos paquetes adicionales, incluido el paquete phpMyAdmin que estamos buscando.

El repositorio EPEL puede estar disponible para su servidor instalando un paquete especial llamado epel-release. Esto reconfigurará su lista de repositorios y le dará acceso a los paquetes EPEL.

Para instalar, simplemente escriba:

sudo yum install epel-release

Ahora que el repositorio EPEL está configurado, puede instalar el paquete phpMyAdmin utilizando el sistema de empaquetado yum escribiendo:

sudo yum install phpmyadmin

La instalación ahora se completará. La instalación incluyó un archivo de configuración de Apache que ya se ha implementado. Tendremos que modificar esto un poco para que funcione correctamente para nuestra instalación.

Abra el archivo en su editor de texto ahora para que podamos hacer algunos cambios:

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

En el interior, vemos algunos bloques de directorio con alguna lógica condicional para explicar la política de acceso a nuestro directorio. Hay dos directorios distintos que están definidos, y dentro de estos, configuraciones que serán válidas tanto para Apache 2.2 como para Apache 2.4 (que estamos ejecutando).

Actualmente, esta configuración está configurada para denegar el acceso a cualquier conexión que no se realice desde el propio servidor. Dado que estamos trabajando en nuestro servidor de forma remota, necesitamos modificar algunas líneas para especificar la dirección IP de su conexión home.

Cambie cualquier línea que diga Requerir ip 127.0.0.1 o Permitir desde 127.0.0.1 para hacer referencia a la dirección IP de su conexión doméstica. Si necesita ayuda para encontrar la dirección IP de su conexión doméstica, consulte la siguiente sección. Debe haber cuatro ubicaciones en el archivo que se deben cambiar:

. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .

Cuando haya terminado, reinicie el servidor web Apache para implementar sus modificaciones escribiendo:

sudo systemctl restart httpd.service

Con eso, nuestra instalación de phpMyAdmin ya está operativa. Para acceder a la interfaz, vaya al nombre de dominio de su servidor o dirección IP pública seguido de /phpMyAdmin, en su navegador web:

http://server_domain_or_IP/phpMyAdmin

Para iniciar sesión, use un par de nombre de usuario/contraseña de un usuario de MariaDB válido. El usuario root y la contraseña administrativa de MariaDB son una buena opción para comenzar. A continuación, podrá acceder a la interfaz administrativa:

Encuentre su dirección IP

Necesitará saber la dirección IP de la computadora que está utilizando para acceder a sus bases de datos para completar el paso anterior. Esta es una medida de seguridad para que personas no autorizadas no puedan conectarse a su servidor.

Nota: esta no es la dirección IP de su VPS, es la dirección IP de la computadora de su hogar o trabajo.

Puede averiguar cómo la gran web ve su dirección IP visitando uno de estos sitios en su navegador web:

  • ¿Cuál es mi dirección IP?
  • ¿Cuál es mi IP?
  • Mi dirección IP

Compare algunos sitios diferentes y asegúrese de que todos le den el mismo valor. Utilice este valor en el archivo de configuración anterior.

Paso dos: asegure su instancia de phpMyAdmin

La instancia de phpMyAdmin instalada en nuestro servidor debería ser completamente utilizable en este punto. Sin embargo, al instalar una interfaz web, hemos expuesto nuestro sistema MySQL al mundo exterior.

Incluso con la pantalla de autenticación incluida, esto es un gran problema. Debido a la popularidad de phpMyAdmin combinada con la gran cantidad de datos a los que brinda acceso, instalaciones como estas son objetivos comunes para los atacantes.

Implementaremos dos estrategias simples para disminuir las posibilidades de que nuestra instalación sea atacada y comprometida. Cambiaremos la ubicación de la interfaz de /phpMyAdmin a otra para eludir algunos de los intentos automatizados de fuerza bruta de los bots. También crearemos una puerta de enlace de autenticación adicional a nivel de servidor web que se debe pasar incluso antes de llegar a la pantalla de inicio de sesión de phpMyAdmin.

Cambiar la ubicación de acceso de la aplicación

Para que nuestro servidor web Apache funcione con phpMyAdmin, nuestro archivo de configuración de phpMyAdmin Apache utiliza un alias para señalar la ubicación del directorio de los archivos.

Para cambiar la URL donde se puede acceder a nuestra interfaz phpMyAdmin, simplemente necesitamos cambiar el nombre del alias. Abra el archivo de configuración de phpMyAdmin Apache ahora:

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

Hacia la parte superior del archivo, verá dos líneas que se ven así:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

Estas dos líneas son nuestros alias, lo que significa que si accedemos al nombre de dominio o dirección IP de nuestro sitio, seguido de /phpMyAdmin o /phpmyadmin, recibiremos el contenido. en /usr/share/phpMyAdmin.

Queremos deshabilitar estos alias específicos, ya que están fuertemente atacados por bots y usuarios malintencionados. En su lugar, debemos decidir sobre nuestro propio alias. Debe ser fácil de recordar, pero no fácil de adivinar. No debe indicar el propósito de la ubicación de la URL. En nuestro caso, elegiremos /nothingtosee.

Para aplicar nuestros cambios previstos, debemos eliminar o comentar las líneas existentes y agregar las nuestras:

# Alias /phpMyAdmin /usr/share/phpMyAdmin
# Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /nothingtosee /usr/share/phpMyAdmin

Cuando haya terminado, guarde y cierre el archivo.

Para implementar los cambios, reinicie el servicio web:

sudo systemctl restart httpd.service

Ahora, si va a la ubicación anterior de su instalación de phpMyAdmin, obtendrá un error 404:

http://server_domain_or_IP/phpMyAdmin

Sin embargo, su interfaz phpMyAdmin estará disponible en la nueva ubicación que seleccionamos:

http://server_domain_or_IP/nothingtosee

Configuración de una puerta de autenticación del servidor web

La siguiente característica que queríamos para nuestra instalación era un aviso de autenticación que el usuario tendría que pasar antes de ver la pantalla de inicio de sesión de phpMyAdmin.

Afortunadamente, la mayoría de los servidores web, incluido Apache, brindan esta capacidad de forma nativa. Solo necesitaremos modificar nuestro archivo de configuración de Apache para usar un archivo de autorización.

Abra de nuevo el archivo de configuración de phpMyAdmin Apache en su editor de texto:

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

Dentro del bloque de directorio /usr/share/phpMyAdmin, pero fuera de cualquiera de los bloques internos, necesitamos agregar una directiva de anulación. Se verá así:

. . .
<Directory /usr/share/phpMyAdmin/>
   AllowOverride All
   <IfModule mod_authz_core.c>
   . . .
</Directory>
. . .

Esto nos permitirá especificar detalles de configuración adicionales en un archivo llamado .htaccess ubicado dentro del propio directorio phpMyAdmin. Usaremos este archivo para configurar nuestra autenticación de contraseña.

Guarde y cierre el archivo cuando haya terminado.

Reinicie el servicio web para implementar este cambio:

sudo systemctl restart httpd.service

Crear un archivo .htaccess

Ahora que tenemos la directiva override en nuestra configuración, Apache buscará un archivo llamado .htaccess dentro del directorio /usr/share/phpMyAdmin. Si encuentra uno, utilizará las directivas contenidas en él para complementar sus datos de configuración anteriores.

Nuestro siguiente paso es crear el archivo .htaccess dentro de ese directorio. Usa tu editor de texto para hacerlo ahora:

sudo nano /usr/share/phpMyAdmin/.htaccess

Dentro de este archivo, necesitamos ingresar la siguiente información:

AuthType Basic
AuthName "Admin Login"
AuthUserFile /etc/httpd/pma_pass
Require valid-user

Repasemos lo que significa cada una de estas líneas:

  • AuthType Basic: esta línea especifica el tipo de autenticación que estamos implementando. Este tipo implementará la autenticación de contraseña mediante un archivo de contraseña.
  • AuthName: Esto establece el mensaje para el cuadro de diálogo de autenticación. Debe mantener este genérico para que los usuarios no autorizados no obtengan conocimiento sobre lo que se está protegiendo.
  • AuthUserFile: Esto establece la ubicación del archivo de contraseña real que se usará para la autenticación. Esto debe estar fuera de los directorios que se están sirviendo. Crearemos este archivo en un momento.
  • Requerir usuario válido: Esto especifica que solo los usuarios autenticados deben tener acceso a este recurso. Esto es lo que realmente impide que los usuarios no autorizados ingresen.

Cuando haya terminado de ingresar esta información, guarde y cierre el archivo.

Crear el archivo de contraseñas para la autenticación

Ahora que hemos especificado la ubicación de nuestro archivo de contraseña mediante el uso de la directiva AuthUserFile en nuestro archivo .htaccess, necesitamos crear y completar el archivo de contraseña.

Esto se puede lograr mediante el uso de una utilidad de Apache llamada htpasswd. Invocamos el comando pasándole la ubicación donde nos gustaría crear el archivo y el nombre de usuario para el que nos gustaría ingresar los detalles de autenticación:

sudo htpasswd -c /etc/httpd/pma_pass username

El indicador -c indica que esto creará un archivo inicial. La ubicación del directorio es la ruta y el nombre de archivo que se utilizará para el archivo. El nombre de usuario es el primer usuario que nos gustaría agregar. Se le pedirá que ingrese y confirme una contraseña para el usuario.

Si desea agregar usuarios adicionales para autenticarse, puede volver a ejecutar el mismo comando sin el indicador -c y con un nuevo nombre de usuario:

sudo htpasswd /etc/httpd/pma_pass seconduser

Con nuestro archivo de contraseña creado, se implementó una puerta de enlace de autenticación y ahora deberíamos ver una solicitud de contraseña la próxima vez que visitemos nuestro sitio:

http://server_domain_or_IP/nothingtosee

Una vez que ingrese sus credenciales, será llevado a la página normal de inicio de sesión de phpMyAdmin. Esta capa adicional de protección ayudará a mantener sus registros de MySQL libres de intentos de autenticación además del beneficio de seguridad adicional.

Conclusión

Ahora puede administrar sus bases de datos MySQL desde una interfaz web razonablemente segura. Esta interfaz de usuario expone la mayor parte de la funcionalidad que está disponible desde el símbolo del sistema de MySQL. Puede ver bases de datos y esquemas, ejecutar consultas y crear nuevos conjuntos de datos y estructuras.