Después de un incidente se suele recomendar directorios 755 y archivos 644. Pueden ser valores razonables en algunos hostings, pero el propietario, manejador PHP, grupos, ACL y método de despliegue determinan si son seguros.
Los permisos son defensa en profundidad. No eliminan credenciales robadas ni código vulnerable.
Mapea el modelo de ejecución
Averigua quién posee los archivos y con qué usuario se ejecuta PHP-FPM o Apache. Compara archivos legítimos creados por WordPress, SFTP y despliegues.
En hosting compartido, PHP puede ejecutarse como el usuario de la cuenta. En modelos de grupos antiguos, endurecer demasiado puede romper uploads y actualizaciones.
No ejecutes un chmod recursivo desde un directorio de trabajo incierto.
Conserva los metadatos actuales
Crea una instantánea y exporta ruta, propietario, grupo, modo y ACL antes de cambiar nada. Una propiedad inesperada puede revelar escrituras cruzadas o modificaciones privilegiadas.
Registra enlaces simbólicos y almacenamiento montado o compartido. No sigas symlinks hacia otra aplicación.
Censura nombres de usuario en informes externos.
Separa código y contenido escribible
WordPress necesita escribir en uploads, cachés, actualizaciones y, a veces, idiomas o recursos generados. Documenta cada directorio escribible esperado y su componente propietario.
La ejecución PHP debe bloquearse normalmente en uploads mediante configuración admitida por el servidor. Hacer uploads no escribible impide subir medios, pero no limpia PHP malicioso que ya exista.
No uses permisos 777 como solución temporal.
Restaura primero el propietario
Utiliza el panel, proveedor o administrador autorizado para establecer usuario y grupo correctos. Cambiar el modo no arregla un archivo propiedad de otra cuenta.
No ejecutes chown sobre un servidor compartido sin ruta y autoridad exactas. En plataformas gestionadas puede contradecir sus controles.
Confirma que los usuarios de despliegue y actualización pueden trabajar sin compartir una cuenta amplia.
Aplica privilegio mínimo por áreas
Parte de la referencia documentada del hosting y después restringe configuraciones sensibles como wp-config.php cuando sea compatible. Mantén plugins y temas escribibles solo por el proceso previsto.
Desactivar la edición desde el panel reduce una vía:
define('DISALLOW_FILE_EDIT', true);
No impide que un plugin comprometido o una cuenta SFTP escriban. Prueba el flujo de actualización tras añadirlo.
Protege configuración y entorno
Inventa .env, .user.ini, php.ini, includes del servidor y configuración de despliegue cerca de la raíz. Pueden contener secretos o directivas prepend y ser más sensibles que un plugin.
Asegura que no sean descargables y que solo los lean servicios necesarios. No muevas un archivo sin revisar cómo lo referencian hosting, copias y cron.
Rota secretos expuestos y confirma que los valores antiguos no permanecen en archivos públicos o repositorios.
Revisa ACL y directorios padre
Los modos POSIX pueden parecer restrictivos mientras una ACL concede acceso a otro usuario. Los permisos del directorio padre también controlan recorrido y creación.
Inspecciona dominios adicionales anidados y propiedad de webs vecinas. Separa sitios críticos en usuarios de hosting distintos cuando sea viable.
Elimina cuentas de FTP o despliegue abandonadas y rota credenciales comprometidas.
Prueba actualizaciones y reversión
En staging sube un medio, actualiza un plugin seguro, regenera cachés y ejecuta backups. Observa qué rutas necesitan escritura y documenta excepciones.
No concedas escritura a toda la raíz porque falle una carpeta de caché. Corrige la ruta y el propietario concretos del componente.
Monitoriza cambios de permisos después de despliegues automáticos.
Verifica el resultado de seguridad
Confirma que no queda PHP en uploads, los hashes del código de confianza son limpios y solo usuarios conocidos pueden modificarlo. Observa más allá del periodo anterior de reinfección.
Pide ayuda si la propiedad está mezclada, las ACL no están claras o actualizar exige modos inseguros. Comparte un mapa censurado, nunca credenciales.
El resultado correcto es privilegio mínimo mantenible con un escritor conocido, no un número idéntico aplicado a todos los archivos.