3rd Party Applications absichern

Aus Synology Wiki
Wechseln zu: Navigation, Suche

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.

DSM 5

Das sich beim DSM 5 so einiges ändert, ein kurzes How To, basiert auf Apache / Webserver limitations in 5.0

httpd.conf-sys

Es fehlen Module

# In /etc/httpd/conf/httpdd.conf-sys nach "Listen 5000" einfügen und
# Neustarten (reboot nicht httpd oder synoservicecfg)
LoadModule auth_basic_module modules/mod_auth_basic.so	
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule auth_digest_module modules/mod_auth_digest.so

.htaccess

Digest statt Basic Auth, s. Apache digest authentication how to

SPDY

SPDY bei Webservice ausschalten


DSM < 5

.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 schließenden </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 beim Restart des Servers auf mögliche 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.

Wenn man also am Diskstation Manager als admin angemeldet ist und der Timeout noch nicht zugeschlagen hat, kann man die 3rd Party Applications direkt aufrufen und benutzen (http://192.168.0.2:5001/phpsrc/APPL/index.php). Ein netter Nebeneffekt dabei ist, dass bei jedem direkten Neuaufruf der Timeout verlängert wird d.h. man fliegt im DS-Manager nicht raus solange man die 3rd Party Application regelmässig neulädt.
Mit ein bisschen Javascript bzw. AJAX liesse sich da bestimmt noch etwas basteln ;-):

Eine 3rd Party Application, die wenn aufgerufen ein neues Fenster öffnet und in einer Endlosschleife alle 5 Minuten durch den Aufruf einer URL mit dem obigen PHP Code den Timeout verlängert. Solange das Fenster nicht geschlossen wird kann man auch mal schnell in den Supermarkt am anderen Ende der Stadt fahren, um einen Kasten Bier zu holen, ohne dass man aus dem DS-Manager rausfliegt :-)

DSM per .htaccess schützen

Geht ganz einfach, eine .htaccess Datei mit folgenden Inhalt:

order allow,deny
allow from 10.10.0. #Heimnetz
allow from 123.123.123. #Arbeit

in das Verzeichnis

/usr/syno/synoman/webman/modules

kopieren und somit ist eurer DSM Zugang nur noch von jenen IP Adressen möglich die ihr in der .htaccess angegeben habt

Infos zu den IP Adressen:

Die erlaubten IP Adressen in der .htaccess müsst ihr nach euren Gegebenheiten anpassen, ihr könnt einer ganzen IP Range den Zugriff gewähren, dafür müsst ihr nur die ersten drei Oktetten in der .htaccess eintragen, also z.B.

allow from 10.10.0.

Damit wird der Zugriff auf den DSM über die IP´s von 10.10.0.1 bis 10.10.0.255 erlaubt, oder ihr wollt das nur vom Rechner mit der IP 10.10.0.2 auf den DSM zugegriffen werden darf, dann müssen in der .htaccess alle vier Oktetten eingetragen werden

allow from 10.10.0.2

mit jeder neuen Zeile die mit allow from beginnt könnt ihr weiteren IP´s den Zugriff auf euren DSM gewähren, mit # am Ende jeder Zeilen könnt ihr Kommentare hinzufügen, damit ihr beim bearbeiten des .htaccess Files wisst welche IP wohin gehört

Links