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.
1 |
sudo groupadd www |
Ahora con el comando “ps aux” podemos ver que usuario está usando Apache, una vez localizado añadimos este usuario al grupo www.
1 |
sudo usermod -a -G www www-data |
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
1 |
sudo chown -R root:www /var/www |
Ahora vamos a cambiar los permisos de escritura sobre los fichero y directorios de /var/www:
1 2 3 |
sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} + find /var/www -type f -exec sudo chmod 0664 {} + |
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:
1 |
sudo chown -R www-data:www-data path/to/wordpress |
WordPress pide datos FTP en MacOS
En MacOS debemos dar los permisos de escritura al usuario “_www“, por cada instalación de WordPress:
1 |
sudo chown -R _www path/to/wordpress ; sudo chmod -R g+w path/to/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:
1 |
sudo apachectl restart |