Das Örtchen RSS-Feed
Suchen
Blog
Ähnliche Beiträge
Neueste Kommentare
Neueste Einträge
Populäre Einträge
Tagwolke
addon auswertung barcamp blog bug cms datenkrake drupal drupal 7 film frickeln friday gewinnspiel git hardware how-to individualisierung jquery meinung mmo modul nas php php5.3 problem se7en seo sicherheit sicherung software spiel teil theme trailer unterhaltung update windows windows 7 wordpress wow
Monatsarchiv

Sonstiges: Webdav-Zugriff auf eine Synology NAS

Da ich seit einiger Zeit eine NAS in meinem Heimnetzwerk am Laufen habe und viel unterwegs bin, brauchte ich dringend einen externen Zugriff auf meine dortigen Daten bzw. die Möglichkeit Daten von meinem Notebook direkt übers Internet dorthin zu sichern.

Ziel dieses Beitrags soll es also sein, einen Webdav-Zugang auf die public-Freigabe der NAS einzurichten und zwar mit Passwort gesichert und per SSL verschlüsselt.

Amazon Werbepause Synology DX5 Gehäuse ohne Festplatten (5-Bay, SATA, USB, Ethernet) schwarz

Voraussetzungen

  • Router (mit NAT-Unterstützung)
  • Synology DS-509+
  • Zugang zur public-Freigabe übers Heim-Netzwerk
  • root-Zugang zur Kommandozeile per Telnet/SSH (zB über Putty)
  • IPKG
  • MC (Midnight Commander)

Falls Ihr letzteren nicht installiert habt, so geht es auch ohne. Meine Beschreibungen setzen ihn jedoch voraus. Eine Installation des MC erfolgt bei Bedarf auf der Kommandozeile per ipkg install mc.

Außerdem sollte ein Zugriff auf die NAS übers Internet grundsätzliche möglich sein, d.h. Euer Router beispielsweise mittels DynDNS oder fester IP von außen angesprochen werden können.

Vorwort

ACHTUNG: Ich bin kein Linux-Administrator und habe somit alle Inhalte dieses Beitrags durch Ausprobieren herausgefunden bzw. überprüft. Ich werde keinerlei Haftung für eventuelle Schäden oder Folgen übernehmen, alles passiert auf Euer eigenes Risiko!

Für die ganze Recherche und Installation habe ich eine knappe Woche gebraucht, da ich zunächst eine Anleitung für den Lighttpd-Webserver benutzt habe (englische Variante). Ihr braucht vermutlich nicht einmal mehr zwei Stunden.

Der Lighttpd war zwar relativ schnell installiert und ich konnte nach Installation eines Microsoft Patches auch eine Verbindung mittels Windows Vista herstellen, aber jegliche Dateien wurden lediglich mit 0 Bytes Größe erstellt und es kam eine fiese Fehlermeldung (0x80070021). Notgedrungen entschied ich mich einen dritten Apache-Webserver auf meiner NAS aufzusetzen und diesen alleinig für Webdav zu verwenden, da ich leider nach mehrtägiger Recherche keinerlei Lösung für dieses Problem finden konnte.

Apache-Installation

Zunächst ist hierfür natürlich der Apache zu installieren. Dies geschieht mittels ipkg install apache auf der Kommandozeile. Da ich im Gegensatz zum entsprechenden Wiki-Artikel kein PHP benötige, habe ich nicht ipkg install php-apache benutzt. Auch MySQL und PEAR werden nicht benötigt!

Um festzustellen, ob die Installation erfolgreich war, sollte man nun ps -aux | grep httpd eingeben. Wenn der dritte Apache problemlos läuft, so sollten etliche Zeilen mit /opt/sbin/httpd erscheinen.

Der Apache befindet sich nach der Installation im Ordner /opt/etc/apache2 und die Log-Dateien im Ordner /opt/var/apache2/log. Sollte der Apache Startprobleme machen, so würde ich mir die beiden Dateien im Log-Ordner einmal ansehen. Beispielsweise mit mc den Midnight Commander auf der Kommandozeile starten, sich in den Ordner begeben, eine der Log-Dateien mit den Cursortasten oder der Maus auswählen und F3 drücken. Taucht dort eine Meldung bezüglich der Konfigurationseinstellung SSLSessionCache auf, so kann das Problem vermutlich ignoriert werden, ansonsten solltet Ihr erstmal die Meldung mit Big G suchen.

Solltet Ihr den Apache neu starten wollen, so geschieht dies über nachfolgenden Befehl:

/opt/etc/init.d/S80apache restart|start|stop

Wobei natürlich nur einer der drei Parameter anzugeben ist und der senkrechte Strich wegfällt.

Konfigurationsdateien

Ich habe mir die Dateien etwas umgebaut und zwar in folgende Struktur httpd.conf zum Laden der Module, httpd-default.conf für die Standardeinstellungen des Servers und httpd-dav.conf für alle weiteren Einstellungen. Die beiden letzteren Dateien befinden sich im Unterordner "extra" des Apache-Ordners. Alle weiteren conf-Dateien in dem Unterordner habe ich gelöscht (dies ist jedoch nicht unbedingt nötig).

Die einfachste Variante, um die nachfolgenden Dateien mit allen Änderungen auf den Server zu bekommen, wäre es sie lokal auf Eurem Rechner anzulegen und dann in die public-Freigabe der NAS zu kopieren. Mittels des Midnight Commanders könnt Ihr die Dateien dann an ihren richtigen Platz kopieren, indem Ihr beispielsweise auf der linken Seite in den Ordner /volume1/public und auf der rechten Seite in /opt/etc/apache2 bzw. /opt/etc/apache2/extra wechselt, dann auf der linken Seite die entsprechende Datei mit den Cursortasten oder der Maus auswählt, sie dann mit F5 kopiert und das Überschreiben erlaubt.

ACHTUNG: Die Besitz- und Zugriffsrechte der drei Dateien müssen entsprechend des Nachworts angepasst werden!

httpd.conf

# Dynamic Shared Object (DSO) Support
LoadModule authn_file_module libexec/mod_authn_file.so
LoadModule authn_dbm_module libexec/mod_authn_dbm.so
LoadModule authn_anon_module libexec/mod_authn_anon.so
LoadModule authn_dbd_module libexec/mod_authn_dbd.so
LoadModule authn_default_module libexec/mod_authn_default.so
LoadModule authz_host_module libexec/mod_authz_host.so
LoadModule authz_groupfile_module libexec/mod_authz_groupfile.so
LoadModule authz_user_module libexec/mod_authz_user.so
LoadModule authz_dbm_module libexec/mod_authz_dbm.so
LoadModule authz_owner_module libexec/mod_authz_owner.so
LoadModule authz_default_module libexec/mod_authz_default.so
LoadModule auth_basic_module libexec/mod_auth_basic.so
LoadModule auth_digest_module libexec/mod_auth_digest.so
LoadModule file_cache_module libexec/mod_file_cache.so
LoadModule cache_module libexec/mod_cache.so
LoadModule disk_cache_module libexec/mod_disk_cache.so
LoadModule mem_cache_module libexec/mod_mem_cache.so
LoadModule dbd_module libexec/mod_dbd.so
LoadModule dumpio_module libexec/mod_dumpio.so
LoadModule ext_filter_module libexec/mod_ext_filter.so
LoadModule include_module libexec/mod_include.so
LoadModule filter_module libexec/mod_filter.so
LoadModule substitute_module libexec/mod_substitute.so
LoadModule deflate_module libexec/mod_deflate.so
#LoadModule ldap_module libexec/mod_ldap.so
LoadModule log_config_module libexec/mod_log_config.so
LoadModule log_forensic_module libexec/mod_log_forensic.so
#LoadModule logio_module libexec/mod_logio.so
LoadModule env_module libexec/mod_env.so
LoadModule mime_magic_module libexec/mod_mime_magic.so
LoadModule cern_meta_module libexec/mod_cern_meta.so
LoadModule expires_module libexec/mod_expires.so
LoadModule headers_module libexec/mod_headers.so
LoadModule ident_module libexec/mod_ident.so
LoadModule usertrack_module libexec/mod_usertrack.so
LoadModule unique_id_module libexec/mod_unique_id.so
LoadModule setenvif_module libexec/mod_setenvif.so
LoadModule version_module libexec/mod_version.so
#LoadModule proxy_module libexec/mod_proxy.so
#LoadModule proxy_connect_module libexec/mod_proxy_connect.so
#LoadModule proxy_ftp_module libexec/mod_proxy_ftp.so
#LoadModule proxy_http_module libexec/mod_proxy_http.so
#LoadModule proxy_ajp_module libexec/mod_proxy_ajp.so
#LoadModule proxy_balancer_module libexec/mod_proxy_balancer.so
LoadModule ssl_module libexec/mod_ssl.so
LoadModule mime_module libexec/mod_mime.so
LoadModule dav_module libexec/mod_dav.so
LoadModule status_module libexec/mod_status.so
LoadModule autoindex_module libexec/mod_autoindex.so
LoadModule asis_module libexec/mod_asis.so
LoadModule info_module libexec/mod_info.so
#LoadModule cgid_module libexec/mod_cgid.so
LoadModule dav_fs_module libexec/mod_dav_fs.so
LoadModule vhost_alias_module libexec/mod_vhost_alias.so
LoadModule negotiation_module libexec/mod_negotiation.so
LoadModule dir_module libexec/mod_dir.so
LoadModule imagemap_module libexec/mod_imagemap.so
LoadModule actions_module libexec/mod_actions.so
LoadModule speling_module libexec/mod_speling.so
#LoadModule userdir_module libexec/mod_userdir.so
LoadModule alias_module libexec/mod_alias.so
LoadModule rewrite_module libexec/mod_rewrite.so

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
    User nobody
    Group nobody
</IfModule>
</IfModule>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \
\"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    CustomLog "var/apache2/log/access_log" combined
</IfModule>

<IfModule mime_module>
    TypesConfig etc/apache2/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule ssl_module>
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
</IfModule>

# Various default settings
Include etc/apache2/extra/httpd-default.conf

# Distributed authoring and versioning (WebDAV)
Include etc/apache2/extra/httpd-dav.conf

Der neue Webserver läuft mit den Berechtigungen von nobody:nobody. Der Inhalt der obigen Datei gefällt mir derzeit jedoch noch nicht wirklich, da noch viel zu viele unnötige Module eingebunden werden.

httpd-default.conf

# 'Main' server configuration
ServerRoot "/opt"

ErrorLog "var/apache2/log/error_log"
LogLevel warn

DefaultType text/plain

# 'Default' restrictions
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

httpd-dav.conf

DAVLockDB "/opt/etc/apache2/webdav/DAVLock"
DAVMinTimeout 600

ServerName www.example.com
Listen 8081
<VirtualHost *:8081>
    DocumentRoot "/volume1/public"
    
    SSLEngine On
    SSLCertificateFile /opt/etc/apache2/webdav/server.crt
    SSLCertificateKeyFile /opt/etc/apache2/webdav/server.key
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown    

    <Directory "/volume1/public">
        Options Indexes MultiViews
        AllowOverride None
        Order Allow,Deny
        Allow from All
        
        Dav On

        # htdigest -c "/opt/etc/apache2/webdav/user.passwd" Intranet user
        AuthType Digest
        AuthName Intranet
        AuthUserFile /opt/etc/apache2/webdav/user.passwd
        AuthDigestProvider file
        Require valid-user
    </Directory>
</VirtualHost>

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

Lediglich in der letzten Konfigurationsdatei sollten fortan Änderungen an den in Fettschrift markierten Stellen notwendig sein.

Erläuterungen zur Apache-Konfiguration

Als DocumentRoot wird das public-Verzeichnis angegeben. Damit man sowohl mittels WebDAV als auch Samba schreibend auf diesen Ordner zugreifen kann, ist es scheinbar nicht nötig irgendwelche Zugriffsrechte anzupassen. Als ich es trotzdem einmal versucht habe, hat sie ein Automatismus der NAS wieder in den Originalzustand zurückgeändert.

Vorbereitend sollte man nun mit cd /opt/etc/apache2 in den Apache-Ordner wechseln, mit mkdir webdav einen neuen Ordner "webdav" erstellen und mit chown nobody:nobody webdav dem Apache-Benutzer die Besitzrechte an diesem Ordner übertragen.

Sofern der Webserver mit einer echten oder DynDNS-Domain von außen erreichbar ist, so sollte diese als ServerName (hier www.example.com) angegeben werden. Ansonsten würde ich die entsprechende Zeile mit einer Raute auskommentieren.

Soweit ich informiert bin, läuft der Standard-Webserver für das Administrations-Interface auf den Ports 5000 (http) bzw. 5001 (https) und Anwendungen wie die Photostation auf Port 80 (http) bzw. 443 (https). Eine Überprüfung mit netstat -tule in der Kommandozeile bestätigt mich bei dieser Annahme. Deswegen habe ich mich für Port 8081 für den Webdav-Server entschieden. Soll ein anderer Port verwendet werden, so ist die Listen-Angabe und der öffnende VirtualHost-Tag zu ändern.

Erläuterungen zur Webdav-Konfiguration

Im Gegensatz zu Lighttpd benötigt man für die Webdav-Aktivierung unter Apache einen Container (hier Directory). Webdav ist dann nur für den dort angegebenen Ordner und seine Unterordner aktiv.

Die BrowserMatch-Angaben sollen Probleme mit diversen Webdav-Clients beseitigen. Etwas in dieser Art konnte ich bei keinem Lighttpd-Beispiel finden, weswegen ich einen Zusammenhang zur Lösung meiner Vista-Probleme vermute.

Erläuterungen zum Passwortschutz

Zumindest auf meiner Synology NAS existiert leider kein htpasswd-Kommando (soll aber auf einigen Modellen existieren), weswegen ich auf eine Digest-Authentifizierung ausgewichen bin.

htdigest -c "/opt/etc/apache2/webdav/user.passwd" Intranet user

Mit dem obigen Befehl wird nach Eingabe des Passworts und der Passwortbestätigung ein Benutzer mit dem Namen "user" in einer neuen Passwortdatei angelegt. Soll ein weiterer Benutzer angelegt werden, so ist diesmal der Parameter -c wegzulassen. Vor dem Benutzernamen erfolgt die Nennung des Wertes von AuthName (hier "Intranet").

Erläuterungen zur SLL-Verschlüssung.

Für die SSL-Verschlüsselung ist soweit ich herausgefunden habe, ein VirtualHost nötig (zumindest ist SSLEngine nicht im Directory-Container erlaubt). Damit SSL funktioniert braucht man ein entsprechendes Zertifikat, dies kann man sich mit OpenSSL selber ausstellen.

Leider hat hierbei der Befehl zur direkten Erzeugung einer PEM-Datei (wurde in den Beispielen im Synology Forum verwendet) bei mir irgendwie nicht richtig funktioniert, weswegen ich die lange Variante mit getrenntem Schlüssel und Zertifikat benutzt habe.

cd /opt/etc/apache2/webdav

In das Verzeichnis "webdav" wechseln.

openssl genrsa -des3 -out server.key 1024

Einen privaten Schlüssel erstellen, wobei man eine Passwort-Phrase eingeben und wiederholen muss.

openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [GB]:DE
State or Province Name (full name) [Berkshire]:Franken
Locality Name (eg, city) [Newbury]:Nuremberg
Organization Name (eg, company) [My Company Ltd]:example.com
Organizational Unit Name (eg, section) []:Intranet
Common Name (eg, your name or your server's hostname) []:*.example.com
Email Address []:webmaster at example dot com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Die Angaben in Fettschrift sind natürlich nur Beispiele! Da ich das Zertifikat für alle Subdomains verwenden will, hab ich das Wildcard-Symbol * benutzt.

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

Mit obigem Befehl wird im Nachhinein die Passwort-Phrase wieder entfernt (und vorher eine Sicherungskopie angelegt), da diese sonst bei jedem Apache-Neustart eingegeben werden müsste.

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Erzeugt ein selbst signiertes Zertifikat, welches ein Jahr gültig ist.

Nachwort zum Thema Berechtigungen

Die DAVLockDB wird vom Apache selbst angelegt und hat somit den korrekten Besitzer, jedoch zu viele Berechtigungen für sonstige Benutzer. Die drei conf-Dateien haben wir, sofern wir über Putty eingeloggt waren, vermutlich als root-Benutzer erstellt und diese haben somit den falschen Besitzer und zu viele Zugriffsrechte.

cd /opt/etc/apache2
chown nobody:nobody ht*.*
chmod 400 ht*.*

Die httpd.conf dem Benutzer Nobody übertragen und sie nur noch für ihn lesbar machen.

cd webdav
chmod 600 D*.*

Nur noch der Besitzer kann die DAVLockDB lesen und ändern.

chown nobody:nobody server.key
chown nobody:nobody server.crt
chmod 400 s*.*

Alle Dateien aus der Zertifikatserzeugung sind nur noch lesbar und die beiden für SSL notwendigen Dateien gehören nun Nobody.

chown nobody:nobody user.passwd
chmod 400 u*.*

Die Digest-Datei gehört fortan auch Nobody und ist ebenfalls nur noch lesbar. Dies ist aber auch sinnvoll so, da man im Normalfall den oder die Benutzer einmal anlegt und dann keine Änderungen mehr wünscht.

Testen

Zum Testen der Verbindung könnt Ihr einfach innerhalb Eures lokalen Netzwerks in einem Browser nachfolgendes eingeben.

https://192.168.0.1:8081/

Natürlich ist die IP-Adresse nur ein Beispiel und Ihr solltet stattdessen die benutzen, unter der Ihr auch das Administrations-Interface der NAS erreicht.

Es sollte nun eine Verzeichnisauflistung Eures public-Verzeichnisses erscheinen, natürlich erst nachdem Ihr Euch angemeldet habt. Das Surfen auf Eurem Webdav ist neben dem eigentlichen Mounten als Laufwerk fortan immer möglich.

Um Eure NAS per Webdav auch von extern erreichen zu können, solltet Ihr die IP-Adresse Eures Routers beispielsweise mittels DynDNS von außen erreichbar machen, in den NAT-Einstellungen des Routers den Port 8081 auf Eure NAS weiterleiten und auch eine eventuell im Router vorhandene Firewall entsprechend konfigurieren. Danach sollte dann nachfolgende URL im Browser funktionieren.

https://www.example.com:8081/

Für die Einrichtung des Windows XP Rechners könnt Ihr folgende Anleitung zu Rate ziehen und für Windows Vista ist die Anleitung von Netzwerk Total ganz brauchbar. Als Internet- oder Netzwerkadresse solltet Ihr dann Eure Domain wie beim Browsertest eingeben. Weitere Hinweise zu unterschiedlichen Problemen könnt Ihr einer englischen Anleitung und den dortigen Kommentaren entnehmen.

Solltet Ihr trotzdem Probleme mit dem Mounten haben, so hängt testweise eine Raute # an die Angabe der Internet- oder Netzwerkadresse an.

https://192.168.0.1:8081/#
https://www.example.com:8081/#

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Kommentare (1)

Re: Sonstiges: Webdav-Zugriff auf eine Synology NAS

Hallo Jan,

Klasse Anleitung, vielen Dank für die Mühe! Ich habe WebDAV auf meiner 207+ innerhalb von 60 Minuten ans Laufen bekommen, inklusive Schreibzugriffe via Windows XP Home. Sehr gut geschrieben!

Schöne Grüße!

Kommentar hinzufügen

(If you're a human, don't change the following field)
Your first name.
Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als nofollow markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden und/oder Links im Kommentarbereich enthalten, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne Link-Tag und ohne http(s):// in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.

Die ersten vier Kommentare (mit den gleichen Daten bei Name, E-Mail und Blog) landen vor der Veröffentlichung in meiner Freigabe-Warteschlange und ich behalte mir das Recht vor, Kommentare entsprechend dieser Regeln anzupassen oder zu löschen!

t3n Magazin - Jetzt im Abo bestellen