Mainly Internet business, but also life mysteries and videogames

Breaking the 1 year silence — [Solved] WordPress: Is its parent directory writable by the server?

Poichè alcuni sperano che io faccia un post ad un anno esatto di distanza, in modo da celebrare un anno di blog morto, ho deciso invece di postare pochi giorni prima ed evitare pertanto di dare ragione ai conformismi.

Dopo avere installato circa centinaia di siti e blog, voglio aiutare tutti quelli che hanno problemi di permessi di upload con wordpress con questa veloce guida.

Se avete avuto problemi con questo messaggio di errore:

Unable to create directory /wp-content/uploads/2012/02.
Is its parent directory writable by the server?

Quando avete problemi di permessi di Upload con WordPress vi dice che non può scrivere, non dovete buttarvi a pesce lesso su Gogol (Google per i più, ma da noi è stato battezzato Gogol oramai) e scoprire che l’unica soluzione è fare:

[bad idea] chmod 0777 wp-content/uploads/

poichè in questo modo state dicendo al server che chiunque acceda al vostro spazio web può scrivere in quella directory, una scelta di immensa gravità di sicurezza (ovvero se un plugin ha un bug o la versione di wordpress si scopre essere bucabile, sicuramente vi troverete un injection nel vostro sito/blog).

Il motivo per cui i permessi non funzionano con le installazioni di default sono da ricercare nel fatto che probabilmente avere caricato WordPress su di un server utilizzando un utente che non è quello usato dal Web Server, il quale è l’unico utente (oltre a root) che dovrebbe poter scrivere.

Pertanto, la procedura è la seguente.

Riducete al minimo l’accesso alle directory. Per wordpress potete usare quello suggerito da WordPress.org, ovvero

[step 1] chmod 0755 wp-content/uploads/

e poi dovete assegnare la directory che avete creato allo stesso utente del vostro apache web server e al gruppo a cui appartiene l’utente.

Per sapere a quale utente assegnare le cartelle del blog, se potete accedere all’apache.conf, cercate la linea che indica lo user in uso con questo comando.

sudo ps xe  | grep apache2

e leggerete qualcosa come:

 27648 ?        Ss     0:04 /usr/sbin/apache2 -k start APACHE_PID_FILE=/var/run/apache2.pid PATH=/usr/local/bin:/usr/bin:/bin LANG=C APACHE_RUN_GROUP=www-data APACHE_RUN_USER=www-data

dove leggete che lo user e il gruppo sono www-data e www-data; quindi andate nel vostro blog e fate:

[step 2] chown  -R www-data.www-data wp-content/uploads/

in questo modo non dovrete fare quell’orribile 777.

Se il ps xe non vi dà risultati, allora potete leggere l’apache.conf e usare le informazioni là inserite come User e Group, ma nei moderni OS le informazioni sono trasferite negli script di startup del web server e non più nell’apache.conf come variabile ${APACHE_RUN_USER}. Potete localizzare il vostro apache.conf velocemente scrivendo ad esempio:

apache2ctl -V

oppure httpd -V

e leggere la linea con

SERVER_CONFIG_FILE=

A presto.

 

Addendum per “An error occurred while updating … “.

Aggiungo una nota ad un errore che può apparire in fase di Aggiornamento anche dopo che tutti i settings e permessi sono corretti.

Se tentate di aggiornare un plug-in e leggere un errore del tipo

An error occurred while updating [PlugIn Name Here]: Could not create directory. […]

allora controllate che non abbiate attivato un plug in di security come AskApache Password Protect, ad esempio, o altri plug-in che lavorano su Apache mod_security.

In quei casi dovete disabilitare il Plugin di WordPress o mod_security (temporaneamente) per risolvere il problema.

Non vi consigli di disabilitare mod_security con

[bad idea] a2dismod mod-security2

poichè le stringhe di configurazione del modulo nella configurazione del sito o delle directory tramite htaccess rimangono e diventano “errori” per Apache e il riavvio del WebServer genera un downtime grave, ma piuttosto vi consiglio di inserire (o modificare l’htaccess per la wp-content/upgrade/ in modo da disabilitarlo, inserendo:

<IfModule mod_security.c>

SecFilterEngine Off

</IfModule>

e questo non necessita di riavvio di Apache (se l’htaccess è abilitato).

Buon blog!

5 commenti

  1. Giacomo

    Perchè hai smesso di postare e fare discussioni? Cavolo sei bravo!

  2. wobinda

    scusa la mia ignoranza. fino alla questione dei permessi ti capisco, ma da qui in poi no…

    e poi dovete assegnare la directory che avete creato allo stesso utente del vostro apache web server e al gruppo a cui appartiene l’utente.
    Per sapare a quale utente dare le cartelle del blog, se potete accedere all’apache.conf, cercate la linea che indica lo user in uso con questo comando.

    puoi spiegarti meglio?? le ho provate tutte, e tra poco inizio a prendere a pugni il computer. grazie

  3. Alessandro Bonzi

    il web server e’ impostato per girare con un certo user name e user group. Ad esempio, e’ tipico lo user name www-data e lo usergroup www-data (uguale) sui sistemi Linux, ma non e’ detto e dipende dalla configurazione decisa dai sistemisti.
    Se la cartella di WordPress e’ stata creata da un altro utente, e’ probabile che WordPress non possa fare Upload dei file perche’ non gli appartiene (da li’ l’errore Cannot Create o Cannot Upload). Quindi devi scoprire con quale username e usergroup sta girando il tuo web server e dare alla cartella di wordpress lo stesso utente e lo stesso gruppo.
    Se stai usando Apache e puoi accedere alla shell del server, puoi digitare:
    ps xe | grep apache2
    per vedere la linea con cui e’ eseguito il Web Server e leggere lo user name e user group che sta usando.
    Se fosse www-data e www-data, allora sarebbe poi risolto il problema assegnando alla tua cartella wordpress tali valori con (sempre da shell):
    chown -R www-data.www-data tuacartelladiwordpress/
    Se non hai accesso alla shell, allora il problema e’ capire quale user e quale gruppo devi assegnare. Puoi guardare i file (funzionanti) di altre cartelle del web server attraverso un ftp client, ma l’ftp client che usi deve mostrarti Owner e Group dei file (non tutti i software li mostrano con facilita’) e poi cambiare quelli di wordpress/
    Fammi sapere se e’ piu’ chiaro.

  4. wobinda

    non molto in realtà… però credo di aver capito quale potrebbe essere il problema. il sito è stato acquistato tramite aruba, hosting windows. credo di dover passare ad hosting linux, ti risulta? grazie per la tua disponibilità.

  5. Alessandro Bonzi

    non so molto di windows server, penso il problema sia simile ma non so aiutarti….

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.