Permisos de ficheros en WordPress

Última revisión: 2 de octubre de 2021

Cuando se realiza una instalación nueva de WordPress, un elemento a tener presente es quién es el propietario de los ficheros del sistema y qué permisos tienen para poderse leer o escribir. Esto es importante porque en momentos de un posible hackeo se podrán extender los problemas más o menos.

Lo primero es asegurarse qué usuario va a ser el que acceda a los ficheros y a qué grupo pertenece. Por norma general los sistemas vienen configurados para Apache HTTPD o nginx, por lo que podemos configurarlo para ellos. Se puede ejecutar este comando por SSH desde la carpeta de instalación del WordPress.

En Apache HTTPD:

chown -R apache:apache ./

En nginx:

chown -R www-data:www-data ./

Posteriormente hay que dar los permisos de [lectura / escritura / ejecución] correspondientes a los ficheros. En general daremos permisos 755 a las carpetas, y 644 a los ficheros.

find /var/www/html/ -type d -exec chmod 755 {} \; find /var/www/html/ -type f -exec chmod 644 {} \;

Si el sistema está bien configurado, podría ser un poco más agresivo y bloquear aún más accesos externos de usuarios indeseados. En este caso dejaremos siempre la última de las tres cifras a cero. En la medida de lo posible esta es la mejor opción y más segura.

find /var/www/html/ -type d -exec chmod 750 {} \; find /var/www/html/ -type f -exec chmod 640 {} \;

Una vez hayamos dado estos permisos a todo el WordPress, haremos un par de excepciones con dos ficheros muy concretos: el [wp-config.php] y el [readme.html].

El primero de ellos hemos de dejar que el sistema sea capaz de leerlo, pero ya está, nadie más debería cambiar o acceder.

chmod 600 wp-config.php

Si queremos ser algo más agresivos y que ni el propio sistema sea capaz de modificarlo (lo mejor es que ningún fichero lo modifique), podemos ejecutar el comando:

chmod 400 wp-config.php

En el primer caso el fichero podría leerse y escribirse; en el segundo sólo leerse. Esto podría hacer que, si tu WordPress necesita hacer algún cambio en el fichero, no se pueda llegar a aplicar y lo tengas que modificar manualmente.

El segundo es un fichero que ofrece una pequeña situación con la seguridad, la versión del WordPress. Es el fichero más sencillo para detectarla y no aporta nada más al sitio, por lo que bloquearemos su lectura, dejando sólo que se pueda escribir cuando haya actualizaciones.

chmod 200 readme.html

Aunque si queremos ponernos en modo más agresivo, este fichero no debería ser accesible para nada, por lo que podemos quitarle todos los permisos.

chmod 000 readme.html

Para finalizar, de la misma forma que hemos cambiado los permisos en los ficheros, vamos a bloquear su acceso de forma pública por los usuarios web. Así, el sistema será capaz de leerlos o actualizarlos, pero no serán navegables.

En Apache HTTPD (dentro del fichero .htaccess):

<files wp-config.php>
  deny from all
</files>
<files readme.html>
  deny from all
</files>
<files license.txt>
  deny from all
</files>

En nginx (dentro del fichero de configuración del sitio):

location ~ .php$ {
  location ~ wp-config {
    deny all;
  }
  location ~ /xmlrpc.php {
    limit_except POST {
      deny all;
    }
  }
}
location ~* readme.(html|txt) {
  deny all;
}
location ~* ^license.txt {
  deny all;
}

Para acabar, un detalle que puede venir de serie activo en los servidores Apache HTTPD es el listado de los contenidos de los directorios. Para evitar esto, y que no se muestren los ficheros de algunas carpetas como la de [uploads], debemos desactivar una opción en el .htaccess.

En Apache HTTPD (dentro del fichero .htaccess):

Options -Indexes

Seguir con Seguridad para WordPress


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.