3rd Party Applications absichern

Aus
Version vom 3. Dezember 2008, 19:01 Uhr von Jahlives (Diskussion | Beiträge) (Die Seite wurde neu angelegt: == 3rd Party Applications absichern == === What's that? === Die Disk- und Cubestations von Synology lassen sich sehr einfach mit eigenen Anwendungen erweitern. Diese la...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

3rd Party Applications absichern

What's that?

Die Disk- und Cubestations von Synology lassen sich sehr einfach mit eigenen Anwendungen erweitern. Diese lassen sich dann sehr einfach in den Synology DS-Manager einbauen und von dort aus verwenden. Da dabei meist Code eingesetzt wird, der u.U. sehr tief ins Systen eingreift und unter Root Rechten läuft, muss der Zugriff darauf eingeschränkt werden können. Dabei gibt es verschiedene Ansätze, welche alle ihre Vor- und Nachteile haben. Der beste Ansatz ist es dazu die Userverwaltung der DS/CS dazu zu verwenden. Also ich denke die folgenden zwei Dinge im Zusammenspiel funzen am Besten um den DS-Manager und die 3rd Party Applications abzusichern.

.htaccess

Je nachdem was man auf der DS mit der Datei schützen will gibt es verschiedene Orte, um die .htaccess Datei zu platzieren. Diese Datei beinhaltet dann eine White List von IP Adressen, die zugreifen dürfen. Der Rest kriegt einen 403-er (Forbidden). Wenn es nur um den Schutz der 3rd Party geht, dann kann man die Datei auch unter /usr/syno/synoman/phpsrc erstellen. Dies hat aber den Nachteil, dass auch Zugriffe auf die Verzeichnisse des User-Apachen eingeschränkt würden. Auch die Zugriffe auf die Photostation würden dieser Prüfung unterworfen werden. Am besten wird also in jedem Verzeichnis einer 3rd Party Application eine .htaccess Datei hinzugefügt.

Damit die .htaccess korrekt funzen kann sind zwei zusätzliche Module nötig: mod_rewrite und mod_headers. Zumindest mod_rewrite ist die Minimalvoraussetzung. Diese beiden Module wurden mit dem Apache geliefert und müssen "nur" in den Config aktiviert werden.

$ nano -w /usr/syno/apache/conf/httpd.conf-sys

ziemlich am Ende des Files wird php5_module geladen. Davor sollten die Aufrufe für die beiden Module erfolgen (am besten nach dem schliessenden </IfModule>)

LoadModule headers_module modules/mod_headers.so
LoadModule rewrite_module modules/mod_rewrite.so

Danach die Datei speichern und den Webserver neustarten

$ sh /usr/syno/etc.defaults/rc.d/S97apache-sys.sh restart

Achtet euch beim Restart des Servers auf allfällige Fehlermeldungen auf der Konsole. Wenn alles geklappt hat dann kann man die Datei anlegen

$ nano /usr/syno/synoman/.htaccess

und mit folgendem Inhalt füllen

ErrorDocument 403 "Meldung die beim Forbidden angezeigt werden soll"
RewriteEngine on

RewriteCond %{REMOTE_ADDR} !^192.168.*$
RewriteCond %{REMOTE_ADDR} !^1.2.3.4$

RewriteRule ^.*$ - [forbidden]

Die erlaubten IP Adressen müsst ihr natürlich nach euren Bedürfnissen anpassen.

php Code

<?php
putenv('HTTP_COOKIE='.$_SERVER['HTTP_COOKIE']);
putenv('REMOTE_ADDR='.$_SERVER['REMOTE_ADDR']);
$user=exec('/usr/syno/synoman/webman/modules/authenticate.cgi');
if($user !== 'admin'){
  header("HTTP/1.0 403 Forbidden");
  exit;
}
?>

Damit dieser PHP Code zur Ausfürung kommt und man ihn nicht in jede Datei einzeln einbinden muss, bietet sich die PHP Konfig-Einstellung auto_prepend_file an. Normalerweise steht diese PHP Direktive in der php.ini Datei. Dies hätte aber hier den Nachteil, dass alle PHP Files auf dem Server betroffen wären. Der Apache Server bietet über .htaccess Dateien die Möglichkeit gewisse PHP Direktiven zur Laufzeit und pro Verzeichnis festzulegen. Damit ist das Ganze sehr felxibel. Dazu wird in jedem Verzeichnis der 3rd Party Applications eine .htaccess Datei angelegt

php_value auto_prepend_file /usr/syno/synoman/phpsrc/checkuser.php

die obige Zeile ist der einzig nötige Eintrag in dieser .htaccess Datei. checkuser.php ist den Name unter dem ihr obigen PHP Code abgespeichert habt. Ihr könnt aber einen beliebigen Namen und ein beliebiges Verzeichnis für die Datei wählen, da der Server unter root läuft und somit auf alle Dateien/Verzeichnisse zugreifen darf.