Frage

Ich bereitete mich darauf vor, eine Drupal 7-Site bereitzustellen, und ich kann keine Dokumentation darüber finden, auf welche empfohlenen Sicherheitsbeschäftigungs- und Verzeichnisberechtigungen eingestellt werden sollen.

Speziell default/files/ (auch Subverzeichnisse?), settings.php, .htaccess Und alles andere sollte ich mir bewusst sein.

War es hilfreich?

Lösung

Ihr Webserver sollte in der Lage sein, alle Dateien jedoch zu lesen nicht schreibe ihnen. Wenn Ihre Website das Hochladen von Dateien umfasst, geben Sie dem Server die Berechtigung, nur in diesen einen Ordner zu schreiben.

Weitere Informationen zum Einrichten sowie einige Dinge, die passieren können, wenn Sie dies nicht tun, finden Sie in der Drupal -Dokumente.

Andere Tipps

Dass Drupal Seite wie so viele sind sehr lang und verwirrend. Aber es enthält diesen Beitrag von Jason, der den Nagel auf den Kopf schlug:

Gepostet von Jason Sale am 1. November 2010 um 12:40 Uhr

Vielen Dank, dass Sie dies und alles geschrieben haben, aber alles, was ich und 99% der Leute, die diese Seite lesen, wirklich wollen, ist eine Liste von Zahlen neben einer Liste von Ordnern.

  • /default auf 755
  • /default/files einschließlich aller Unterordner und Dateien auf 744 (oder 755)
  • /default/themes einschließlich aller Unterordner und Dateien auf 755
  • /default/modules einschließlich aller Unterordner und Dateien auf 755
  • /default/settings.php und /default/default.settings.php auf 444

Meine Praxis, eine neue Drupal -Site auf einem Server zu erstellen, besteht darin, einen Benutzer zu haben, der Teil der Webservergruppe (in der Regel Apache) ist und diesen Benutzer alle Drupal -Dateien besitzt. Auf Ubuntu sind dies die Befehle, um diese Einrichtung zu erhalten:

# 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

Sobald ich diese Einrichtung habe, melde ich mich als Benutzer an und installiere Drupal AT/VAR/www/example/docroot oder ähnliches und erstelle das Dateienverzeichnis von Hand und kopiert über die Datei settings.php. Da wir uns vor dem Kopieren in Drupal als Beispielbenutzer anmelden, sollten unsere Dateibesitz und unsere Berechtigungen automatisch auf allen Kerndateien und Skripten (einschließlich .htaccess -Dateien) ordnungsgemäß konfiguriert werden.

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

Lassen Sie uns nun das Dateienverzeichnis einrichten.

# 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

Als nächstes richten wir Berechtigungen ein, damit der Webserver jederzeit in jede Datei in diesem Verzeichnis schreiben kann. Wir tun dies mit 2775 in unserem CHMOD -Befehl. Die 2 bedeutet, dass die Gruppen -ID für alle in diesem Verzeichnis erstellten neuen Dateien erhalten bleibt. Dies bedeutet, dass www-data immer die Gruppe in allen Dateien sein wird, wodurch der Webserver und der Benutzer immer Berechtigungen für neue Dateien haben, die in diesem Verzeichnis platziert sind. Die ersten 7 bedeutet, dass der Eigentümer (Beispiel) R (lesen) w (schreiben) und x (ausführen) alle Dateien hier in. Die zweite 7 bedeutet, dass die Gruppe (www-data) auch RW und x alle Dateien in diesem Verzeichnis. Schließlich bedeutet die 5, dass andere Benutzer R- und X -Dateien, aber nicht schreiben können.

 chmod 2775 sites/default/files

Wenn in diesem Verzeichnis vorhandene Dateien vorhanden sind, stellen Sie sicher, dass der Webserver feststellen.

 chmod g+w -R sites/default/files

Jetzt kann Drupal installiert werden. Wenn fertig, ist es SEHR Wichtig, um auf die Einstellungen zurückzukehren, und sicherzustellen, dass alle Benutzer nur Berechtigungen gelesen haben.

 chmod 444 sites/default/settings.php

Das ist es! Diese Einrichtung stellt sicher, dass Sie Situationen vermeiden, in denen entweder der Benutzer, der das Verzeichnis besitzt, oder der Webserver nicht in das Dateienverzeichnis schreiben/ändern/entfernen kann.

Der Ordner Drupal -Dateien sollte vom Webserver beschreibbar sein. Der sicherste Weg, dies zu tun, besteht darin, die Gruppe zu verändern und sie zu beschreiben zu machen, wie diese:

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

Abgesehen von dem Datei -Upload -Ordner ist der sicherste CHMOD 644 für alle Dateien, 755 für Verzeichnisse.

Dies könnte so erreicht werden . ist für den aktuellen Pfad):

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

Denken Sie daran, dass Sie einstellen müssen chmod g+w Nach dem Ausführen des oben genannten Befehls werden das CHMOD auf allen Dateien und Ordnern zurückgesetzt.

Jeder Rat an "Chmod Blah" oder "Chown X" ist bedeutungslos, ohne zu wissen: Was der Standardbenutzer: Gruppe in den Dateien ist und welcher Benutzer und welcher Gruppen Ihr Webserver ausgeführt wird.

Die Drupal -Dokumente, mit denen andere verknüpft sind, sind in diesem Thema ziemlich gut, aber eine andere Ressource ist die Sicherheitsüberprüfungsmodul Dies hilft sicherzustellen, dass Sie alles richtig einstellen lassen.

Ich werde unter Berücksichtigung des Falls, den die Dateien auf dem Server mit FTP erstellt haben, beantwortet, wobei die Anmeldeinformationen unter Verwendung dessen unter Verwendung des Ausleitungen des Webservers unter Verwendung von Anmeldeinformationen erstellt werden (normalerweise wird Apache ausgeführt, wie niemand/niemand). Dies bedeutet, dass der Benutzer, der die Dateien besitzt, die manuell erstellt hat, bevor das Drupal -Installationsprogramm ausführt (einschließlich der auf dem Server vom Drupal -Archiv hochgeladenen Dateien), nicht der Benutzer, der zum Ausführen des Webservers verwendet wird (weder der Benutzername noch die Gruppe übereinstimmt) . Dieses Szenario gilt auch für den Fall, in dem diese Dateien mit SSH erstellt werden.

  • Die Datei "Settings.Php" muss vom Drupal-Installationsprogramm beschreibbar sein. Sobald die Installation erfolgt, wird jedoch vorgeschlagen, sie schreibgeschützt zu machen (das Installationsprogramm schlägt dies vor, und Drupal prüft regelmäßig, ob die Datei wirklich schreibgeschützt ist). In dem von mir beschriebenen Szenario sollte die Erlaubnis dieser Datei mindestens 644 betragen.
  • Die .htaccess -Dateien (die an mindestens zwei Stellen vorhanden sind) sollten die Berechtigung 644 haben. Der Benutzer, der die Datei erstellt hat wurde aktualisiert (es geschah bereits einmal, als es eine Zeile zu dieser Datei hinzugefügt wurde, um ein Sicherheitsproblem zu vermeiden). Es ist auch möglich, die Berechtigungen auf 444 festzulegen. In diesem Fall sollten die Berechtigungen jedoch auf 644 geändert werden, wenn die Datei aktualisiert werden muss.
  • Das Verzeichnis, das die von den Modulen erstellten Dateien enthält (das default/files Verzeichnis) muss sein (für den Benutzer, der den Webserverprozessen zugeordnet ist, nämlich der Benutzer, der den auf diesem Webserver ausgeführten PHP -Skripten zugewiesen wird):
    • lesbar
    • schreibbar
    • durchqueren werden (die Module müssen in der Lage sein, erreichen default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)

Empfohlene Datei-/Verzeichnisberechtigungen:

  • Drupal Webroot sollte weltweit lesbar sein (siehe: Updater.inc): 0755
  • Für öffentliche Upload -Verzeichnisse: 0755 oder 0775
  • Für private Upload -Verzeichnisse: 0750 oder 0770
  • Für öffentliche hochgeladene Dateien: 0644 oder 0664
  • Für private hochgeladene Dateien: 0640 oder 0660
  • Für .htaccess in Upload -Verzeichnissen (siehe: Datei_Create_htaccess ()): 0444 (Standard) oder 0644
  • Für alle (und andere vertrauliche Dateien) für die Einstellungen.PHP: 0440
  • Für alle anderen Webverzeichnisse: 0755
  • Für alle anderen Webdateien: 0644

Empfohlener Datei-/Verzeichnisbesitz:

  • Der Eigentümer aller Upload -Verzeichnisse/-dateien sollte auf Apache -Benutzer eingestellt werden.
  • Eigentümer aller Web-/Quellenverzeichnisse/-dateien sollte auf Nicht-Apache-Benutzer festgelegt werden.
  • (Optional) Die Gruppe aller Quellen sollte auf die Apache -Gruppe eingestellt werden.

Hier sind die Variablen, die die Standard -DIR/Datei -Berechtigungen für neue Elemente steuern:

file_chmod_directory: 0775
file_chmod_file: 0664

Hier ist ein Skript zur Festlegung von Berechtigungen: Fix-permissions.sh


Weiterlesen:


Hier ist das Skript, mit dem ich Berechtigungen auf dem Remote -Host für öffentliche/private Verzeichnisse beheben kann:

#!/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'

HINWEIS: Der obere Code versucht es Apache -Gruppe abrufen und setzen es auf GET_HTTP_GROUP Variable.

Dieses Shell -Skript befindet sich unten auf dieser Seite: https://www.drupal.org/node/244924

Ich führe es gelegentlich aus, um sicherzustellen, dass meine Berechtigungen korrekt eingerichtet werden.

#!/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.

Auch wenn Sie FastCGI ausführen, wird der PHP als Benutzer ausgeführt und hat Zugriff auf alle Dateien, auf die der Benutzer zugreifen kann, es sei denn, Sie versuchen absichtlich, dies zu vermeiden.

Dies half mir bei meinen OSX -Erlaubnisproblemen. Ich fand es in https://www.drupal.org/node/244924#computer-3741738 vom Protoplasma -Benutzer. Ich war wie er nach einer Migration Probleme hatte.

[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

Es wird ein Modul genannt Sicherheitsüberprüfung Welche überprüft, ob Ihre Website sicher ist oder nicht. Ich fand auch eine sehr gute Verknüpfung Setzen Sie Site -Berechtigungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top