Introducción

¿Qué es WP-CLI y por qué es útil para la seguridad?

WP-CLI es una herramienta de línea de comandos que nos permite gestionar cualquier instalación de WordPress desde la terminal. Con ella podemos realizar desde tareas simples, como instalar plugins o crear entradas, hasta acciones avanzadas como importar bases de datos, regenerar miniaturas, migrar configuraciones o automatizar auditorías de seguridad.

En artículos previos hemos utilizado WP-CLI para todas estas tareas y visto su utilidad y su gran versatilidad.

Pero lo que convierte a WP-CLI en un recurso estratégico para mejorar la seguridad de WordPress es su capacidad para operar sin necesidad de acceder al panel de administración web. Al trabajar directamente desde la consola:

  • Reducimos la superficie de ataque, especialmente si el panel está deshabilitado o protegido.
  • Podemos integrar acciones en flujos de trabajo automatizados (CI/CD, cron, scripts bash).
  • Es posible realizar auditorías, escaneos, backups y endurecimiento de la configuración de forma masiva y con precisión quirúrgica.

Por ejemplo, es posible listar todos los usuarios con rol de administrador en segundos, deshabilitar plugins sospechosos o bloquear comentarios automáticamente sin necesidad de login web. Estas acciones son fundamentales en un entorno comprometido o en auditorías preventivas.

  1. Introducción
  2. Primeros pasos con WP-CLI en seguridad
  3. Auditorías de seguridad básicas con WP-CLI
  4. Comprobaciones avanzadas
  5. Fortificación activa de WordPress con WP-CLI
  6. Escaneo de malware y análisis de seguridad
  7. Automatización de tareas de seguridad
  8. Restauraciones seguras desde WP-CLI
  9. Comprobaciones y configuraciones del servidor (extra)
  10. Consejos finales y errores comunes
  11. Recursos útiles
  12. Conclusión

Ventajas frente a plugins gráficos

WP Cli en consola

Aunque existen numerosos plugins de seguridad, WP-CLI ofrece ventajas diferenciales:

  1. Ligereza y velocidad: no consume recursos del frontend ni del dashboard.
  2. Automatización completa: puedes programar tareas con cron o integrarlas en scripts.
  3. Sin dependencias visuales: ideal en entornos sin navegador (VPS, servidores cloud, contenedores).
  4. Ejecución remota: puedes operar desde terminales remotas sin abrir el panel de WordPress.
  5. Transparencia y control: cada acción es trazable, sin interferencias de interfaces visuales.
  6. Accesibilidad en emergencias: si el admin se rompe o el sitio está bajo ataque, WP-CLI puede ser tu vía de salvación.

Por ejemplo, ante un ataque que bloquee el acceso al dashboard, podrías usar WP-CLI para crear un nuevo usuario administrador seguro:

wp user create seguridad user@dominio.com --role=administrator --user_pass=ClaveSegura123

Requisitos mínimos para usar WP-CLI

Para comenzar a usar WP-CLI necesitas:

  • Acceso SSH al servidor donde está instalado WordPress.
  • Tener WP-CLI instalada. Puedes comprobarlo con:
wp cli info
  • PHP instalado, ya que WP-CLI funciona sobre él. Se recomienda PHP 7.4 o superior1.
  • Ubicación dentro del directorio de WordPress o uso del flag --path.
  • Un usuario con permisos suficientes (el mismo que corre el servidor web o con privilegios sudo).

Instalación rápida en servidores Unix:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Y ya puedes usar wp desde cualquier parte.

Entornos comunes donde ya viene preinstalado:

  • WordPress.com (planes Business o superiores)
  • Algunos hostings gestionados
  • Docker containers orientados a WordPress
  • WordPress Studio (requiere activar terminal con WP-CLI)

Antes de continuar, asegúrate de tener una copia de seguridad reciente. WP-CLI es potente, y también puede romper cosas si no se usa con precaución.

Este es el primer paso para convertir WP-CLI en tu aliado en tareas de seguridad.

Primeros pasos con WP-CLI en seguridad

Verificar instalación y versión

Antes de ejecutar cualquier comando, debemos confirmar que WP-CLI está correctamente instalado y detectando nuestra instalación de WordPress. Para ello, como vimos en el apartado anterior, ejecutamos:

wp cli info

Este comando nos dará detalles como la versión instalada, la ruta de PHP usada, el sistema operativo y si reconoce correctamente el wp-config.php del proyecto.

Para asegurarte de que WP-CLI identifica tu WordPress actual, ubícate en la carpeta raíz del proyecto o usa el parámetro --path:

if wp core is-installed 2>/dev/null; then
    echo "WP está instalado"
fi

Si el resultado es WordPress está instalado, puedes seguir. De lo contrario, revisa la ruta o permisos del entorno.

Acceso al entorno y precauciones básicas

WP-CLI debe ejecutarse con un usuario que tenga acceso de lectura/escritura sobre la instalación de WordPress. Lo ideal es usar el mismo usuario que ejecuta PHP en el servidor o un usuario administrador con sudo.

Precauciones importantes:

  1. Nunca ejecutes comandos sin backup. Haz siempre una copia de seguridad completa antes de operaciones destructivas.
  2. Evita ejecutar WP-CLI como root. A menos que lo controles bien, podrías dar permisos incorrectos o corromper el sistema.
  3. Verifica que estás en el entorno correcto. Usa wp option get siteurl para confirmar que estás apuntando al sitio deseado.

Actualizar WordPress, plugins y temas

Uno de los pasos clave para blindar WordPress es mantenerlo al día. Con WP-CLI puedes actualizar de forma rápida y precisa:

Actualizar el núcleo de WordPress

wp core update

También puedes verificar si hay una nueva versión disponible:

wp core check-update

Actualizar todos los plugins

wp plugin update --all

Para actualizar uno solo:

wp plugin update jetpack

Ver lista de plugins con actualización pendiente:

wp plugin list --update=available

Actualizar todos los temas

wp theme update --all

O solo uno específico:

wp theme update kadence

Automatización básica con cron

Podemos crear tareas programadas para ejecutar estas actualizaciones de forma periódica:

0 2 * * * wp core update && wp plugin update --all && wp theme update --all >> /var/log/wpcli-update.log 2>&1

Esta línea ejecuta las actualizaciones cada día a las 2:00 am y guarda un log.

Mantener el core, los plugins y los temas actualizados es la primera línea de defensa ante vulnerabilidades conocidas. Con estos comandos tienes una base sólida para proteger tu instalación desde la terminal.

Auditorías de seguridad básicas con WP-CLI

WP-CLI nos permite hacer una primera auditoría de seguridad sin instalar plugins, accediendo directamente a la base de datos y a la estructura de archivos. Con unos pocos comandos puedes obtener información clave sobre el estado de tu instalación y detectar posibles puntos vulnerables.

Auditoría de seguridad

Listado de usuarios y roles peligrosos

El primer paso es verificar qué usuarios existen y cuáles tienen permisos elevados. Ejecuta:

wp user list --fields=ID,user_login,user_email,roles --format=table

Este comando muestra todos los usuarios junto a sus roles. Busca:

  • Usuarios con rol administrator que no reconoces.
  • Roles personalizados sospechosos o con nombres extraños.
  • Cuentas antiguas, genéricas o sin correo.

Puedes filtrar por rol administrador directamente:

wp user list --role=administrator

Si encuentras usuarios que no deberían tener acceso administrativo, puedes degradarlos o eliminarlos:

wp user delete ID --reassign=1

--reassign=1 transfiere el contenido al usuario 1 (habitualmente el admin principal).

Detección de plugins y temas desactualizados

Los plugins y temas obsoletos son una de las puertas de entrada más comunes para ataques. Con WP-CLI puedes listar rápidamente los que tienen actualizaciones pendientes:

Plugins con updates pendientes:

wp plugin list --update=available

Temas con updates pendientes:

wp theme list --update=available

Además, puedes detectar plugins o temas desactivados desde hace tiempo:

wp plugin list --status=inactive
wp theme list --status=inactive

Revisa si esos plugins/temas siguen siendo necesarios. Si no, elimínalos:

wp plugin delete nombre-del-plugin
wp theme delete nombre-del-tema

Revisión de archivos modificados recientemente

Un indicio típico de hackeo es la modificación de archivos del core o de plugins conocidos. Podemos revisar qué archivos han cambiado recientemente:

Listar los archivos modificados en los últimos 3 días:

find . -type f -mtime -3 -exec ls -lh {} \;

Este comando muestra todos los archivos modificados en los últimos 3 días en el directorio y sus subdirectorios, indicando sus permisos, propietario, tamaño y fecha de modificación.

Comparar archivos del core con los originales:

wp core verify-checksums

Este comando verifica si los archivos del core han sido alterados. Si devuelve archivos con errores, posiblemente estén comprometidos.

Estas auditorías rápidas con WP-CLI te permiten hacer un primer diagnóstico de la seguridad de tu sitio, detectar riesgos y actuar antes de que se conviertan en problemas mayores.

Comprobaciones avanzadas

Las auditorías básicas son solo el principio. Si queremos ir un paso más allá en la seguridad de WordPress, WP-CLI nos permite realizar comprobaciones avanzadas para detectar configuraciones incoherentes, plugins abandonados y posibles rastros de malware oculto en wp-content.

Buscar usuarios sin correo o con permisos inconsistentes

Usuarios sin email válido o con roles mal definidos pueden ser señal de instalaciones migradas incorrectamente o intentos de acceso maliciosos.

Usuarios sin correo electrónico:

wp db query "SELECT ID, user_login FROM wp_users WHERE user_email = '';"

Usuarios con roles no reconocidos:

wp user list --field=roles | sort | uniq -c

Este comando agrupa y cuenta los roles encontrados. Si aparecen roles extraños o poco comunes, revisa su origen y permisos asociados.

Para inspeccionar usuarios con roles no esperados:

wp user list --role=rol_personalizado

En instalaciones hackeadas es habitual encontrar roles como wp_admin, super_editor o similares.

El hosting para los desarrolladores más exigentes

Hosting con funcionalidades avanzadas para un control y rendimiento total de tus proyectos.

Detectar temas y plugins no utilizados o desactivados

Tener componentes innecesarios o desactivados incrementa la superficie de ataque. Aunque estén inactivos, pueden contener vulnerabilidades si no se actualizan.

Plugins no activos:

wp plugin list --status=inactive

Temas no activos:

wp theme list --status=inactive

Elimina los que no uses, como vimos en el apartado previo:

wp plugin delete nombre-del-plugin
wp theme delete nombre-del-tema

Puedes automatizar la limpieza con:

wp plugin list --status=inactive --field=name | xargs -n1 wp plugin delete

Precaución: asegúrate de que los plugins o temas no estén siendo usados por funciones secundarias o hooks antes de eliminarlos.

Buscar archivos sospechosos o cambios recientes en wp-content

La carpeta wp-content es el lugar más habitual donde se alojan archivos maliciosos, especialmente en subcarpetas de plugins, temas o uploads.

Buscar archivos PHP ocultos en uploads:

find wp-content/uploads -type f -name "*.php"

En condiciones normales, no debería haber archivos PHP en esa carpeta.

Buscar archivos recientes (últimos 3 días):

find wp-content -type f -mtime -3 -exec ls -lh {} \;

Buscar archivos sospechosos por nombre:

find wp-content -type f \( -name "*.ico" -o -name "*.phtml" -o -name ".*.php" \)

Comprobar tamaños anómalos:

find wp-content -type f -size +1M -exec ls -lh {} \;

Este comando muestra archivos de más de 1 MB. Muchos backdoors usan tamaños grandes para ocultarse entre ficheros multimedia.

Estas comprobaciones elevan el nivel de tu auditoría. Localiza patrones comunes de malware, malas prácticas y componentes innecesarios que debes eliminar para blindar tu WordPress.

Fortificación activa de WordPress con WP-CLI

Además de auditar y detectar riesgos, WP-CLI nos permite aplicar cambios efectivos para reforzar la instalación de WordPress desde la consola. Algunas acciones requieren cuidado, pero bien ejecutadas aumentan significativamente la seguridad de tu proyecto.

Cambiar el prefijo de las tablas (con respaldo)

El prefijo por defecto wp_ es uno de los objetivos más frecuentes en ataques automatizados de inyección SQL. Cambiarlo reduce el riesgo, aunque no sustituye otras medidas.

Paso 1: Hacer backup de la base de datos

wp db export respaldo-antes-del-cambio.sql

Paso 2: Ver prefijo actual

grep table_prefix wp-config.php

Paso 3: Cambiar el prefijo en wp-config.php

Edita la línea:

$table_prefix = 'wp_';

por (pon el prefijo que desees):

$table_prefix = 'x7d69_';

Paso 4: Renombrar tablas desde WP-CLI

Puedes usar un script o hacerlo manualmente:

for table in $(wp db tables); do
    NEW=$(echo $table | sed 's/^wp_/x7d69_/')
    wp db query "RENAME TABLE $table TO $NEW;"
done

Paso 5: Actualizar referencias en wp_options y wp_usermeta

wp search-replace 'wp_' 'x7d69_' --all-tables

Atención: Este proceso puede romper el sitio si no se realiza correctamente. Es recomendable hacer pruebas en staging primero.

Cambiar las claves de seguridad del wp-config.php

WordPress usa 8 claves y salts para cifrar cookies y sesiones. Si sospechas que alguien pudo acceder a ellas o simplemente quieres renovar la seguridad:

Regenerar claves automáticamente:

wp config shuffle-salts

Esto reescribe las claves en wp-config.php sin afectar la estructura del archivo. Obliga a todos los usuarios a iniciar sesión de nuevo.

Puedes combinarlo con un cambio de contraseñas a usuarios sensibles:

wp user update 1 --user_pass=nuevaClaveFuerte

Reforzar permisos de archivos y carpetas

Una mala configuración de permisos puede permitir que un atacante suba archivos, modifique código o acceda a contenido sensible. WP-CLI junto con comandos del sistema, puede ayudarte a aplicar buenas prácticas.

Permisos recomendados:

  • Archivos: 644
  • Carpetas: 755
  • wp-config.php: 600

Aplicar permisos desde terminal:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php

Establecer el dueño correcto de archivos (Linux):

chown -R www-data:www-data /var/www/html

(Reemplaza www-data por el usuario de tu servidor)

Estos pasos minimizan el riesgo de que un atacante aproveche permisos laxos para alterar la instalación.

Con estas acciones no solo diagnosticamos, sino que actuamos sobre los puntos críticos de seguridad de WordPress directamente desde la línea de comandos.

Escaneo de malware y análisis de seguridad

WP-CLI también puede servirnos como interfaz para lanzar escaneos de seguridad combinados con herramientas especializadas. Aunque WordPress no incluye funciones de detección de malware por defecto, podemos integrarlo con utilidades externas para reforzar nuestra vigilancia.

Usar WP-CLI con herramientas externas (como WPScan)

WPScan es una de las herramientas más potentes para detectar vulnerabilidades conocidas en WordPress. Aunque WP-CLI no lo incluye directamente, podemos ejecutarlo desde consola en conjunto con scripts personalizados2:

Instalación:

gem install wpscan

Escanear un sitio:

wpscan --url https://tusitio.com --enumerate vp,vt,u --api-token TU_TOKEN

Puedes usar WP-CLI para recuperar la URL del sitio y automatizar:

URL=$(wp option get siteurl)
wpscan --url="$URL" --enumerate vp,vt,u --api-token $API_KEY

El escaneo te mostrará:

  • Plugins vulnerables
  • Temas desactualizados
  • Usuarios detectables vía enumeración
  • Headers de seguridad mal configurados

Comandos para la detección de patrones maliciosos

stop patrones maliciosos

A menudo, los archivos maliciosos tienen nombres, patrones o contenidos sospechosos. Podemos usar WP-CLI junto con comandos Unix para hacer un barrido rápido.

Buscar funciones PHP peligrosas:

grep -Ri --include=*.php "eval(" wp-content/
grep -Ri --include=*.php "base64_decode" wp-content/
grep -Ri --include=*.php "shell_exec" wp-content/

Estas funciones no son necesariamente maliciosas, pero si aparecen en plugins o temas que no deberían tenerlas, deberías investigarlo.

Buscar archivos ocultos o sospechosos:

find wp-content/ -name ".*.php"
find wp-content/ -name "*.ico" -exec grep -li "<?php" {} \;

Integración con maldet, ClamAV o rkhunter en servidores

Si estás en un VPS o servidor con control total, puedes usar herramientas antivirus en conjunto con WP-CLI para realizar escaneos regulares.

Maldet (Linux Malware Detect)

maldet -a /ruta/a/tu/sitio

ClamAV:

clamscan -r --bell -i /ruta/a/tu/wordpress

Puedes automatizar escaneos y combinarlos con comandos de WP-CLI:

wp db export ~/seguridad/backup.sql && clamscan -r /var/www/html

rkhunter (Rootkit Hunter)

rkhunter --check --sk

Ideal para detectar alteraciones del sistema que podrían afectar tu WordPress desde capas inferiores.

Combinando estas herramientas, puedes montar un entorno de escaneo automático que incluya verificación de integridad, detección de malware y auditorías preventivas sin depender de plugins.

Automatización de tareas de seguridad

Una de las mayores ventajas de WP-CLI es su capacidad de integrarse con scripts y tareas programadas. Esto permite que las comprobaciones de seguridad no dependan de la intervención manual y puedan realizarse de forma periódica y automatizada.

Crear scripts BASH/WP-CLI para revisar seguridad periódicamente

Puedes crear un script que revise aspectos clave de la seguridad, como usuarios sospechosos, plugins desactualizados o cambios recientes en archivos.

Ejemplo de script auditoria-seguridad.sh

#!/bin/bash

FECHA=$(date +%F_%H-%M)
LOG="/var/log/wp-auditorias/seguridad_$FECHA.log"
SITE_PATH="/var/www/miweb"

cd $SITE_PATH

{
  echo "--- Auditoría de seguridad - $FECHA ---"
  echo "Usuarios con rol administrador:"
  wp user list --role=administrator --fields=ID,user_login,user_email

  echo "Plugins desactualizados:"
  wp plugin list --update=available

  echo "Archivos PHP en uploads:"
  find wp-content/uploads -name "*.php"

  echo "Archivos modificados recientemente:"
  find wp-content -type f -mtime -2 -exec ls -lh {} \;
} >> "$LOG" 2>&1

Hazlo ejecutable:

chmod +x auditoria-seguridad.sh

Logs, informes y alertas por email

Puedes enviar el log por correo electrónico si tienes instalado mail o sendmail en el servidor:

echo "Informe de seguridad" | mail -s "Auditoría WP - $(date +%F)" -A "$LOG" tuemail@dominio.com

Otra opción es subir el informe a un bucket S3 o integrarlo con herramientas como Slack, Telegram o Discord usando sus respectivas APIs.

Cron jobs con validaciones diarias/semanales

Automatizaciones cron

Una vez tengas el script listo, puedes programarlo con cron para que se ejecute automáticamente:

Abrir el cron del usuario:

crontab -e

Ejecutar todos los días a las 3:19 AM:

19 3 * * * /ruta/a/auditoria-seguridad.sh

Ejecutar cada lunes a las 8:06:

6 8 * * 1 /ruta/a/auditoria-seguridad.sh

Este tipo de tareas ayudan a mantener un control continuo sobre el estado de tu instalación, detectar amenazas a tiempo y dejar evidencia en caso de intervenciones forenses.

Con WP-CLI y un poco de scripting puedes montar un sistema de vigilancia constante sin depender de plugins de terceros.

Restauraciones seguras desde WP-CLI

WP-CLI también puede ser una herramienta clave para restaurar tu instalación ante incidentes3. Ya sea para deshacer cambios críticos, revertir hackeos o recuperar configuraciones perdidas, usar la línea de comandos te permite hacerlo rápida y eficientemente.

Backups antes de cambios críticos

Antes de modificar roles, actualizar el core o cambiar el prefijo de tablas, es imprescindible generar una copia de seguridad.

Exportar base de datos:

wp db export ~/respaldo_wp_$(date +%F).sql

Copiar archivos del sitio:

rsync -aP /var/www/miweb/ ~/backups/miweb_$(date +%F)/

Puedes integrar ambas acciones en un script para automatizarlas antes de cualquier despliegue o mantenimiento.

Restauraciones rápidas de base de datos, archivos o usuarios

Restaurar base de datos desde un .sql:

wp db import ~/respaldo_wp_2025-11-20.sql

Restaurar wp-config.php desde un backup local:

cp ~/backups/miweb_2025-12-01/wp-config.php /var/www/miweb/

Restaurar usuario eliminado (si tienes su ID o email):

Si tienes backup de la base de datos puedes recuperar solo su inserción:

wp db query "INSERT INTO wp_users (...) VALUES (...);"

Pero una opción más rápida es recrearlo:

wp user create recuperado usuario@dominio.com --role=administrator --user_pass=claveSegura2025

Casos de uso: revertir archivos y base de datos tras hackeo

  1. Revertir tras ataque: si detectas alteraciones en archivos core:
wp core verify-checksums
wp core download --force
  1. Eliminación masiva de plugins: restaurar desde backup:
rsync -a ~/backups/miweb_2025-11-20/wp-content/plugins/ /var/www/miweb/wp-content/plugins/
  1. Recuperar base de datos limpia: ideal tras infecciones generalizadas:
wp db reset --yes
wp db import ~/respaldo_wp_limpio.sql
  1. Restaurar configuración original: si wp-config fue modificado o dañado:
cp ~/backups/miweb_2025-11-20/wp-config.php .

Estas restauraciones no solo te permiten reaccionar ante problemas, sino también te preparan para tener control total sobre la recuperación en caso de incidentes graves.

Comprobaciones y configuraciones del servidor (extra)

Aunque WP-CLI se centra en WordPress, también podemos usarlo como punto de partida para revisar la configuración del entorno y aplicar ajustes clave a nivel de servidor.

Validar HTTPS y cabeceras seguras desde WP-CLI

Una instalación segura debe trabajar exclusivamente bajo HTTPS y usar cabeceras que protejan el navegador del usuario frente a ataques comunes.

Comprobar si el sitio usa HTTPS:

wp option get siteurl

Revisa que comience con https://. Si no es así, debes actualizar las URLs del sitio:

wp option update home 'https://tusitio.com'
wp option update siteurl 'https://tusitio.com'

Validar cabeceras de seguridad (usando curl desde consola):

curl -I https://tusitio.com

Busca cabeceras como:

  • Strict-Transport-Security
  • X-Frame-Options
  • X-Content-Type-Options
  • Referrer-Policy
  • Content-Security-Policy

Estas deben estar configuradas en tu servidor web (Apache/Nginx/LiteSpeed) o mediante plugins/middleware.

Un hosting a prueba de todo

Olvídate de caídas y carga lenta. Tu web, siempre rápida, segura y disponible.

Forzar redirección HTTPS

Si detectas que tu sitio acepta peticiones HTTP, debes forzar la redirección segura.

Desde .htaccess (Apache/LiteSpeed):

Agrega al inicio:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Desde Nginx:

server {
  listen 80;
  server_name tusitio.com;
  return 301 https://$host$request_uri;
}

WP-CLI no modifica el .htaccess directamente, pero puedes automatizarlo con scripts bash:

echo 'RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]' >> .htaccess

Revisar la versión de PHP y compatibilidades básicas

El rendimiento y seguridad de WordPress dependen también de la versión de PHP utilizada.

Ver versión de PHP activa:

php -v

WP-CLI usará la misma versión de PHP con la que fue ejecutado. Para comprobar compatibilidad con plugins o temas4:

wp plugin list --format=json | jq -r '.[].name' | while read plugin; do
  echo "$plugin:"
  wp plugin get "$plugin" --field=requires_php
done

Detectar incompatibilidades (manual):

Revisa, por ejemplo, si alguno requiere PHP 8.1+ y tu servidor sigue en 7.4.

Estos ajustes aseguran que tu servidor esté alineado con las buenas prácticas de seguridad y rendimiento de WordPress.

Consejos finales y errores comunes

WP-CLI es una herramienta poderosa, que puede agilizar tu trabajo y mejorar la seguridad de tus sitios WordPress, pero también requiere precaución. En esta última sección repasamos errores comunes y algunas recomendaciones clave para que le saques el mayor provecho.

Qué no hacer con WP-CLI si no tienes backups

Nunca ejecutes comandos destructivos o masivos sin contar con una copia de seguridad reciente. Algunos ejemplos de acciones peligrosas:

  • wp db reset: borra toda la base de datos sin confirmación si se usa con --yes.
  • wp plugin delete --all: elimina todos los plugins, incluidos los críticos.
  • wp search-replace: puede modificar miles de registros y romper rutas si no se usan flags adecuados.

Consejo: antes de operaciones sensibles, automatiza un backup rápido:

wp db export ~/respaldo_$(date +%F).sql

Problemas de permisos y entornos compartidos

En hostings compartidos, es común no tener acceso total a WP-CLI o encontrarse con errores de permisos.

Soluciones comunes:

  • Usa el flag --path= si WP-CLI no detecta WordPress.
  • Verifica que el usuario que ejecuta wp tenga acceso de escritura.
  • Si usas sudo, podrías necesitar ajustar los permisos del proyecto para evitar conflictos.
  • En entornos con varios sitios, puedes usar wp --url=tuweb.com para indicar a qué instancia atacar.

Compatibilidad con WordPress.com, Docker o contenedores

WordPress.com

Uno de los grandes beneficios de trabajar con WordPress.com (en planes Business o superiores) es que ya viene con WP-CLI preinstalado y extendido.

Ventajas específicas:

  • No necesitas instalar nada: puedes conectarte vía SSH y usar WP-CLI al instante.
  • Comandos personalizados: WordPress.com tiene comandos extra como wp atomic, wp jetpack, wp wpcomsh5 que permiten gestionar funcionalidades exclusivas de su ecosistema.
  • Entornos seguros: al estar en un entorno gestionado, la versión de WP-CLI está mantenida y auditada por Automattic.

Para acceder:

ssh tu-usuario@sftp.wp.com

Y luego:

wp plugin list

Docker o contenedores

WP-CLI se integra perfectamente en entornos Docker. Puedes crear contenedores que incluyan WordPress + WP-CLI listos para trabajar.

Ejemplo:

docker run -it --rm \
  -v "/ruta/proyecto:/var/www/html" \
  wordpress:cli bash

Esto lanza un contenedor con WP-CLI apuntando a tu proyecto local.

Recursos útiles

Investigar

Tener una buena base de conocimiento y ejemplos prácticos acelera la curva de aprendizaje de WP-CLI y te permite aprovecharlo a fondo desde el primer momento.

Enlaces oficiales y documentación

Scripts de ejemplo listos para usar

  • Script básico de auditoría:
#!/bin/bash
wp user list --role=administrator
wp plugin list --update=available
wp theme list --update=available
wp core verify-checksums
  • Script para actualizar todo y generar backup:
#!/bin/bash
wp db export ~/backups/db_$(date +%F).sql
wp core update && wp plugin update --all && wp theme update --all
  • Script de escaneo básico de malware:
#!/bin/bash
grep -Ri --include=*.php "eval(" wp-content/
find wp-content/uploads -name "*.php"

Guárdalos en /usr/local/bin/ o en un directorio con permisos de ejecución y configúralos como tareas automáticas con cron si lo deseas.

Comandos WP-CLI (y consola) por categoría de seguridad

Auditoría:

  • wp user list
  • wp plugin list --update=available
  • wp core verify-checksums
  • wp plugin verify-checksums
  • find wp-content -mtime -3

Endurecimiento:

  • wp config shuffle-salts
  • wp db export
  • wp plugin delete --inactive
  • chmod, chown en conjunto con WP-CLI

Restauración:

  • wp db import
  • wp core download --force
  • rsync + archivos de respaldo

Automatización:

  • cron
  • Scripts bash con comandos wp
  • Integración con notificaciones externas (correo, Slack)

Conclusión

WP-CLI es mucho más que una herramienta para usuarios avanzados: es una extensión natural del flujo de trabajo profesional en WordPress. Usarlo para tareas de seguridad te da velocidad, control y confianza sobre lo que ocurre en cada rincón del sistema.

Valor real de WP-CLI como herramienta de seguridad

  • Te permite reaccionar ante amenazas sin depender del panel web.
  • Reduce la superficie de ataque al trabajar directamente desde la terminal.
  • Automatiza procesos críticos como actualizaciones, backups o escaneos.
  • Facilita auditorías periódicas sin necesidad de plugins pesados.

En manos expertas, WP-CLI es una navaja suiza que puede incluso reemplazar a varios plugins comerciales.

Buenas prácticas para usarlo en proyectos reales

  1. Siempre con backups previos.
  2. Usar entornos de staging para pruebas antes del entorno en producción.
  3. Mantener scripts versionados con GIT junto al proyecto.
  4. Documentar cada tarea automatizada.
  5. Formar al equipo para que use WP-CLI con criterio.

Este enfoque te ayuda no solo a proteger tus proyectos, sino a profesionalizar la gestión de sistemas WordPress, haciendo que cada acción esté respaldada por comandos reproducibles, seguros y automatizables.

  1. Si tienes instalado WordPress, tendrás PHP, ya que WordPress funciona sobre PHP. ↩︎
  2. Se recomienda instalarlo en local, un servidor de desarrollo o un VPS dedicado para pruebas de seguridad, no en el servidor en producción. Esto evita consumir recursos del servidor de producción y posibles problemas de seguridad al tener herramientas de hacking instaladas en el mismo servidor que alojas los sitios. Debemos tener instalado primero Ruby:
    sudo apt update
    sudo apt install ruby ruby-dev
    sudo gem install wpscan
    ↩︎
  3. https://wordpress.com/es/blog/2025/06/11/backups-en-wordpress-opciones-avanzadas-restauraciones-parciales/ ↩︎
  4. Para el siguiente comando deberemos tener instalada en el sistema la utilidad jq https://jqlang.org/ ↩︎
  5. El subcomando wpcomsh tiene opciones muy interesantes como deactivate-user-plugins y reactivate-user-plugins para desactivar y reactivar con un solo comando todos los plugins de usuario. ↩︎