Non riesco a installare nuovi plugin a causa dell'errore "Impossibile creare la directory"
Un membro della facoltà sta avendo difficoltà con un'installazione WordPress didattica. Risolvere i singoli problemi di permessi è stato un processo casuale e si è trasformato in un fastidio ricorrente, quindi chiedo qui. Cosa posso fare per far funzionare WordPress senza problemi? Gli errori che ricevono sono:
Installazione Plugin: Lightbox 2 2.9.2 Download del pacchetto di installazione da http://downloads.wordpress.org/plugin/lightbox-2.2.9.2.zip… Estrazione del pacchetto… Impossibile creare la directory. /home/CIM140/public_html/wordpress/wp-content/upgrade/lightbox-2.tmp
Quando eseguo su come www-data (l'utente con cui viene eseguito Apache in Ubuntu), posso creare quella directory senza problemi. La mia istanza di test wp installa questo plugin correttamente, quindi non capisco perché fallisca per loro.

@pwnguin,
Ho avuto gli stessi problemi eseguendo mod_php con WordPress e alla fine ho trovato la soluzione.
# chown www-data:www-data /home/CIM140/public_html/wordpress/ -R
Fintanto che TU controlli il server, questo non causerà alcun problema di sicurezza.
MODIFICA:
Potresti anche dover cambiare il tuo umask a 022 in modo che le nuove directory create da WordPress abbiano i permessi 755 e i file abbiano i permessi 644.
Un'altra opzione è sovrascrivere i permessi predefiniti dei file in wp-config.php:
define('FS_CHMOD_DIR', (0755 & ~ umask()));
define('FS_CHMOD_FILE', (0644 & ~ umask()));
Puoi anche forzare il metodo del filesystem per gli aggiornamenti.
- (Preferenza Primaria) "Direct" forza l'uso di richieste di I/O File Dirette da PHP, questo può aprire problemi di sicurezza su host configurati male, ma viene scelto automaticamente quando appropriato.
- (Preferenza Secondaria) "ssh" forza l'uso dell'Estensione SSH di PHP.
- (3a Preferenza) "ftpext" forza l'uso dell'Estensione FTP di PHP per l'accesso FTP, e infine
- (4a Preferenza) "ftpsockets" utilizza la Classe Sockets di PHP per l'accesso FTP.
Questi metodi possono essere definiti in wp-config.php con: define('FS_METHOD', 'ftpext');
Puoi ottenere tutte le costanti attualmente definite eseguendo il comando print_r(@get_defined_constants());
in php.

esempio: drwxrwsr-x 6 www-data www-data 4096 2010-09-22 23:15 wp-content

Prova a cambiarli in drwxr-xr-x 7 www-data www-data 4096 Sep 24 09:38 wp-content

Inoltre non ho mai usato l'attributo SGID su una directory, cioè: chmod g+s Non penso che sia necessario. Qualcuno mi corregga se sbaglio.

Ah, dopo aver contattato la facoltà, sembra che stia usando SSH di default mentre la mia istanza di test utilizza l'IO diretto. Quindi è il suo utente che non ha i diritti per creare la directory.

Per capire perché stai riscontrando questi problemi, devi comprendere i concetti fondamentali della proprietà dei file.
In sostanza, sai che Apache viene eseguito come utente www-data. Questo è il motivo per cui impostare tutto come proprietà di quell'utente funziona, perché WordPress verifica che possa creare file come l'utente che possiede i suoi stessi file. Quindi, quello che stai facendo è rendere tutto di proprietà dell'utente che possiede i file.
Se hai il controllo totale e completo della macchina, questo va bene. D'altra parte, se è un server di hosting condiviso, allora hai creato una falla nella sicurezza.
Normalmente, i server web vengono eseguiti come un determinato utente (come www-data) che poi esegue codice di altri utenti (come "otto", il mio account utente). In questa situazione, il server web non avrebbe la possibilità di creare file come "otto", e quindi non sarebbe in grado di creare correttamente file come il mio account. Pertanto, questo controllo di WordPress per creare file correttamente posseduti e quindi poter installare plugin o aggiornare file fallirebbe, correttamente, perché avere i miei file di proprietà dell'utente condiviso del server web sarebbe un rischio per la sicurezza.
In tal caso, WordPress dovrebbe correttamente chiedermi le credenziali FTP, o qualcosa del genere. Queste sarebbero un modo per aggirare il problema dell'account utente autenticandosi come l'utente che dovrebbe scrivere i file, e poi scriverli come quell'utente.
Ora, stai cercando di risolvere questo problema cambiando tutti i file di WordPress in modo che siano di proprietà dello stesso account con cui il server web scrive i file. L'approccio più normale per questo è cambiare il modo in cui il server web scrive i file, per consentire al processo PHP di essere "di proprietà" dell'account utente con cui sta eseguendo i file.
La risposta generale a questo è "suphp". Questa versione di PHP imposta l'utente con cui viene eseguito il processo PHP allo stesso utente del proprietario dei file PHP che sta eseguendo. Questo è più sicuro nelle configurazioni di hosting condiviso, perché assicura che un processo PHP eseguito dal server web condiviso venga eseguito come proprietario dei file PHP, e quindi non possa leggere gli account di altri utenti e simili.
Su Ubuntu, credo che questo sia il modo generale per farlo:
Installa suphp:
$ sudo apt-get install libapache2-mod-suphp
Disabilita il vecchio mod_php
$ sudo a2dismod php5
Riavvia Apache
$ sudo /etc/init.d/apache2 restart
Ed ecco fatto. Ora, fai in modo che i tuoi file PHP di WordPress siano di proprietà del loro normale proprietario. Nessun trucco speciale, nessun cambiamento di permessi o proprietà o cose del genere. Dato che il processo PHP verrà eseguito come proprietario di quei file, sarà in grado di scriverci come quel proprietario. Le directory dovrebbero essere 755, i file dovrebbero essere 644 (nota, suphp non gradisce che i file siano scrivibili dal gruppo, quindi 755/644 è l'impostazione corretta dei permessi).

È necessario concedere i permessi di scrittura alle directory rilevanti. Idealmente, dovresti farlo solo per il file o la cartella specifica e poi ripristinare i permessi per non lasciare il tuo sito vulnerabile.
Puoi risolvere questo problema utilizzando i seguenti comandi dalla riga di comando (supponendo che ti trovi nella cartella principale di WordPress):
# cd wp-content
# chmod -R a+w plugins
# chmod -R a+w themes
# chmod -R a+w upgrade
La soluzione più sicura è aggiungere apache allo stesso gruppo del proprietario dell'installazione di WordPress e modificare tutti i permessi del gruppo in scrivibili.

- Se esiste una soluzione più dettagliata, aggiungila qui, invece di collegarti ad essa. 2. no, il webserver non dovrebbe in alcun modo essere in grado di scrivere direttamente nelle directory del codice, a meno che non ti piaccia essere hackerato.

@MarkKaplun ma allora gli aggiornamenti delle estensioni non funzionano, cosa che la maggior parte degli utenti di WP considera il modo "normale" di gestire un sito. Un'affermazione un po' troppo forte. Il server che può scrivere su wp-content è relativamente peggio per la sicurezza, ma di per sé non è un grosso problema.

@MarkKaplun: Anche la risposta accettata dice sostanzialmente la stessa cosa - l'unica differenza è che è specifica per Apache mentre la mia è generica.

- Se la tua risposta è la stessa, qual è il senso di averla? 2. Chi ha detto che la risposta accettata è grandiosa?

@Rarst, è anche meno conveniente chiudere a chiave la porta d'ingresso di casa e chiudere le finestre. Se le persone preferiscono cercare file hackerati in tutto il loro server invece che solo nella directory degli upload, possono fare ciò che suggerisce la risposta. Gli aggiornamenti di plugin/temi di Wordpress è meglio farli tramite un server ftp se non si ha voglia di usare un'app client sftp.

A volte mi è capitato di avere siti in cui correggere i permessi di directory e file non era sufficiente per risolvere il problema. Ho poi scoperto che una o più directory avevano impostato il flag immutabile. Questo può essere facilmente risolto eseguendo chattr -R /var/www/sub.domain.tld
come root.
