it-swarm.it

Quali sono le autorizzazioni di directory consigliate?

Mi sto preparando per distribuire un Drupal 7 e non riesco a trovare alcuna documentazione su quali dovrebbero essere le autorizzazioni di file e directory consigliate per la sicurezza consigliate.

In particolare default/files/ (anche sottodirectory?), settings.php, .htaccess e qualsiasi altra cosa di cui dovrei essere a conoscenza.

145
ack

Il tuo server web dovrebbe essere in grado di leggere tutti i file ma non scrivere su di essi. Se il tuo sito prevede il caricamento di file, dai al server il permesso di scrivere solo in quella cartella.

Maggiori informazioni su come configurarlo, così come alcune cose che possono accadere in caso contrario, sono disponibili nel Documenti Drupal .

68
Paul Jones

Quella drupal pagina come tante è molto lunga e confusa. Ma contiene questo post di Jason, che ha colpito l'unghia sulla testa:

Postato da Jason Sale il 1 novembre 2010 alle 12:40 pm

Grazie per aver scritto questo e tutto il resto, ma tutto ciò che io e il 99% delle persone che leggono questa pagina desideriamo davvero un elenco di numeri accanto a un elenco di cartelle.

  • /default su 755
  • /default/files comprese tutte le sottocartelle e i file su 744 (o 755)
  • /default/themes comprese tutte le sottocartelle e i file su 755
  • /default/modules comprese tutte le sottocartelle e i file su 755
  • /default/settings.php e /default/default.settings.php il 444
91
ErichBSchulz

La mia pratica di creare un nuovo sito Drupal su un server è quella di avere un utente che fa parte del gruppo del server web (tipicamente Apache) e di possedere quell'utente tutti i file Drupal. Su Ubuntu, questi sono i comandi per ottenere quella configurazione:

# 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

Dopo averlo configurato, eseguirò l'accesso come tale utente e installerò Drupal su/var/www/example/docroot o simili, quindi creerò manualmente la directory dei file e copierò il file settings.php . Poiché eseguiamo l'accesso come nostro utente di esempio prima di copiare in Drupal, la proprietà e le autorizzazioni dei nostri file dovrebbero essere automaticamente configurate correttamente su tutti i file e gli script Drupal principali (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 impostiamo 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

Successivamente imposteremo le autorizzazioni in modo che il server Web possa sempre scrivere su qualsiasi file che si trova in questa directory. Lo facciamo usando 2775 nel nostro comando chmod. Il 2 indica che l'id del gruppo verrà conservato per tutti i nuovi file creati in questa directory. Ciò significa che i dati www saranno sempre il gruppo su tutti i file, garantendo in tal modo che il server Web e l'utente disporranno sempre delle autorizzazioni di scrittura per tutti i nuovi file inseriti in questa directory. Il primo 7 indica che il proprietario (esempio) può R (Leggi) W (Scrivere) e X (Esegui) tutti i file qui. Il secondo 7 indica che il gruppo (dati www) può anche RW e X qualsiasi file in questa directory. Infine, il 5 indica che altri utenti possono file R e X, ma non scrivere.

 chmod 2775 sites/default/files

Se ci sono file esistenti in questa directory, assicurarsi che il server Web abbia dei permessi di scrittura su di essi.

 chmod g+w -R sites/default/files

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

 chmod 444 sites/default/settings.php

Questo è tutto! Questa impostazione consente di evitare qualsiasi situazione in cui l'utente che possiede la directory o il server Web non è in grado di scrivere/modificare/rimuovere i file nella directory dei file.

81
q0rban

La cartella Drupal files dovrebbe essere scrivibile dal server web. Il modo più sicuro per farlo è cambiare il gruppo e renderlo scrivibile, in questo modo:

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

A parte la cartella di caricamento dei file, la più sicura è chmod 644 per tutti i file, 755 per le directory.

Ciò potrebbe essere realizzato in questo modo (quando eseguito nella cartella del sito Drupal, il . è per il percorso corrente):

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

Ricorda che dovrai impostare chmod g+w di nuovo dopo aver eseguito il comando sopra, poiché ripristinano chmod su tutti i file e le cartelle.

31
mikl

Qualsiasi consiglio a "chmod blah" o "chown X" non ha senso senza sapere: quale utente predefinito: gruppo è presente nei file e quale utente e gruppo viene eseguito dal server web.

Il Drupal Documenti collegati ad altri è abbastanza buono sull'argomento ma un'altra risorsa è Security Review Module che aiuta a garantire che tutto sia impostato correttamente.

20
greggles

Risponderò considerando il caso in cui i file vengano creati sul server tramite FTP, utilizzando credenziali diverse da quella in base alla quale viene eseguito il server Web (normalmente, Apache funziona come nessuno/nessuno). Ciò significa che l'utente che possiede i file creati manualmente prima di eseguire il programma di installazione Drupal (che include anche i file caricati sul server dall'archivio Drupal) non è l'utente utilizzato per eseguire il web server (né il nome utente né il gruppo corrispondono). Questo scenario si applica anche al caso in cui tali file vengano creati utilizzando SSH.

  • Il file settings.php deve essere scrivibile dal programma di installazione Drupal, ma una volta completata l'installazione si consiglia di renderlo di sola lettura (il programma di installazione suggerisce che e Drupal lo farà periodicamente controlla se il file è veramente di sola lettura). Nello scenario che sto descrivendo, l'autorizzazione di questo file dovrebbe essere almeno 644.
  • I file .htaccess (che sono presenti in almeno due posizioni) dovrebbero avere l'autorizzazione 644. L'utente che ha creato il file dovrebbe essere ancora in grado di sovrascrivere il file, nel caso in cui venga una versione successiva di Drupal con un file .htaccess che è stato aggiornato (è successo già una volta, quando è stata aggiunta una riga a quel file per evitare un problema di sicurezza). È anche possibile impostare le autorizzazioni su 444, ma in tal caso, le autorizzazioni devono essere ripristinate a 644 quando il file deve essere aggiornato.
  • La directory contenente i file creati dai moduli (la directory default/files) Deve essere (per l'utente assegnato ai processi del server Web, che è quindi l'utente assegnato a PHP script in esecuzione su quel server Web):
    • leggibile
    • scrivibile
    • attraversabile (i moduli devono essere in grado di raggiungere default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)
9
kiamlaluno

Autorizzazioni consigliate per file/directory:

  • Drupal webroot dovrebbe essere leggibile dal mondo (vedi: pdater.inc ): 0755
  • per le directory pubbliche di upload: 0755 o 0775
  • per directory di upload private: 0750 o 0770
  • per i file caricati pubblici: 0644 o 0664
  • per i file caricati privati: 0640 o 0660
  • per .htaccess all'interno delle directory di upload (vedere: file_create_htaccess () ): 0444 (impostazione predefinita) o 0644
  • per settings.php in sola lettura per tutti (e altri file riservati): 0440
  • per tutte le altre directory web: 0755
  • per tutti gli altri file Web: 0644

Proprietà consigliata di file/directory:

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

Ecco le variabili che controllano le autorizzazioni dir/file predefinite per i nuovi elementi:

file_chmod_directory: 0775
file_chmod_file: 0664

Ecco alcuni script per la correzione delle autorizzazioni: fix-permissions.sh


Leggi di più:


Ecco lo script che sto usando per correggere le autorizzazioni sull'host remoto per le directory pubbliche/private:

#!/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: sopra il codice tenterà di recuperare il gruppo Apache e impostarlo su GET_HTTP_GROUP variabile.

7
kenorb

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

Lo eseguo di tanto in tanto per garantire che le mie 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.
4
Richard Robinson

Inoltre, se stai eseguendo fastcgi, php esegue AS come utente e avrà accesso a tutti i file a cui l'utente ha accesso a meno che tu non provi deliberatamente a evitarlo.

3
G.Martin

Questo mi ha aiutato con i miei problemi di autorizzazione OSX. L'ho trovato in https://www.drupal.org/node/244924#comment-3741738 dall'utente del protoplasma. Ero come se avesse problemi dopo una migrazione.

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

Esiste un modulo chiamato Security review che controlla se il tuo sito è sicuro o meno. Ho anche trovato un ottimo link per impostare le autorizzazioni del sito.

0
Manikandan