Cómo establecer los permisos apropiados en las carpetas de un sitio web con WordPress sobre un equipo con sistema operativo Linux CentOS 7. Os mostraremos los permisos en carpetas y ficheros y la configuración óptima de WordPress para la carpeta temporal y la de descargas.

Requisitos para establecer permisos correctos en carpetas de WordPress en Linux CentOS 7

Necesitaremos un equipo con sistema operativo Linux CentOS 7 (este procedimiento es aplicable a otras distribuciones de Linux con pequeñas variaciones) y con WordPress y Apache instalados.

Para el acceso a la administración de los permisos necesitaremos también un usuario administrador de Linux y otro usuario administrador de WordPress.

Síntomas y problemas causados por no tener los permisos correctamente aplicados con Linux y WordPress

Si no tenemos los permisos correctamente aplicados podemos experimentar diversos problemas, algunos de ellos:

  • No poder actualizar e instalar plugins, devolviendo errores como:

Warning: unlink(/tmp/nombre_plugin-7.5.0.2-GMz2N5.tmp): No such file or directory in /var/www/proyectoa/wp-admin/includes/file.php on line 979

Ocurrió un error al actualizar nombre_plugin: Descarga fallida. La carpeta de destino para cargar el archivo no existe o no tiene permisos de escritura.

Descargando la actualización desde https://downloads.wordpress.org/plugin/nombre_plugin-7.5.0.2.zip…
Descomprimiendo actualización…

Ocurrió un error al actualizar nombre_plugin: No ha sido posible crear el directorio

  • No poder actualizar WordPress, obteniendo errores como los anteriores.
  • Dejarán de funcionar plugins como Image Elevator que sube una imagen del portapapeles a una entrada de WordPress. Es un ejemplo de plugin que podría dejar de funcionar si no tenemos los permisos correctamente establecidos.
  • Si damos demasiados permisos a las carpetas (777) podremos quedar expuestos a serios riesgos de seguridad.
  • No podremos subir imágenes a una entrada ni a una página, en general no podremos subir ficheros como objetos a la biblioteca de medios.

Establecer los permisos apropiados para las carpetas y ficheros de un sitio web WordPress sobre Linux CentOS 7

En primer lugar comprobaremos el nombre del usuario que utiliza Apache, el servidor web, lo normal en Linux CentOS 7 es que sea «apache», pero es conveniente comprobarlo ejecutando el siguiente comando:

Que normalmente devolverá: apache

Estableceremos como propietario de la carpeta donde tengamos ubicada la web a este usuario «apache». La ubicación de los sitios web por defecto en Linux CentOS y Apache es: /var/www.

Así que ejecutaremos el siguiente comando Linux para establecer como propietario de la carpeta al usuario apache:

cambiando «nombre_carpeta_sitio_web» por el nombre que hayamos establecido para la carpeta de nuestro sitio web dentro de /var/www, si no lo sabemos podemos hacer un:

Para obtener el nombre de dicha carpeta.

Ahora estableceremos los permisos a todas las carpetas de nuestro sitio web, permisos 644:

Establecer los permisos apropiados para las carpetas y ficheros de un sitio web WordPress sobre Linux CentOS 7

Con el siguiente comando:

Para finalizar con los permisos de carpetas y ficheros, ahora deberemos establecer los permisos apropiados, permisos 755, para las carpetas:

Establecer los permisos apropiados para las carpetas y ficheros de un sitio web WordPress sobre Linux CentOS 7

Con este otro comando:

Configurar permisos para SELinux en Linux CentOS 7

Incluso con los permisos anteriormente establecidos puede que sigamos teniendo problemas en la actualización e instalación de plugins o de WordPress, esto es debido a que seguramente tengamos activo SELinux (Security-Enhanced Linux), un módulo de seguridad para el kernel de Linux .

Para comprobar si tenemos activo SELinux en Linux CentOS 7 podemos ejecutar este comando:

que nos devolverá algo así:

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

Como vemos está enabled y en modo enforcing, por lo tanto está activo. Para configurar los permisos correctos en SELinux para nuestro sitio web WordPress ejecutaremos este comando:

Configuración de WordPress para establecer carpeta de uploads

Además de establecer los permisos anteriores a nivel de sistema operativo, también es conveniente configurar WordPress correctamente para indicar la carpeta de subidas (uploads) y la temporal. Para ello accederemos a la administración de WordPress a través de un navegador, con la dirección:

http://sitioweb/wp-admin

Nos iremos a «Ajustes» y pulsaremos en «Medios»:

Configuración de WordPress para establecer carpeta de uploads

En «Guardar los archivos subidos en esta carpeta» indicaremos la ruta completa donde se encuentre la carpeta uploads. Es muy importante indicar la ruta completa y correcta, para el caso de un servidor con Linux CentOS la ubicación por defecto de los sitios web es /var/www, para un sitio web con la carpeta poryectoa quedaría de la siguiente forma:

/var/www/proyectoa/wp-content/uploads

Configuración de WordPress para establecer carpeta de uploads

Guardaremos estos cambios pulsando en «Guardar cambios»:

Configuración de WordPress para establecer carpeta de uploads

Si no nos aparece esta opción que en determinadas instalaciones y versiones de WordPress puede que no aparezca, es posible modificar este valor accediendo directamente a la tabla MySQL de WordPress llamada wp_options, donde wp_ será el prefijo de tabla que hayamos asignado en la instalación de WordPress. Ejecutando esta consulta SQL en un editor de MySQL, como MySQL Workbench:

Configuración de WordPress para establecer carpeta de uploads

Como se puede ver en la imagen, la consulta SQL anterior nos devolverá un registro, que es precisamente el que contiene en el campo option_name el valor upload_path y en option_value podremos indicar la ruta correcta y completa de la carpeta de uploads. El cambio podemos hacerlo con la siguiente consulta SQL:

Configuración de WordPress para establecer carpeta temporal

Es recomendable también establecer la ubicación de la carpeta temporal de WordPress, si no se establece se cogerá la ubicación por defecto que en Linux CentOS 7 y en una instalación estándar de WordPress y Apache podría ser /tmp y el usuario apache podría no tener permisos para escribir en esta carpeta. Por lo tanto recomendamos indicar cuál será la ubicación de esta carpeta a WordPress, para ello editaremos el fichero wp-config.php de la carpeta raíz de nuestro sitio web WordPress y añadiremos la siguiente línea (si ya existe comprobaremos que la ruta es correcta):

define(‘WP_TEMP_DIR’, ‘/var/www/proyectoa/wp-content/uploads/tmp’);

Configuración de WordPress para establecer carpeta temporal

Lógicamente cambiaremos la ruta del ejemplo por la nuestra correspondiente. También se podría usar una ruta relativa en lugar de la absoluta del ejemplo:

define(‘WP_TEMP_DIR’, ABSPATH . ‘wp-content/uploads/tmp’);

Pero en este caso conviene colocar esta línea debajo de:

Con los pasos anteriores ya podremos instalar y actualizar plugins, así como actualizar el propio WordPress, también podremos subir ficheros a la biblioteca de medios.