Actions

Installations-Sicherheitshinweise

From LimeSurvey Manual

Revision as of 16:21, 24 October 2013 by C schmitz (talk | contribs) (Created page with "Ein anderer Weg, um diese Informationen zu sichern sein kann, das man bestimmte Informationen aus der /application/config/config.php-Datei in einem Nicht-Web-Verzeichnis abgel...")

Generelles

LimeSurvey hat ein eigenes Sicherheitssystem eingebaut, welches standardmäßig aktiviert ist. Das LimeSurvey-Projekt übernimmt keine wie immer gearteten Forderungen, Haftungen, Ansprüche etc., welche sich aus ihrem Einsatz mit LimeSurvey ergeben, natürlich auch jenen, welche auf mangelnde Sicherheitsvorkehrungen ihrerseits beruhen. Kurz: gehen sie davon aus, dass LimeSurvey als unsicher gilt, solange sie nicht selber für entsprechende Sicherheitsvorkehrungen sorgen. Trotzdem nehmen wir Sicherheitsprobleme sehr ernst und reagieren schnell - wenn Sie also von einem Sicherheitsproblem mit LimeSurvey Kenntnis haben, so lassen Sie uns dies bitte wissen: info@limesurvey.org oder erstellen Sie einen Fehlerreport in unserem Bug Tracker (markieren Sie diesen bitte als 'private').

Dateirechte in Linux

Wenn sie einen Linux-Server verwenden, sollten Sie entsprechende Dateiberechtigungen setzen, damit Ihre Installation gesichert ist.

Grundlegende Fakten über Linux/*nix Dateiberechtigungen

Ein Linux/*nix System ist normalerweise ein Mehrbenutzersystem. Das bedeutet, dass abgesehen von Ihrem persönlichen Zugang noch andere Benutzerzugänge auf dem System bestehen könnten und daher sollten Sie darauf achten, welche Berechtigungen Sie diesen anderen Benutzern geben.

Hinweis: Das Setzen von Dateiberechtigungen ist besonders wichtig bei Konfigurationsdateien, die normalerweise sensible Daten enthalten, wie z.B. Kennworte.

"Sie sollten aber wissen, dass ein 'root' Zugang immer Zugriff auf Ihre Dateien hat (egal welche Berechtigungen Sie setzen), da diese der Super-Admin Benutzer ist."

Der Webserver (auf dem LimeSurvey läuft) läuft normalerweise auch unter einem bestimmten Identität/User. Unter Linux ist dies üblicherweise der 'www','www-data' (auf Debian/Ubuntu), 'apache' oder 'nobody' User. Einige Webhoster nutzen eine System (wie z.B. suexec) welches es ermöglicht, LimeSurvey unter einem persönlichen Nutzer laufen zu lassen. Natürlich muss der Webserver User die Berechtigung zum Lesen der LimeSurvey Dateien haben. Aber nur eine begrenzte Anzahl an Unterverzeichnissen im LimeSurvey Verzeichnisbaum muss auch durch den Webserver-Benutzer beschreibbar sein.

Hinweis: Es ist auf jeden Fall sinnvoll die Schreibrechte auf allen nicht benötigen Verzeichnissen zu entfernen. Selbst wenn eine LimeSurvey SIcherheitslücke entdeckt werden sollte, sind die Hauptdateien dank der Dateiberechtigungen dann immer noch vor Manipulationen geschützt.

Setzen von Berechtigungen auf einem selbstverwalteten Linux-System

If you're managing your webserver and operating system configuration (you are the owner of the physical server or are renting a virtual server on which you have root access), you can follow these recommendations.

  • Für das LimeSurvey Stammverzeichnis (oder wie immer sie es benannt haben) - chmod 755 (lesen/ausführen - für die gesamte Welt)
  • Für die Dateien im LimeSurvey Verzeichnis - chmod 755 (lesen/ausführen - für die gesamte Welt)
  • Für das tmp Verzeichnis - chmod 755 - dieses Verzeichnis ist beim Erstellen leer und wird danach verwendet um Dateien hochzuladen, Grafiken, welche mit JPGraph erstellt wurden zu speichern, ebenso werden dort Dateien vom Vorlagen-Editor abgelegt.
  • Für Dateien im admin Verzeichnis - chmod 755 (lesen/ausführen - für die gesamte Welt)

Die Standard-Dateien in diesem Verzeichnis benötigen keine Schreibrechte - de facto sollten sie auch keine bekommen, da bei normalen Gebrauch von LimeSurvey sie nie welche benötigen werden.

Eine mögliche Strategie ist es, den Besitzer der LimeSurvey-Dateien auf Ihre persönlichen Benutzernamen und die Gruppe der LimeSurvey-Dateien auf die Webserver-Gruppe zu setzen. Normalerweise enthält die Webserver-Gruppe nur das Webserver-Konto (und evtl. noch ein Webmaster-Konto).

Zum Beispiel, wenn Sie Ihr Benutzername 'myaccount' ist und der Webserver-Benutzer ist 'apache' in der 'apache'-Gruppe, dann können Sie von einem Shell-Zugang folgenden Befehl verwenden:

$ chown -R myaccount:apache limesurvey/

Legen Sie dann die Datei- und Unterverzeichniss-Berechtigungen fest.

Damit das Skript funktioniert muss es Schreibzugriff auf einige Verzeichnisse haben:

  • Das "/limesurvey/tmp" Verzeichnis und dessen Unterverzeichnisse sind für Importe/Uploads sollte auf "Lesen & Schreiben" für deinen Webserver gesetzt sein.
  • Das upload/ Verzeichnis und alle Unterverzeichnisse müssen auch "Lesen & Schreiben" für Ihren Webserver gesetzt habe, um es zu ermöglichen Bild-und Mediendateien hoch zu laden.
  • Alle anderen Verzeichnisse und Dateien können auf "Nur Lesen" gesetzt werden.
Datei:help.png Hinweis: Angenommen, dass Sie die oben genannten Empfehlungen für Besitzer/Gruppe befolgt haben, können diese Einstellungen mit folgenden Befehlen angewendet werden:

$ chmod -R o-r-w-x limesurvey/

$ chmod -R -w limesurvey/

$ chmod -R 770 limesurvey/tmp

$ chmod -R 770 limesurvey/upload

Dateirechte mit Windows

Wenn sie einen Windows Webserver verwenden sollten sie sicherstellen, dass der Benutzer des Webserver-Prozess Schreibrechte auf das admin Verzeichnis hat. Für alle anderen Dateien genügen "nur Lesen" und "Ausführen"-Rechte.

Damit das Skript funktioniert muss es Schreibzugriff auf einige Verzeichnisse haben:

  • Das "/limesurvey/tmp" Verzeichnis und dessen Unterverzeichnisse sind für Importe/Uploads sollte auf "Lesen & Schreiben" für deinen Webserver gesetzt sein.
  • Das upload/ Verzeichnis und alle Unterverzeichnisse müssen auch "Lesen & Schreiben" für Ihren Webserver gesetzt habe, um es zu ermöglichen Bild-und Mediendateien hoch zu laden.
  • Alle anderen Verzeichnisse und Dateien können auf "Nur Lesen" gesetzt werden.
Datei:help.png 'Hinweis:
  • Je nach Webserver-Konfiguration müssen Sie mit denm Befehl chmod die Rechte für beschreibbare Ordner auf 755 oder 777 setzen, um diese für den Webserver beschreibbar zu machen. Versuchen 755 zuerst - wenn es nicht funktioniert 'aktualisiere' auf 777.
  • Sie können auch versuchen, den Zugriff auf config.php für anderen zu beschränken, indem Sie diese Datei-Berechtigungen auf 750 setzen - wenn es nicht funktioniert 'aktualisiere' auf 755.

Dateirechte in Windows

Wenn Sie einem Windows-Server benutzen, sollten Sie sicherstellen, dass im Ordner "admin" es dem Eigentümer des webserver-Prozesses erlaubt ist Dateien in dieses Verzeichnis zu schreiben, aber alle anderen Dateien können auf nur Lesen und Ausführen gesetzt werden.

Weitere Sicherheitsvorkehrungen

Die Datei config.php beinhaltet den Benutzernamen und das dazugehörige Passwort für den Datenbankserver. Dieses zieht weitere Sicherheitsaspekte nach sich, insbesondere, wenn sie einen Benutzer mit weitreichenden Zugriffsrechten auf die Datenbank verwenden. Wenn sie das Risiko etwas minimieren möchten, empfiehlt es sich, einen eigenen Benutzer anzulegen, welche nur über die entsprechenden Rechte verfügt, welche für eine Verwendung von LimeSurvey von Nöten sind.

Der beste Weg wäre es, wenn sie die Datei config.php in einem nicht dem Webserver zugeordneten Verzeichnis ablegen. Für Apache-Benutzer bedeutet dies, dass sie die config.php in einem Verzeichnis oberhalb der htdocs-Order ablegen. Von Seiten der Entwickler wurde diese Vorgehensweise zwar noch nicht getestet, aber es spricht von Skript-Seite nichts dagegen, wieso eine solche Einstellung nicht machbar sein sollte. Sie müssen in diesem Fall nur all jene PHP-Dateien des Skripts modifizieren, welche (meist am Dateianfang) die Befehlszeile `include ("config.php");` beinhalten und diese so abändern, dass diese  auf den vollständigen Pfad zu ihrer config.php zeigt, zum Beispiel: `include("c:/Programme/apache group/apache/phpsafe/config.php");` Wie gesagt, dies wurde noch nicht getestet, wenn sie es versuchen, teilen sie uns bitte ihre Erfahrungen hierzu im Forum oder Bugtracker mit. Für zukünftige Versionen wird vielleicht noch ein einfacherer Weg gefunden.

Ein anderer Weg, um diese Informationen zu sichern sein kann, das man bestimmte Informationen aus der /application/config/config.php-Datei in einem Nicht-Web-Verzeichnis abgelegt, also für Apache Anwender ist dies das Verzeichnis pberhalb des htdocs (aka public_html oder www) Ordners. So verwenden Sie config.php, die aber nur eine Zeile enthält - eine Zeile, die die Datei mit den richtigen Konfigurationsinformationen enthält (z.B.: <?php return include("/home/hostfolder/safedata/configreal.php");?>). Entfernen Sie alle aktuellen Konfigurationsdaten aus /application/config/config.php und fügen Sie ihn in der anderen Datei (configreal.php) ein, die von /application/config/config.php inkludiert wird. Diese andere Datei sollte sich in einem Nicht-Web-Verzeichnis befinden. Dann wird die Datei /application/config/config.phpkeine Datenbank-Passwörter usw. enthalten - nur den Namen der Datei, die die Datenbankinfos wiklich beinhaltet. Dadurch wird vermieden, dass man alle anderen Dateien, die /application/config/config.php nutzen, ändern muss. Allerdings müssen Sie configreal.php bearbeiten und die folgenden Parameter ändern:

'basePath' => dirname(dirname('''FILE''')),
'runtimePath' => dirname(dirname(dirname('''FILE'''))).DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'runtime',
[...]

'urlManager' => array(
   [...]
   'rules' => require('routes.php'),
   [...]
);

to use absolute directory paths to work properly. Example:

'basePath' => '/var/www/htdocs/limesurvey',
'runtimePath' => '/var/www/htdocs/limesurvey/tmp/runtime',
[...]

'urlManager' => array(
   [...]
   'rules' => require('/var/www/htdocs/limesurvey/config/routes.php'),
   [...]
);

Verwenden Sie "admin" nicht als Standard-Benutzer. Gehen Sie zu Ihrer MySQL-Datenbank (oder welchem Datenbanktyp auch immer) und ändern Sie den Standard-Benutzernamen "admin" auf was immer Sie bevorzugen (Z. B. "admin_xyz"). Es wird jetzt viel schwerer sein, den Administrator-Benutzernamen zu erraten. Denken Sie daran, das dies einer der beiden Variablen ist die Eindringlinge verwenden können, um Zugang zu erhalten. Das admin-Passwort ist die andere Variable. So wählen Sie dies sehr sorgfältig - je länger, je besser.