Problema permisos archivo en WordPress sobre EC2

Un problema reciente que me he encontrado era el no poder subir archivos desde WordPress, que en realidad se aplica a cualquier fichero subido por el servidor Apache (cualquier fichero subido por PHP por ejemplo), en concreto los errores que da WordPress son estos:

El archivo subido no se ha podido mover a wp-content/uploads/…

No se pudo crear el directorio wp-content/uploads/…. Asegúrate de que el servidor tiene permisos de escritura para el directorio superior.

Por FTP los permisos se los directorios eran correctos, ¿entonces que pasa? Que el servicio Apache usa su propio usuario y es a este al que le tenemos que dar los permisos de escritura sobre www/html.

Crear un grupo con permisos de escritura sobre /var/www/html

Vamos a crear un grupo al que añadir todos los usuarios que van a tener permiso para escribir en la parte publica del servidor (/var/www/html), esto nos servirá tanto para el usuario de Apache como para el que usemos para acceder por FTP.

Ahora con el comando “ps aux” podemos ver que usuario está usando Apache, una vez localizado añadimos este usuario al grupo www.

Nota: www-data es el usuario por defecto para Apache en Ubuntu, con el mismo comando podemos añadir otros usuarios, por ejemplo “sudo usermod -a -G www ec2-user”.

Dar permisos de escritura al grupo www

Ahora vamos a cambiar los permisos de escritura sobre los fichero y directorios de /var/www:

Después de estos cambios es necesario reiniciar el sistema para que todos los cambios tengan efecto.

WordPress pide datos FTP al intentar instalar un tema o plugin

Si WordPress te pide los datos de conexión FTP para subir ficheros, por ejemplo al intentar instalar un plugin nuevo, es por que no tiene permiso de escritura sobre el directorio de la web, para solucionarlo asignamos el usuario de apache como propietario del directorio:

WordPress pide datos FTP en MacOS

En MacOS debemos dar los permisos de escritura al usuario “_www“, por cada instalación de WordPress:

Otra solución es cambiar el usuario que usa apache por nuestro usuario de MacOS, así no tenemos que dar permisos por cada instalación de WordPress, esta solución es solo recomendable en entornos de desarrollo. Primero necesitamos saber nuestro usuario y grupo principal, con el comando “id” veremos algo así:

uid=502(admin) gid=20(staff)

Ahora editamos el fichero de configuración de apache (/etc/apache2/httpd.conf) e introducimos los datos anteriores en las lineas “User” y “Group”. Luego reiniciamos apache: