immerda:WebhostingUserScriptsAdjustPermissions

Aus immerda
Zur Navigation springen Zur Suche springen

User Script: Adjust Permissions

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.

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.

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.

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

Mit Hilfe diesem Skript könnt ihr eure Installation kurzfristig auch gesamthaft schreibbar machen, das Update durchführen und dann wieder auf den restriktiven Modus entsprechend eurem CMS setzen.

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 corresponding 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

Für eine std. Drupal Installation:

# 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

Für eine std. Joomla Installation:

# 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 Wordpress

Für eine std. Wordpress Installation:

# Beispiel für Wordpress Konfiguration

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

# except:
web_writable:
  -  wp-content

Konfigurationsbeispiel Alles nur lesbar

Datei: scripts/adjust_permissions/adjust_permissions.dirs

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

Konfigurationsbeispiel Alles beschreibbar

Soll alles (temporär) durch den Webserver beschreibbar sein, dann kannst du den Update Mode verwenden. Oder mit dem Adjust Permissions Skript würde es folgendermassen gehen:

Wichtig Der Ordner www/ wird auch noch durch andere Skripte von uns angefasst. Da wir grundsätzlich der Meinung sind, dass der Modus "Alles-beschreibbar" nicht sinnvoll ist, werden zumindest die Rechte von www/ durch diese Skripte wieder auf nur Lesen zurückgestellt. Dies passiert 2mal pro Tag. Für ein temporäres Update eures CMS sollte dies also allemal reichen. Ansonsten könnt ihr das Skript ja einfach nochmals ausführen lassen.

Datei: scripts/adjust_permissions/adjust_permissions.dirs

only_webreadable: []
web_writable:
  - .