Domanda

sto attrezzando per distribuire un sito Drupal 7 e non riesco a trovare alcuna documentazione su ciò che i permessi di file e directory attenti alla sicurezza consigliate devono essere impostati.

In particolare default/files/ (anche sotto le directory?), settings.php, .htaccess e qualsiasi altra cosa che dovrebbero essere a conoscenza.

È stato utile?

Soluzione

Il server web dovrebbe essere in grado di leggere tutti i file, ma non scrivere a loro. Se il tuo sito comporta file di caricamento quindi dare l'autorizzazione server di scrivere che una cartella unica.

Maggiori informazioni su come configurare il monitoraggio, così come alcune cose che possono accadere se non lo fai, è disponibile nella Drupal docs .

Altri suggerimenti

Drupal come tanti è molto lunga e confusa. Ma contiene questo post da Jason, che ha colpito il chiodo sulla testa:

Inviato da Jason vendita il 1 ° novembre 2010 alle 12:40

Grazie per la scrittura di questo e tutto, ma tutto ciò che ho e il 99% delle persone che leggono questa pagina voglio davvero è un elenco di numeri accanto a un elenco di cartelle.

  • /default su 755
  • /default/files incluse le sottocartelle ei file su 744 (o 755)
  • /default/themes incluse le sottocartelle ei file su 755
  • /default/modules incluse le sottocartelle ei file su 755
  • /default/settings.php e /default/default.settings.php su 444

La mia pratica intorno creazione di un nuovo sito Drupal su un server è quello di avere un utente che è una parte del server web (Apache in genere) di gruppo, e hanno l'utente possiede tutti i file Drupal. Su Ubuntu, questi sono i comandi per ottenere quel set up:

# Create a new example user, setting up /var/www/example as their home dir.
useradd -s /bin/bash -d /var/www/example -m example

# Now add that user to the Apache group. On Ubuntu/Debian this group is usually
# called www-data, on CentOS it's usually apache.
usermod -a -G www-data example

# Set up a password for this user.
passwd example

Una volta che ho quel set up, sarò accedere come quell'utente e installare Drupal in / var / www / es / docroot o simili, e quindi creare la directory dei file a mano e copiare il file settings.php. Essendo il login come utente del nostro esempio, prima di copiare in Drupal, la nostra proprietà dei file e le autorizzazioni dovrebbero essere automaticamente configurate correttamente su tutto il nucleo file Drupal e script (inclusi i file .htaccess).

su - example
cd docroot
cp sites/default/default.settings.php sites/default/settings.php

# Temporarily give the web server write permissions to settings.php
chgrp www-data sites/default/settings.php
chmod g+w sites/default/settings.php

Ora cerchiamo di impostare la directory dei file.

# Create the directory.
mkdir sites/default/files

# Now set the group to the Apache group. -R means recursive, and -v means 
# verbose mode.
chgrp -Rv www-data sites/default/files

Il prossimo verrà impostato autorizzazioni in modo che il server web può sempre scrivere a qualsiasi file che si trova in questa directory. Lo facciamo utilizzando 2775 nel nostro comando chmod. I 2 significa che l'ID di gruppo saranno conservati, per tutti i nuovi file creati in questa directory. Ciò significa che www - i dati saranno sempre il gruppo su qualsiasi file, garantendo in tal modo che la web server e l'utente sia sempre avere i permessi di scrittura per tutti i nuovi file che vengono inseriti in questa directory. I primi 7 significa che il proprietario (esempio) può R (lettura) W (scrittura) e X (Execute) tutti i file qui. I secondi mezzi 7 gruppo (www-data) possono anche R W e X FILES qualsiasi a questa directory. Infine, i 5 mezzi che gli altri utenti possono file R e X, ma non scrivere.

 chmod 2775 sites/default/files

Se ci sono eventuali file esistenti in questa directory, assicurarsi che il server web ha permanenti di scrittura su di loro.

 chmod g+w -R sites/default/files

Ora Drupal è pronto per essere installato. Al termine, è MOLTO importante tornare a settings.php e garantire che tutti gli utenti hanno solo autorizzazioni di lettura.

 chmod 444 sites/default/settings.php

Questo è tutto! Questo set up in modo da garantirvi evitare situazioni in cui sia l'utente che possiede la directory o il server web non può scrivere / modificare / rimuovere i file nella directory dei file.

I file Drupal cartella deve essere scrivibile dal server web. Il modo più sicuro per farlo è quello di cambiare il gruppo e renderlo gruppo scrivibile, in questo modo:

chgrp www-data sites/default/files
chmod g+w sites/default/files

La cartella di upload di file a parte, il più sicuro è chmod 644 per tutti i file, 755 per le directory.

Ciò potrebbe essere realizzato come questo (quando viene eseguito nella cartella Drupal-site, il . è per il percorso corrente):

find . -type f | xargs chmod 644
find . -type d | xargs chmod 755

Ricordate che è necessario chmod g+w insieme ancora una volta dopo l'esecuzione del comando precedente, dal momento che questi saranno reimpostare il chmod su tutti i file e le cartelle.

Qualche consiglio per "blah chmod" o "chown X" non ha senso senza conoscere: ciò che l'utente di default:. Gruppo è sui file e quali utenti e gruppi vostre piste del server web come

Gli altri Drupal Docs hanno collegato a sono abbastanza buone sul tema, ma un altro è la risorsa href="http://drupal.org/project/security_review"> Security Review modulo che aiuta a garantire hai tutto impostato correttamente.

I risponderà considerando il caso in cui i file vengono creati sul server tramite FTP, utilizzando le credenziali diverse da quella in cui è in esecuzione il server web (normalmente, Apache viene eseguito come nessuno / nessuno). Ciò significa che l'utente che possiede il file creati manualmente prima di eseguire il programma di installazione di Drupal (che comprende anche i file caricati sul server dall'archivio Drupal) non è l'utente utilizzato per eseguire il web server (né il nome utente o le partite di gruppo) . Questo scenario si applica anche al caso in cui vengono creati i file usando SSH.

  • Il file settings.php deve essere scrivibile dal programma di installazione di Drupal, ma una volta che l'installazione è fatta si suggerisce di renderlo di sola lettura (il programma di installazione suggeriscono che, Drupal e periodicamente controlla se il file è in realtà di sola lettura ). Nello scenario che sto descrivendo, il permesso di questo file dovrebbe essere almeno 644.
  • I file .htaccess (che sono presenti in almeno due posti) dovrebbe avere il permesso 644. L'utente che ha creato il file dovrebbe essere ancora in grado di sovrascrivere il file, nel caso di una prossima versione di Drupal è dotato di un. file .htaccess che è stato aggiornato (è successo già una volta, quando è stato aggiunto una linea a tale file per evitare un problema di sicurezza). E 'anche possibile impostare le autorizzazioni per 444, ma in quel caso, le autorizzazioni deve essere cambiato di nuovo a 644, quando le esigenze di file da aggiornare.
  • La directory contenente i file creati dai moduli (la directory default/files) deve essere (per l'utente che viene assegnato ai processi del server web, che è poi l'utente assegnato a agli script PHP in esecuzione sul server web):
    • leggibile
    • scrivibile
    • traslabile (i moduli devono essere in grado di raggiungere default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)

file / consigliati permessi di directory:

  • Drupal Webroot dovrebbe essere leggibile (vedi: updater.inc ): 0755
  • per le directory di upload pubblici: 0755 o 0775
  • per le directory di upload privati: 0750 o 0770
  • per i file caricati pubblici: 0644 o 0664
  • per i file privati ??caricati: 0640 o 0660
  • per .htaccess all'interno di directory di upload (vedi: file_create_htaccess () ): 0444 (default) o 0644
  • per settings.php sola lettura per tutti (e di altri file riservati): 0440
  • per tutte le altre directory web: 0755
  • per tutti gli altri file web: 0644

file consigliato / directory di proprietà:

  • proprietario di tutte le directory di upload / file deve essere impostato su utente Apache,
  • proprietario di tutte le fonti / directory / files web deve essere impostato su utente non-Apache,
  • (facoltativamente) gruppo di tutte le fonti dovrebbe essere impostato sul gruppo Apache,

Qui ci sono le variabili che il controllo di default dir / permessi dei file per i nuovi elementi:

file_chmod_directory: 0775
file_chmod_file: 0664

Ecco qualche script per il fissaggio permesso: fix-permissions.sh


Per saperne di più:


Ecco script che sto usando per le autorizzazioni di fix su un host remoto per / elenchi pubblici privati:

#!/bin/sh -e
# Script to correct public/private directory and files permissions.
[ -z "$1" ] && { echo Usage: $0 @remote.dst; exit 1; }

DST="$1" && shift
GET_HTTP_GROUP='ps axo user,group,comm | egrep "(apache|httpd)" | grep -v ^root | uniq | cut -d\  -f 1'

drush $* $DST ssh 'PUB=$(drush dd %files) && PRIV=$(drush dd %private) && AGROUP=$('"$GET_HTTP_GROUP"') && chgrp -vR $AGROUP $PUB $PRIV && chmod -vR u+rwX,g+rwX,o+rX $PUB $PRIV'

. Nota: codice di cui sopra cercherà di recuperare Apache gruppo e impostarlo su variabile GET_HTTP_GROUP

Questo script di shell si trova in fondo a questa pagina: https://www.drupal.org/ node / 244924

corro tanto in tanto per assicurarsi che i miei autorizzazioni siano impostate correttamente.

#!/bin/bash
# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1) Path to your Drupal installation.
2) Username of the user that you want to give files/directories ownership.
3) HTTPD group name (defaults to www-data for Apache).
Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
if [ $(id -u) != 0 ]; then
  printf "**************************************\n"
  printf "* Error: You must run this with sudo. *\n"
  printf "**************************************\n"
  print_help
  exit 1
fi
drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"
# Parse Command Line Arguments
while [ $# -gt 0 ]; do
  case "$1" in
    --drupal_path=*)
      drupal_path="${1#*=}"
      ;;
    --drupal_user=*)
      drupal_user="${1#*=}"
      ;;
    --httpd_group=*)
      httpd_group="${1#*=}"
      ;;
    --help) print_help;;
    *)
      printf "***********************************************************\n"
      printf "* Error: Invalid argument, run --help for valid arguments. *\n"
      printf "***********************************************************\n"
      exit 1
  esac
  shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
  printf "*********************************************\n"
  printf "* Error: Please provide a valid Drupal path. *\n"
  printf "*********************************************\n"
  print_help
  exit 1
fi
if [ -z "${drupal_user}" ] || [[ $(id -un "${drupal_user}" 2> /dev/null) != "${drupal_user}" ]]; then
  printf "*************************************\n"
  printf "* Error: Please provide a valid user. *\n"
  printf "*************************************\n"
  print_help
  exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .
printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
    find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
    find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done setting proper permissions on files and directories"
Copy the code above to a file, name it "fix-permissions.sh" and run it as follows:
sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name

Note: The server group name is assumed "www-data", if it differs use the --httpd_group=GROUP argument.

Anche se si esegue FastCGI, le piste PHP come l'utente, e avrà accesso a tutti i file che l'utente ha accesso a meno che non si deliberatamente tenta di evitare questo.

Questo mi ha aiutato con i miei problemi di autorizzazione OSX. L'ho trovato in https://www.drupal.org/node/244924#comment- 3741738 per utente protoplasma. Io ero come lui avendo problemi dopo una migrazione.

[root@localhost]cd /path_to_drupal_installation/sites
[root@localhost]find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
[root@localhost]find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
[root@localhost]find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done

C'è un modulo chiamato di riesame sulla sicurezza che controlla se il vostro sito è sicuro o meno. Ho anche trovato un ottimo link di autorizzazioni per i siti impostati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top