Autorizzazioni file corrette per WordPress [chiuso]


399

Ho dato un'occhiata qui, ma non ho trovato dettagli sui migliori permessi sui file. Ho anche dato un'occhiata ad alcune delle domande del modulo di WordPress qui, ma chiunque suggerisca che 777 abbia ovviamente bisogno di una piccola lezione di sicurezza.

In breve la mia domanda è questa. Quali autorizzazioni dovrei avere per quanto segue:

  1. cartella principale che contiene tutto il contenuto di WordPress
  2. wp-admin
  3. wp-content
  4. wp-includes

e poi tutti i file in ognuna di quelle cartelle?


Fondamentalmente, solo la cartella di upload di Wordpress dovrebbe essere 777 ma sarebbe una seria minaccia alla sicurezza. Se si utilizza un server con Suphp abilitato, non è necessario modificare le autorizzazioni manualmente.
Ali F

4
Sto votando per chiudere questa domanda come off-topic perché è off-topic per il tag wiki estratto: "Le domande off-topic includono quelle relative allo sviluppo del tema, all'amministrazione di WordPress, alle migliori pratiche di gestione, alla configurazione del server, ecc."
Adriaan

Risposte:


499

Quando si configura WP, l'utente (il server Web) potrebbe aver bisogno dell'accesso in scrittura ai file. Quindi potrebbe essere necessario perdere i diritti di accesso.

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--

Dopo l'installazione dovresti restringere i diritti di accesso , secondo Hardening WordPress tutti i file ad eccezione di wp-content dovrebbero essere scrivibili solo dal tuo account utente. wp-content deve essere scrivibile anche da www-data .

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

Magari vuoi cambiare i contenuti in wp-content in seguito. In questo caso potresti

  • passare temporaneamente all'utente in www-data con su,
  • dare al gruppo wp-content l'accesso in scrittura 775 e unirsi al gruppo www-data o
  • concedi al tuo utente i diritti di accesso alla cartella usando gli ACL .

Qualunque cosa tu faccia, assicurati che i file dispongano delle autorizzazioni rw per i dati www .


2
Kornel fornisce uno di questi link autorevoli di seguito. Vedi anche codex.wordpress.org/Changing_File_Permissions , il documento di Apache httpd.apache.org/docs/2.2/misc/security_tips.html e praticamente qualsiasi ricerca su Google sull'argomento. Ma nel caso generale, in caso di dubbio, non dare accesso in scrittura (e certamente nessuna proprietà) e allentarsi caso per caso, non il contrario (principio del privilegio minimo che stai violando qui).
Calimo,

22
Perché esiste una funzione di aggiornamento automatico se non funziona nemmeno senza modificare le autorizzazioni ??
Malhal,

6
@ ManuelSchneid3r, vedo alcuni file PHP con contenuto wp, si suppone che questi siano davvero scrivibili da www-data??? Sembra davvero del tutto sicuro.
Alexis Wilke,

12
Questa soluzione impedirà a wordpress di installare "aggiornamenti di sicurezza automatici". È necessario eseguire manualmente i passaggi precedenti per ogni aggiornamento minore di wordpress.
Jeroen,

11
Questa non è una configurazione sicura. L'impostazione delle autorizzazioni di lettura su questi file non ha alcun effetto quando l'utente apache possiede anche i file! NON USARE. Fare riferimento a codex.wordpress.org/Changing_File_Permissions
PodTech.io

60

Dare l'accesso completo a tutti i file wp www-dataall'utente (che in questo caso è l'utente del server Web) può essere pericoloso. Quindi piuttosto NON farlo:

chown www-data:www-data -R *

Può essere utile nel momento in cui stai installando o aggiornando WordPress e i suoi plug-in. Ma quando hai finito non è più una buona idea mantenere i file wp di proprietà del server web.

In sostanza, consente al server Web di inserire o sovrascrivere qualsiasi file nel tuo sito Web. Ciò significa che esiste la possibilità di assumere il controllo del tuo sito se qualcuno riesce a utilizzare il server Web (o una falla di sicurezza in alcuni script .php) per inserire alcuni file nel tuo sito Web.

Per proteggere il tuo sito da un simile attacco, dovresti:

Tutti i file devono essere di proprietà del tuo account utente e devono essere scrivibili da te. Qualsiasi file che necessita dell'accesso in scrittura da WordPress deve essere scrivibile dal server Web, se la configurazione dell'hosting lo richiede, ciò può significare che tali file devono essere di proprietà del gruppo dall'account utente utilizzato dal processo del server Web.

/

La directory principale di WordPress: tutti i file dovrebbero essere scrivibili solo dal tuo account utente, tranne .htaccess se desideri che WordPress generi automaticamente regole di riscrittura per te.

/wp-admin/

L'area di amministrazione di WordPress: tutti i file devono essere scrivibili solo dal tuo account utente.

/wp-includes/

La maggior parte della logica dell'applicazione WordPress: tutti i file devono essere scrivibili solo dal tuo account utente.

/wp-content/

Contenuto fornito dall'utente: inteso come scrivibile dal tuo account utente e dal processo del server web.

All'interno /wp-content/troverai:

/wp-content/themes/

File dei temi. Se si desidera utilizzare l'editor dei temi integrato, tutti i file devono essere scrivibili dal processo del server Web. Se non si desidera utilizzare l'editor dei temi integrato, tutti i file possono essere scrivibili solo dal proprio account utente.

/wp-content/plugins/

File plugin: tutti i file dovrebbero essere scrivibili solo dal tuo account utente.

Altre directory che potrebbero essere presenti /wp-content/devono essere documentate da qualsiasi plugin o tema che le richieda. Le autorizzazioni possono variare.

Fonte e informazioni aggiuntive: http://codex.wordpress.org/Hardening_WordPress


dal tuo account utente. significa che l'utente esegue gli script php sul sito (normalmente l'utente apache)?
Shasi Kanth,

4
@shasikanth No, l'utente apache è quello che definisce "processo del server web". L'account utente è il tuo utente Linux (utente ssh, ftp, ecc.)
Daniel Bang

In questa risposta e nella risposta accettata, l'utente (non i dati www) dovrebbe far parte del gruppo dati www?
user658182

1
No, questo è il punto.
Piotr Nawrot il

1
Il problema che riscontro è ogni volta che faccio del mio "utente" SSH il proprietario di / wp-content / plugins /, Wordpress diventa completamente non funzionale all'interno dell'amministratore, con la costante routine pop-up FTP o errori di autorizzazione. Impossibile aggiungere né aggiornare plug-in. Solo quando faccio di www-data il proprietario di wp-content, la funzionalità del plugin di amministrazione di Wordpress funziona. (Esempio: sudo chown www-data: www-data -R / var / www / html / wp-content /)
Heres2u,

26

Per coloro che hanno la loro cartella principale wordpress nella loro cartella principale:

** Ubuntu / apache

  1. Aggiungi il tuo utente al gruppo www-data:

CREDITO Concedere autorizzazioni di scrittura al gruppo www-data

Vuoi chiamare usermodil tuo utente. Quindi sarebbe:

sudo usermod -aG www-data yourUserName

** Supponendo www-datache esista un gruppo

  1. Verifica che il tuo utente sia nel www-datagruppo:

    groups yourUserName

Dovresti ottenere qualcosa del tipo:

youUserName : youUserGroupName www-data

** youUserGroupName è in genere simile al tuo nome utente

  1. Modifica ricorsiva della proprietà del gruppo della cartella wp-content mantenendo la proprietà dell'utente

    chown yourUserName:www-data -R youWebSiteFolder/wp-content/*

  2. Cambia directory in youWebSiteFolder / wp-content /

    cd youWebSiteFolder/wp-content

  3. Modifica ricorsiva delle autorizzazioni di gruppo delle cartelle e sottocartelle per abilitare le autorizzazioni di scrittura:

    find . -type d -exec chmod -R 775 {} \;

** modalità di `/ home / yourUserName / youWebSiteFolder / wp-content / 'modificata da 0755 (rwxr-xr-x) a 0775 (rwxrwxr-x)

  1. Modifica ricorsiva delle autorizzazioni di gruppo per i file e i file secondari per abilitare le autorizzazioni di scrittura:

    find . -type f -exec chmod -R 664 {} \;

Il risultato dovrebbe assomigliare a:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

Equivalente a:

chmod -R ug + rw nome utente

Le autorizzazioni saranno come 664 per i file o 775 per le directory.

Ps se qualcuno riscontra un errore 'could not create directory'durante l'aggiornamento di un plugin, fallo:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
quando sei alla radice del tuo dominio.
Supponendo: wp-config.phpha
credenziali FTP su LocalHost
define('FS_METHOD','direct');


10
-1. Tu NON voler www-data di avere accesso in scrittura ai file wordpress, se non in wp-content.
Calimo,

775 in wp-content aiuta. Con 644 per i file, 755 per le cartelle e chown user: www-data, a volte avevo ancora problemi con l'upload di file multimediali, l'aggiornamento del plug-in, ecc. 775 mi permette di modificare il contenuto di wp anche con www-data: www-data , che risolve il problema.
guylabbe.ca,

Rimuovi -R dal comando find / chmod poiché è lento e non necessario.
Adam Jimenez,

20

Meglio leggere la documentazione di wordpress su questo https://wordpress.org/support/article/changing-file-permissions/

  • Tutti i file devono essere di proprietà dell'account dell'utente effettivo, non dell'account utente utilizzato per il processo httpd
  • La proprietà del gruppo è irrilevante, a meno che non vi siano requisiti di gruppo specifici per il controllo delle autorizzazioni del processo del server Web. Questo di solito non è il caso.
  • Tutte le directory dovrebbero essere 755 o 750.
  • Tutti i file dovrebbero essere 644 o 640. Eccezione: wp-config.php dovrebbe essere 440 o 400 per impedire ad altri utenti sul server di leggerlo.
  • Nessuna directory dovrebbe mai essere data 777, anche caricare directory. Poiché il processo php è in esecuzione come proprietario dei file, ottiene i permessi dei proprietari e può scrivere anche in una directory 755.

4
Non sono sicuro del motivo per cui sei stato votato verso il basso: è quasi come se le persone desiderassero che la risposta migliore fosse come lasciare insicura l'installazione !
BCran,

Il link è obsoleto. nuovo qui: wordpress.org/support/article/changing-file-permissions E grazie per essere stato l'unico a fare riferimento ai documenti reali!
Everyman

Se wp-config.php è 400, come si suppone che apache lo includa (quindi leggerlo) al caricamento della pagina?
Martin Braun,

14

Ho impostato le autorizzazioni su:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} \;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} \;

Nel mio caso ho creato un utente specifico per WordPress che è diverso dall'utente predefinito di apache che impedisce l'accesso dal Web ai file di proprietà dell'utente.

Quindi concede all'utente apache la gestione della cartella di caricamento e infine imposta autorizzazioni sufficienti per file e cartelle.

MODIFICATO

Se stai usando W3C Total Cache dovresti fare anche il seguente:

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

Quindi funzionerà!

MODIFICATO

Dopo un po 'di sviluppo di siti WordPress, consiglierei diverse autorizzazioni per i file per ambiente:

In produzione, non darei accesso agli utenti per modificare il filesystem, consentirò solo a loro di caricare risorse e dare accesso ad alcune cartelle specifiche di plugin per fare backup, ecc. Ma gestendo i progetti sotto Git e usando le chiavi deploy sul server, non è un buon plug-in di aggiornamento sulla gestione temporanea o sulla produzione. Lascio qui l'impostazione del file di produzione:

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

www-data: www-data = utente e gruppo apache o nginx

La gestione temporanea condividerà le stesse autorizzazioni di produzione di cui dovrebbe essere un clone.

Infine, l'ambiente di sviluppo avrà accesso ad aggiornamenti plugin, traduzioni, tutto ...

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

www-data: www-data = utente apache o nginx e raggruppa il tuo utente: root-group = il tuo utente corrente e il gruppo root

Queste autorizzazioni ti daranno accesso allo sviluppo sotto themese your-plugincartella senza chiedere il permesso. Il resto del contenuto sarà di proprietà dell'utente Apache o Nginx per consentire a WP di gestire il filesystem.

Prima di creare un repository git, eseguire prima questi comandi:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

11
Nooo! Non fare mai un 777. Per favore, non consigliare questo a (nuove) persone che leggono questo.
Karlo,

NESSUN file o cartelle dovrebbero essere di proprietà del processo http - questo è un grande divario di sicurezza. Se un utente malintenzionato trovasse un exploit in un plug-in o in un tema o wordpress stesso, potrebbe caricare codice che può quindi essere eseguito da apache e ottenere l'accesso: l'ho visto di prima mano :(
DropHit

10

Le autorizzazioni corrette per il file sono 644 Le autorizzazioni corrette per la cartella sono 755

Per modificare le autorizzazioni, utilizzare il terminale e i seguenti comandi.

find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;

755 per cartelle e 644 per file.


1
e 640 per wp-config.php. Ma sfortunatamente, devi cambiare le autorizzazioni di upload e plug-in e temi su 775 e se vuoi aggiornare il tuo wordpress, devi cambiare tutte le cartelle su 775. In questa sezione le tue autorizzazioni mostreranno errori durante l'aggiornamento / modifica plug-in, temi e media di caricamento.
erginduran,

8

Penso che le seguenti regole siano consigliate per un sito wordpress predefinito:

  • Per le cartelle all'interno di wp-content, imposta le autorizzazioni 0755:

    chmod -R 0755 plugin

    chmod -R 0755 upload

    chmod -R 0755 aggiornamento

  • Consenti all'utente apache di essere il proprietario delle precedenti directory di wp-content:

    caricamenti di chown apache

    aggiornamento di chown apache

    chown plugin di Apache


1
Puoi anche impostare in modo ricorsivo le autorizzazioni per le directory, come ad esempio: chown -R caricamenti di apache . E se necessario, puoi anche assegnare al gruppo la proprietà di apache: chgrp apache uploads
shasi kanth

8

In realtà dipende dai plug-in che intendi utilizzare poiché alcuni plug-in modificano il documento radice di wordpress. ma generalmente consiglio qualcosa di simile per la directory di wordpress.

Questo assegnerà il "root" (o qualunque sia l'utente che stai usando) come l'utente in ogni singolo file / cartella, R significa ricorsivo, quindi non si ferma nella cartella "html". se non hai usato R, allora è applicabile solo alla directory "html".

sudo chown -R root:www-data /var/www/html  

Ciò imposterà il proprietario / gruppo di "contenuto wp" su "www-data" e permettendo così al web server di installare i plugin attraverso il pannello di amministrazione.

chown -R www-data:www-data /var/www/html/wp-content

Questo imposterà l'autorizzazione di ogni singolo file nella cartella "html" (compresi i file nelle sottodirectory) su 644, quindi le persone esterne non possono eseguire alcun file, modificare qualsiasi file, il gruppo non può eseguire alcun file, modificare qualsiasi file e solo l'utente può modificare / leggere i file, ma anche l'utente non può eseguire alcun file. Questo è importante perché impedisce qualsiasi tipo di esecuzione nella cartella "html", anche dal momento che il proprietario della cartella html e tutte le altre cartelle tranne la cartella wp-content sono "root" (o il tuo utente), i dati www possono ' t modificare qualsiasi file al di fuori della cartella wp-content, quindi anche se c'è qualche vulnerabilità nel server web e se qualcuno accede al sito in modo non autorizzato, non può cancellare il sito principale tranne i plugin.

sudo find /var/www/html -type f -exec chmod 644 {} +

Ciò limiterà l'autorizzazione ad accedere a "wp-config.php" all'utente / al gruppo con rw-r ----- queste autorizzazioni.

chmod 640 /var/www/html/wp-config.php

E se un plug-in o un aggiornamento si sono lamentati, non può essere aggiornato, quindi accedere a SSH e utilizzare questo comando e concedere l'autorizzazione temporanea a "www-data" (server Web) per aggiornare / installare tramite il pannello di amministrazione, quindi ripristinare torna al "root" o al tuo utente una volta completato.

chown -R www-data /var/www/html

E in Nginx (stessa procedura per l'apache) per proteggere la cartella wp-admin da accessi e sondaggi non autorizzati. apache2-utils è necessario per crittografare la password anche se hai installato nginx, ometti c se prevedi di aggiungere più utenti allo stesso file.

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

Ora visita questa località

/etc/nginx/sites-available/

Usa questi codici per proteggere la cartella "wp-admin" con una password, ora ti chiederà la password / nome utente se hai provato ad accedere a "wp-admin". si noti, qui si utilizza il file ".htpasswd" che contiene la password crittografata.

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

Ora riavvia nginx.

sudo /etc/init.d/nginx restart

L'uso dell'utente root non è raccomandato. Potrebbe essere più pericoloso Basta fare un nuovo utente e aggiungerlo al gruppo sudo
erginduran

Non ho sostenuto qui per utilizzare il root. Ho usato la radice come esempio. puoi usare qualunque nome invece di usare il root.
Don Dilanga,

2

comandi:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Dove ftp-user è l'utente che si sta utilizzando per caricare i file

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content

1
dovrebbe essere chown username: www-data altrimenti non è possibile modificare i file
malhal

Puoi usare $(whoami)invece di ftp-user. Per impostazione predefinita, l'utente corrente ( non root ) è l'utente FTP se si utilizza il proprio server (locale, vps, ecc.)
Juanjo Salvador,

2

Per essere assolutamente sicuro che il tuo sito web sia sicuro e stai usando le autorizzazioni corrette per le tue cartelle, usa un plugin di sicurezza come questi:

https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall/

https://en-ca.wordpress.org/plugins/wordfence/

Questi plugin eseguiranno la scansione dell'installazione di Wordpress e ti avviseranno di eventuali problemi. Questi ti avvertiranno anche di eventuali permessi di cartelle non sicuri. Inoltre, questi plugin ti consiglieranno quali autorizzazioni dovrebbero essere assegnate alle cartelle.


2
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess

1

Non posso dirti se questo è corretto o no, ma sto usando un'immagine Bitnami su Google Compute App Engine. Ho problemi con i plug-in e la migrazione e, dopo ulteriori problemi con i permessi di chmod, ho trovato queste tre righe che hanno risolto tutti i miei problemi. Non sono sicuro che sia il modo giusto, ma ha funzionato per me.

sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;

1

Per OS X utilizzare questo comando:

sudo chown -R www:www /www/folder_name

1

Definire nel file wp_config.

/var/www/html/Your-Project-File/wp-config.php

define( 'FS_METHOD', 'direct' );

chown - cambia la proprietà di file / directory. Vale a dire. il proprietario del file / dir passa a quello specificato, ma non modifica le autorizzazioni.

sudo chown -R www-data:www-data /var/www

0

Sulla base di tutte le letture e delle sofferenze sui miei siti e dopo essere stato violato, ho creato l'elenco sopra che include le autorizzazioni per un plugin di sicurezza per Wordpress chiamato Wordfence. (Non affiliato ad esso)

Nel nostro esempio, la radice del documento wordpress è /var/www/html/example.com/public_html

Aprire le autorizzazioni in modo che i dati www possano scrivere nella radice del documento come segue:

cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/

Ora dalla dashboard del tuo sito, come amministratore puoi eseguire aggiornamenti.

Per proteggere il sito dopo aver completato gli aggiornamenti, attenersi alla seguente procedura:

sudo chown -R wp-user:wp-user public_html/

Il comando sopra cambia le autorizzazioni di tutto nell'installazione wordpress dell'utente FTP wordpress.

cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads

Il comando sopra assicura che il plugin di sicurezza Wordfence abbia accesso ai suoi registri. La directory dei caricamenti è anche scrivibile da www-data.

cd plugins
sudo chown -R www-data:wp-user wordfence/

Il comando sopra assicura anche che il plugin di sicurezza abbia richiesto l'accesso in lettura e scrittura per la sua corretta funzione.

Autorizzazioni per directory e file

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;

Impostare le autorizzazioni per wp-config.php su 640 in modo che solo l'utente wp possa leggere questo file e nessun altro. I permessi di 440 non hanno funzionato per me con la proprietà del file sopra.

sudo chmod 640 wp-config.php

Gli aggiornamenti automatici di Wordpress usando SSH funzionavano bene con PHP5 ma si sono rotti con PHP7.0 a causa di problemi con bundle php7.0-ssh2 con Ubuntu 16.04 e non sono riuscito a trovare come installare la versione giusta e farlo funzionare. Fortunatamente un plugin molto affidabile chiamato ssh-sftp-updater-support (gratuito) rende possibili gli aggiornamenti automatici usando SFTP senza bisogno di libssh2. Pertanto, le autorizzazioni di cui sopra non devono mai essere allentate se non in rari casi, se necessario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.