Berechtigungen

Grundsätzlich sind Dateien bei unseren Webhostings nur beschreibbar, wenn sie oder der Ordner, in welchem sie sich befinden, durch die Gruppe schreibbar sind. Diese Restriktion erhöht die Sicherheit eures Webhostings, da sich dadurch nur spezifische Dateien oder Pfade bei einem fehlerhaften Skript (lies ausgenutzten Sicherheitsloch) durch den Webserver selber verändern lassen. D.h. damit der Webserver schreiben darf braucht es 0660 oder 0770 anstatt 0650. Es ist jedoch nie nötig 0777 zu machen!

Wir empfehlen euch jedoch Schreibrechte nur dort zu vergeben, wo es auch wirklich notwendig ist und alle Konfigurationsdateien z.B. nur temporär schreibbar machen.

Moderne CMS wie Drupal, Wordpress, etc. erlauben es jedoch einem auch Funktionalität durch die Installation von zusätzlichen Modulen hinzuzufügen. Meistens soll dies durch das CMS selber geschehen, womit der Webserver wiederum auf gewisse Pfade Schreibberechtigung braucht. Die initiale Anpassung dieser Pfade ist über ein geeignetes SFPT Program meistens kein Problem, jedoch ergeben sich immer wieder Situation, wo sich dies äusserst mühsam gestalten kann. Zum Beispiel, wenn das CMS erlaubt, sich selber zu updaten, also es sich selber überschreiben muss.

Soll alles (temporär) durch den Webserver beschreibbar sein, dann kannst du den Update Mode verwenden.

Um euch das Setzen der Lese-/Schreibberechtigungen etwas angenehmer zu machen, stellen wir euch das User Script Adjust Permissions zur Verfügung. Damit könnt ihr in der Datei: scripts/adjust_permissions/adjust_permissions.dirs die Pfade und ihre entsprechende Modi festlegen. Wichtig Unabhängig der Konfiguration wird der Ordner www/ regelmässig auf read-only gesetzt.

Anwenden könnt ihr die Konfiguration durch erstellen der (leeren) Datei scripts/adjust_permissions/adjust_permissions.run.

Beispiele

Für weitere Fragen und Konfigurationsbeispielen, lies die Kommentare zu der Grundkonfiguration durch.

Grundkonfiguration

# This is the configuration file to adjust permissions in your webdirectory.
#
# This file contains a few information about what you can do. For further
# information please have a look at: https://wiki.immerda.ch/index.php/WebhostingUserScripts
#
# A few things to note:
#
# 1. This config file allows two options:
#   * only_webreadable - a list of relative paths that should only be readable by
#                        the webserver
#   * web_writable     - a list of relative paths that should be writable by the
#                        webserver
#
# 2. It must be a valid yaml file. See http://en.wikipedia.org/wiki/YAML for more
#    information
#
# 3. It may contain comments, a you can see here.
#
# 4. The paths must be relative to your www/ directory. We will filter out all
#    other directories and only
#    adjust permissions for paths within the www directory.
#
# 5. We will first *recursively* chown the only_webreadable paths and remove any
#    possibility to write to them via the webserver.
#    Afterwards we will *recursively* chown the web_writable paths. So one path
#    might overwrite a previous one.
#
# 4. To configure these permissions you will have to touch/create the adjust_permissions.run
#    file in this directory Once created this will trigger a run of our adjustment
#    script. Do only create the adjust_permissions.run file if you like to apply
#    your changes.
#    Usually a simple `touch scripts/adjust_permissions/adjust_permissions.run`
#    is sufficient.
#    We will remove the run file automatically if our job is done.
#
# 5. We write some logs to a logfile in the logs directory. It will start
#    with a timestamp, followed by the PID of the process and the actual message.
#    You might want to verify there whether your changes have been applied correctly.
#
# 6. The file *must* contain both options. If nothing should be writable by the
#    webserver, you should set it like that:
#    web_writable: []
#
# 7. If you want to manage the www/ directory itself (for example, make it writable
#    by the webserver), you can do that by including a simple . as an entry.
#    Note: the www/ directory is managed also by other scripts and as we think,
#          that having www/ writable by the webserver is a bad idea, this will
#          be reverted when these scripts run.
#
# 8. We do a lot to prevent that you can do anything nasty with that script. If
#    you find something to trick us, please let us know immediately: admin@immerda.ch
#
# The following example will show you a configuration to do the following changes:
#   * The folders cms, include and the file index.php will only be readable.
#   * The folders cms/plugins, cache, tmp, upload and the file config.php (nasty!)
#     will be writable by the webserver.
#
# --- start example ---
# only_webreadable:
#   - cms
#   - include
#   - index.php
# web_writable:
#   - cms/plugins
#   - cache
#   - tmp
#   - upload
#   - config.php
# --- end example ---
#
# by default we do nothing
only_webreadable: []
web_writable: []

Konfigurationsbeispiel Drupal

# This is the configuration file to adjust permissions in your webdirectory.
#
# This file contains a few information about what you can do. For further
# information please have a look at: https://wiki.immerda.ch/index.php/WebhostingUserScripts
#
# For file and folder permissions required by Drupal please have a look at:
# - Drupal 7: https://www.drupal.org/docs/7/system-requirements/php#permissions
# - Drupal 8: https://www.drupal.org/docs/8/system-requirements/php
only_webreadable:
  - .
web_writable:
  - sites/default/files

Konfigurationsbeispiel Joomla

# Beispiel für Joomla Konfiguration

# www/ and all it's folders should be read only
only_webreadable:
  - .

# except:
web_writable:
  - administrator/backups
  - administrator/components
  - administrator/language
  - administrator/modules
  - administrator/templates
  - components
  - dmdocuments
  - images
  - language
  - media
  - modules
  - plugins
  - templates
  - cache
  - tmp
  - administrator/cache

Konfigurationsbeispiel Alles nur lesbar

# www/ and all it's folders should be read only
only_webreadable:
  - .
# except:
web_writable: []