Una instancia de Adminer que se deja ejecutando en una dirección abierta es una de las formas más silenciosas de perder una base de datos. Alguien despliega el archivo PHP único para verificar una tabla, la URL funciona y el archivo permanece allí durante meses hasta que una copia desactualizada se convierte en una superficie de ataque. Ese modo de fallo explica por qué esta guía sobre cómo instalar Adminer en un VPS Linux dedica tanto espacio a asegurar la herramienta como a ponerla en marcha.
Adminer es un único archivo PHP (de aproximadamente 503 KB en la versión completa) que funciona con MySQL, MariaDB, PostgreSQL, SQLite y otras bases de datos. Es trivial de desplegar, que es exactamente por qué a menudo se despliega de manera descuidada.
Lo instalará en un VPS moderno con Ubuntu o Debian, Nginx y PHP-FPM, añadirá autenticación HTTP, una lista de IP permitidas y HTTPS con Let's Encrypt, y terminará con una regla clara sobre cuándo omitir la configuración pública por completo y acceder a Adminer a través de un túnel SSH.
TL;DR
- Adminer es un archivo PHP único que descarga en un directorio raíz web con
wgeten un directorio raíz web; Nginx y PHP-FPM lo sirven. - Una instancia pública de Adminer necesita los tres: una capa de autenticación HTTP, una lista de IPs permitidas y HTTPS. Ninguno de ellos por sí solo es suficiente.
- Para las bases de datos más sensibles, no exponga Adminer en absoluto: vincúlelo a
localhosty acceder a él a través de un túnel SSH. - Actualizar es un único comando: vuelva a ejecutar el
wgetdescarga. Las recientes versiones de seguridad convierten mantenerlo actualizado en una tarea operativa real, no en un lujo.
Requisitos previos: Lo que necesitará antes de instalar
Esta guía está dirigida a Ubuntu 26.04 y 24.04 más Debian 13, con notas de compatibilidad para Ubuntu 22.04 y Debian 12. Las versiones predeterminadas de PHP-FPM son 8.5 en Ubuntu 26.04, 8.3 en Ubuntu 24.04, 8.4 en Debian 13, 8.2 en Debian 12 y 8.1 en Ubuntu 22.04.
- Un VPS Linux con Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Debian 12 o Debian 13, con un usuario que tenga acceso
sudoacceso. - Un servidor de base de datos (MySQL, MariaDB o PostgreSQL) ya en ejecución, ya sea en este VPS o en uno al que Adminer pueda acceder a través de la red. Esta guía no instala una base de datos; instala la herramienta que se utiliza para administrar una.
- PHP-FPM de los repositorios oficialmente compatibles del sistema operativo. Aunque el archivo compilado de Adminer admite PHP 5.3+, use la versión actual proporcionada por la distribución indicada anteriormente en lugar de instalar una versión PHP obsoleta.
- Para la configuración HTTPS pública, necesita un nombre de host que resuelva al VPS y los puertos TCP entrantes 80 y 443 disponibles. El flujo de trabajo de Certbot Nginx utiliza la validación HTTP-01 en el puerto 80. Let's Encrypt ahora admite certificados de dirección IP de corta duración, pero Certbot no los instala automáticamente a través de su flujo de trabajo de Nginx, por lo que esta guía utiliza un nombre de host.
Nota: Esta guía utiliza Nginx por diseño. Si ejecuta Apache, la lógica de descarga y protección sigue aplicándose, pero la configuración del bloque de servidor a continuación no.
Instalar Nginx y PHP-FPM
Comience actualizando el índice de paquetes e instalando Nginx y PHP-FPM junto con la extensión de base de datos PHP que necesita su servidor:
sudo apt update
sudo apt install -y nginx php-fpm php-mysql
Para un backend PostgreSQL, instale php-pgsql en lugar de, o junto con, php-mysql:
sudo apt install -y php-pgsql
Confirme que el socket PHP-FPM existe:
ls /run/php/
Haga coincidir el nombre del archivo del socket con la versión indicada anteriormente, por ejemplo, php8.5-fpm.sock en Ubuntu 26.04, php8.3-fpm.sock en Ubuntu 24.04, o php8.4-fpm.sock en Debian 13. Si el socket esperado falta, compruebe el servicio correspondiente con systemctl status php8.5-fpm, reemplazando 8.5 con la versión instalada en su sistema operativo.
Consejo profesional: Una discrepancia de socket es una posible causa de un
502 Bad Gateway. Haga coincidirfastcgi_passcon el nombre de archivo bajo/run/php/, confirme que el servicio PHP-FPM correspondiente está en ejecución y compruebe/var/log/nginx/error.logsi el error persiste.
Descargar Adminer
Cree un directorio desde el que servir Adminer y luego descargue el archivo único. La latest.php URL siempre apunta a la versión estable actual:
sudo mkdir -p /var/www/adminer
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Si solo trabaja con MySQL o MariaDB, la compilación solo para MySQL es más pequeña (unos 406 KB) y se descarga de la misma manera:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest-mysql.php
Mantenga el directorio de Adminer como propiedad de root mientras le otorga acceso de lectura a PHP-FPM:
sudo chown -R root:root /var/www/adminer
sudo chmod 755 /var/www/adminer
sudo chmod 644 /var/www/adminer/adminer.php
You do not need to track the version number: the latest.php URL significa que volver a ejecutar la descarga es también su ruta de actualización, que la sección de mantenimiento retoma.
Configurar el bloque de servidor Nginx
Cree un bloque de servidor que sirva el directorio de Adminer y pase las solicitudes .php las solicitudes al socket PHP-FPM que identificó anteriormente. Abra un nuevo archivo de sitio:
sudo nano /etc/nginx/sites-available/adminer
Pegue lo siguiente, reemplazando db.example.com con el nombre de host ya apuntado a su VPS y confirmando que el fastcgi_pass socket coincide con su versión PHP:
# /etc/nginx/sites-available/adminer
server {
listen 80;
server_name db.example.com;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
Habilite el sitio creando un enlace simbólico en sites-enabled, luego pruebe la configuración sin recargar Nginx todavía:
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t
nginx -t debería reportar que la sintaxis es válida y la prueba exitosa. No recargue Nginx todavía porque el sitio no tiene autenticación ni restricción de IP. Continúe con esos dos pasos de refuerzo; el paso de restricción de IP realiza la primera recarga después de que ambas protecciones estén en su lugar.
Bloquear el acceso: Autenticación, Restricción de IP y HTTPS
Una instancia pública de Adminer se encuentra directamente frente a sus credenciales de base de datos, por lo que necesita defensas por capas en lugar de un solo bloqueo. Las tres capas a continuación hacen diferentes trabajos: la autenticación HTTP detiene a cualquiera sin contraseña en el servidor web, la lista de IPs permitidas detiene a cualquiera que se conecte desde una dirección no aprobada, y HTTPS evita que las credenciales que escribe crucen la red en texto plano. Agregue las tres. Ninguna sustituye a las demás.
Agregar autenticación HTTP básica
Instale la htpasswd utilidad, que viene incluida en el paquete apache2-utils paquete en Ubuntu y Debian:
sudo apt install -y apache2-utils
Cree un archivo de contraseña y un usuario (se le pedirá la contraseña):
sudo htpasswd -B -C 10 -c /etc/nginx/.htpasswd adminuser
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
Agregue las directivas al lugar PHP exacto de Adminer para que la solicitud PHP en sí misma esté protegida:
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Ambas directivas están documentadas en el referencia del módulo HTTP auth_basic de Nginx. Usa sudo nginx -t para validar la configuración, pero no recargue Nginx todavía; la lista de IPs permitidas se agrega a continuación. No envíe las credenciales de autenticación básica a través de HTTP sin cifrar; espere hasta que se habilite HTTPS a continuación.
Restringir el acceso por dirección IP
La autenticación básica bloquea a los usuarios no autenticados, pero Nginx sigue recibiendo solicitudes de todas las fuentes. Reemplace la ubicación PHP de Adminer existente con el siguiente bloque combinado para que las reglas de IP y las directivas de autenticación básica permanezcan en un solo lugar:
location = /adminer.php {
satisfy all;
allow 203.0.113.10;
allow 203.0.113.0/28;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Reemplace las direcciones de ejemplo con su dirección IP pública real o rango de red de confianza. Mantenga solo las entradas allow que necesita y elimine los ejemplos no utilizados. La primera entrada demuestra una dirección única, mientras que la segunda demuestra un rango CIDR. Nginx devuelve 403 Forbidden a las direcciones que no coinciden con una allow regla allow. El referencia del módulo de acceso de Nginx documenta la sintaxis de las directivas. Pruebe y recargue Nginx:
sudo nginx -t && sudo systemctl reload nginx
Habilitar HTTPS con Let's Encrypt
Con un dominio apuntando al VPS, instale Certbot y su complemento de Nginx, luego solicite un certificado:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d db.example.com
Certbot edita su bloque de servidor para servir HTTPS en el puerto 443 y ofrece redirigir HTTP a HTTPS; acepte la redirección. También instala un temporizador de renovación, de modo que el certificado se renueva automáticamente antes de que expire. Puede confirmar la ruta de renovación con sudo certbot renew --dry-run, que debería completarse sin errores.
Ahora visite https://db.example.com/adminer.php desde una dirección permitida y confirme que Nginx solicita las credenciales de autenticación básica antes de que Adminer se cargue.
Elegir su modelo de acceso: HTTPS público vs. túnel SSH
La configuración anterior es apropiada cuando necesita acceso por navegador a una base de datos desde varias máquinas o cuando abrir una sesión SSH es impracticable. No es el único modelo, y para una base de datos sensible no es el más defensivo.
Para configuraciones sensibles, no exponga Adminer públicamente. Las guías de seguridad oficiales de Adminer recomienda hacerlo inaccesible desde Internet público siempre que sea posible. Si elige acceso solo mediante túnel, reemplace el bloque de servidor Nginx público con esta configuración solo de loopback y omita la configuración HTTPS pública:
# /etc/nginx/sites-available/adminer
server {
listen 127.0.0.1:8080 default_server;
server_name _;
root /var/www/adminer;
location = / {
return 302 /adminer.php;
}
location = /adminer.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
return 404;
}
}
Pruebe y recargue la configuración de reemplazo:
sudo nginx -t && sudo systemctl reload nginx
Luego abra el túnel desde su propia máquina:
ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip
Con el túnel activo, abra http://127.0.0.1:8080/adminer.php. Nginx acepta conexiones de Adminer solo a través de la interfaz de loopback del VPS, mientras que SSH lleva el tráfico a través de su conexión cifrada. Esto utiliza el comportamiento descrito en la documentación de reenvío local de OpenSSH.
Use la configuración de HTTPS público, autenticación básica y lista de IPs permitidas cuando necesite acceso directo por navegador desde varias máquinas. Prefiera la configuración SSH solo de loopback cuando el acceso público no sea necesario.
Conclusión clave: El Adminer más seguro es el que nunca es accesible desde Internet público.
Mantener Adminer actualizado
La instancia olvidada es el riesgo real aquí, y vale la pena tratarla como una tarea programada en lugar de una idea de último momento. Actualizar Adminer es un solo comando, el mismo wget comando que usó para instalarlo, porque latest.php siempre obtiene la versión actual:
sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php
Esta no es una preocupación teórica. Adminer 5.4.3, lanzado el 9 de julio de 2026, abordó siete avisos de seguridad de GitHub en una sola versión. El aviso anterior para CVE-2026-25892 demostró que incluso el punto final de verificación de versión de Adminer podría convertirse en un vector de denegación de servicio no autenticado; el problema se solucionó en la versión 5.4.2. Una copia desactualizada acumula vulnerabilidades documentadas públicamente, por lo que actualizarla debería ser una tarea de mantenimiento rutinario.
Nota: Manténgase en la versión oficial actual de Adminer. El repositorio AdminerEvo fue archivado en enero de 2025 y no es una alternativa mantenida activamente.
Despliegue en un VPS
Si prefiere omitir los pasos manuales, Adminer está disponible como implementación de un clic en el el marketplace de Cloudzy en un VPS Cloudzy Linux. La imagen del marketplace usa Apache, Basic Auth y un certificado autofirmado, por lo que es diferente de la pila de Nginx, lista de IPs permitidas y Let's Encrypt anterior. Revise esas diferencias de seguridad antes de ingresar las credenciales de la base de datos de producción.
La huella de Adminer es insignificante; la base de datos determina el tamaño. Elija CPU, memoria y almacenamiento según el tamaño de datos e índices de la base de datos, carga de consultas, recuento de conexiones, copias de seguridad y crecimiento esperado, no según Adminer.
Preguntas frecuentes
¿Es seguro exponer Adminer públicamente en un VPS?
No por sí solo. Si debe exponer Adminer públicamente, colóquelo detrás de la autenticación HTTP básica, una lista de IPs permitidas y HTTPS juntos. Estos controles reducen el riesgo pero no hacen que la exposición pública sea libre de riesgos. Para bases de datos sensibles, vincule Adminer a localhost y acceda a él a través de un túnel SSH en su lugar.
¿Cómo accedo a Adminer sin exponerlo a Internet?
Configure el bloque de servidor Nginx solo de loopback mostrado arriba para que Adminer escuche en 127.0.0.1:8080, luego ejecuta ssh -N -L 127.0.0.1:8080:127.0.0.1:8080 user@your-server-ip en su propia máquina. Abra http://127.0.0.1:8080/adminer.php mientras el túnel está en funcionamiento.
¿Puede Adminer conectarse a PostgreSQL además de MySQL?
Sí. Adminer es compatible con MySQL, MariaDB, PostgreSQL, SQLite, MS SQL y Oracle de forma inmediata, con más bases de datos disponibles a través de plugins. Instale la extensión PHP correspondiente para su base de datos, por ejemplo php-pgsql para PostgreSQL, para que PHP pueda comunicarse con él.
¿Cómo mantengo Adminer actualizado?
Vuelva a ejecutar el comando de descarga: sudo wget -O /var/www/adminer/adminer.php https://www.adminer.org/latest.php. La latest.php URL siempre devuelve la versión estable actual, por lo que esto sobrescribe su copia con la versión más reciente. Las recientes versiones de seguridad hacen que valga la pena hacer esto según un calendario en lugar de solo cuando lo recuerde.
¿Debo instalar Adminer a través del apt Paquete o descargarlo directamente?
Descargue el archivo único directamente. Le proporciona la versión actual de inmediato y convierte las actualizaciones en un comando de una sola línea, mientras que un paquete de distribución puede quedar rezagado respecto a la versión oficial. El archivo directo es la misma herramienta con un camino más corto hacia las últimas correcciones de seguridad.