Enabling Webdav on Lampp-Server

Problems with the Linux version of XAMPP, questions, comments, and anything related.

Enabling Webdav on Lampp-Server

Postby christian42 » 20. September 2020 08:18

Hello together,
I'm trying to enable Webdav on my server but can't get it to work.
I use MX Linux and the xampp-linux-7.4.10-0-installer.run.

I tried enabling Webdav by including the "etc/extra/httpd-dav.conf" file by uncommenting the line in the httpd.conf:
Code: Select all
# Distributed authoring and versioning (WebDAV)
Include etc/extra/httpd-dav.conf

And created the file "user.passwd" by using the command in the corresponding httpd-dav.conf-file:
Code: Select all
#
# Distributed authoring and versioning (WebDAV)
#
# Required modules: mod_alias, mod_auth_digest, mod_authn_core, mod_authn_file,
#                   mod_authz_core, mod_authz_user, mod_dav, mod_dav_fs,
#                   mod_setenvif

# The following example gives DAV write access to a directory called
# "uploads" under the ServerRoot directory.
#
# The User/Group specified in httpd.conf needs to have write permissions
# on the directory where the DavLockDB is placed and on any directory where
# "Dav On" is specified.

DavLockDB "/opt/lampp/var/DavLock"

Alias /uploads "/opt/lampp/uploads"

<Directory "/opt/lampp/uploads">
    Dav On

    AuthType Digest
    AuthName DAV-upload
    # You can use the htdigest program to create the password database:
    #   htdigest -c "/opt/lampp/user.passwd" DAV-upload admin
    AuthUserFile "/opt/lampp/user.passwd"
    AuthDigestProvider file

    # Allow universal read-access, but writes are restricted
    # to the admin user.
    <RequireAny>
        Require method GET POST OPTIONS
        Require user admin
    </RequireAny>
</Directory>

#
# The following directives disable redirects on non-GET requests for
# a directory that does not include the trailing slash.  This fixes a
# problem with several clients that do not appropriately handle
# redirects for folders with DAV methods.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[01234]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
BrowserMatch " Konqueror/4" redirect-carefully

When I try to access the http://localhost/uploads/ in my Browser, I get "Error 403 - Forbidden access" without ever been asked to enter username and password. Same errors comes up in a webdav-client with entered username and password.

On thing that is confusing me, is that I can't find the folder "uploads" in /opt/lampp/ nor /opt/lampp/var/DavLock, so I created them myself but that changed nothing. (I also gave read and write permissions to daemon and to www-data).

The last thing I tried was to manually activate webdav for an other folder by putting the following into the httpd.conf-file:
Code: Select all
DavLockDB /opt/lampp/var/DavLock

<Directory "opt/lampp/htdocs/webdav/">
   Require all granted
   Dav On

</Directory>

But then I got an "Error 500 - internal server error" and the Erro-Log of the apache-server shows that it was unable to open the lock database and the property database. I tried giving permissions to daemon and www-data for the coressponding folder, which I manually created, again. At least I can't find a lock databse in the folder where it should be, so do I have to create it or should it be created automatically?

I would really appreciated help and I'm sorry for my bad English, I'm not used to write technical texts in English...
Christian
christian42
 
Posts: 3
Joined: 19. September 2020 11:49
XAMPP version: 7.4.10
Operating System: MX Linux

Re: Enabling Webdav on Lampp-Server

Postby Nobbie » 20. September 2020 12:27

Es gibt hier auch ein deutsches Forum, ist das besser?
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Enabling Webdav on Lampp-Server

Postby christian42 » 23. September 2020 06:46

Ja, Deutsch ist besser. Hab mir nur gedacht, dass es im Englischen Forum eventuell mehr User gibt, die mir helfen können. ;)
christian42
 
Posts: 3
Joined: 19. September 2020 11:49
XAMPP version: 7.4.10
Operating System: MX Linux

Re: Enabling Webdav on Lampp-Server

Postby Nobbie » 23. September 2020 11:58

Nein, das ist ein deutsches Forum und es gibt nur einen englischsprachigen User hier, der auch Ahnung hat (jjtag o.ä.).

Ich habe bei mir mal einen WebDAV in Xampp unter Linux eingerichtet, Du machst einige Dinge falsch, andere hast Du falsch verstanden aber insgesamt bist Du nicht meilenweit weg. Mein persönlich größtes Problem war, überhaupt einen funktionierenden WebDAV Client zu finden, der mir sagen kann, dass meine Seite richtig funktioniert. Was nämlich NICHT geht (d.h. es geht schon, aber das ist dann keine WebDAV Funktionalität) ist es, im Browser einfach http://... einzugeben. Dann wird die Seite nur mit einem normalen HTTP Request abgerufen.

Ich habe einen Ordner webdav angelegt (/opt/lampp/webdav) und dann mit chown daemon:daemon den User und die Gruppe an daemon vergeben. Das ist schon Dein erster (kleiner) Fehler, Du benutzt www-data, aber Xampp wird nicht so ausgeliefert. in httpd.conf findest Du den Eintrag "Group daemon", also ist auch die Gruppe daemon.

Dann braucht man einen ALIAS, der ist einfach:

Code: Select all
ALIAS /webdav /opt/lampp/webdav


Außerdem muss in httpd.conf der include auf httpd-dav.conf freigeschaltet werden (hast Du schon getan, vorne das "#" wegmachen).

Dann hast Du ein Lockfile angegeben, da hast Du einen ganz schweren Fehler gemacht, die Angabe DavLockDB muss auf einen Pfadnamen (eine Datei!) verweisen, NICHT auf einen Ordner. Also so beispielsweise:

Code: Select all
DavLockDB "/opt/lampp/var/DavLock/DB"


Und das ist der Trick: dieses "DB" am Ende (habe ich einfach ausgedacht), das ist eine DATEI! Kein Ordner! Aber NICHT die Datei anlegen, das macht Apache selbst. Du musst aber den Ordner darüber anlegen, also /opt/lampp/var/DavLock - den Ordner musst Du anlegen und dann (genau wie den Ordner webdav von oben) an User und Gruppe daemon vergeben:

Code: Select all
sudo chown daemon:daenom /opt/lampp/var/DavLock


Und jetzt nicht DB anlegen!

Dann stelle ich mal meine httpd-dav.conf hier ein, da hast Du inzwischen auch einige Fehler drin. Deine Require Statements sind so total sinnlos, ich habe aber die Originale auch rausgenommen. Im Original ist die Konfiguration so eingestellt, dass ein "normaler" GET Request (und ein paar andere, aber das ist der wichtigste HTTP Request) ohne Passwort einfach durchläuft. D.h. es wird der Inhalt von webdav angezeigt. Da ist übrigens Dein erster Fehler gewesen, Du musst (theoretisch) in dem Ordner webdav eine Datei index.html anlegen, deren Inhalt wird von Apache ausgegeben, wenn http://localhost/webdav verlangt wird. Wenn es diese Datei nicht gibt (und die gab es bei Dir nicht), dann bekommst Du einen Error 403. Denn das Verzeichnis webdav darf mit Deiner Konfiguration nicht angezeigt werden. Das ist auch leider ungenau im Xampp Default Setup voreingestellt, es muss nämlich UNBEDINGT "Options Indexes" im Directory Container für den webdav Ordner drin stehen, sonst funktioniert das ganze WebDAV Zeug nicht. Also hier die komplette httpd-dav.conf:

Code: Select all
#
# Distributed authoring and versioning (WebDAV)
#
# Required modules: mod_alias, mod_auth_digest, mod_authn_core, mod_authn_file,
#                   mod_authz_core, mod_authz_user, mod_dav, mod_dav_fs,
#                   mod_setenvif

# The following example gives DAV write access to a directory called
# "uploads" under the ServerRoot directory.
#
# The User/Group specified in httpd.conf needs to have write permissions
# on the directory where the DavLockDB is placed and on any directory where
# "Dav On" is specified.

DavLockDB "/opt/lampp/var/DavLock/DB"

Alias /webdav "/opt/lampp/webdav"

<Directory "/opt/lampp/webdav">
    Options Indexes
    Dav On

    AuthType Digest
    AuthName DAV-upload
    # You can use the htdigest program to create the password database:
    #   htdigest -c "/opt/lampp/user.passwd" DAV-upload admin
    AuthUserFile "/opt/lampp/user.passwd"
    AuthDigestProvider file

    # Allow universal read-access, but writes are restricted
    # to the admin user.
    <RequireAny>
#       Require method GET POST OPTIONS
        Require user admin
    </RequireAny>
</Directory>

#
# The following directives disable redirects on non-GET requests for
# a directory that does not include the trailing slash.  This fixes a
# problem with several clients that do not appropriately handle
# redirects for folders with DAV methods.
#
# BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
# BrowserMatch "MS FrontPage" redirect-carefully
# BrowserMatch "^WebDrive" redirect-carefully
# BrowserMatch "^WebDAVFS/1.[01234]" redirect-carefully
# BrowserMatch "^gnome-vfs/1.0" redirect-carefully
# BrowserMatch "^XML Spy" redirect-carefully
# BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
# BrowserMatch " Konqueror/4" redirect-carefully


Wie Du siehst, habe ich den "Require method GET POST OPTIONS" auskommentiert. Wenn ich das nicht gemacht hätte, kann man ohne User und Passwort einfach den Inhalt im Browser ansehen, das wollen wir ja eigentlich nicht. (Außerdem habe ich die ganzen BrowserMatch auskommentiert, brauchen wir nicht.) Jetzt steht nur noch "Require user admin" drin, d.h. jetzt muss der Anwender (bzw. der WebDAV Client) den User admin und dessen Passwort angeben. Das müssen wir noch anlegen im Ordner /opt/lampp, das komplette Kommando sieht so aus:

Code: Select all
sudo /opt/lampp/bin/htdigest -c "/opt/lampp/user.passwd" DAV-upload admin


Das musst Du in einem Terminal ausführen, dann kommt eine Aufforderung, für einen User admin ein Passwort anzugeben, das muss man dann auch nochmal bestätigen. Ich habe der Einfachheit halber auch da "admin" genommen. Kannst Du jedes eigene Passwort nehmen. Danach gibt es die Datei user.passwd im Verzeichnis /opt/lampp. Zur Sicherheit würde ich auch diese Datei an User und Gruppe daemon vergeben, denn Apache MUSS sie lesen können. Das geht natürlich auch mit den richtigen Dateiberechtigungen (chmod), das spielt keine Rolle. Also ich habe das so gemacht:

Code: Select all
sudo chown daemon:daemon /opt/lampp/user.passwd


So, jetzt haben wir alles fertig. Jetzt aber NICHT eine Datei index.html in webdav einstellen. Da ich aber auch keinen leeren Ordner haben wollte, habe ich einfach meine index.html umbenannt in index.org - dann steht wenigstens irgendeine Datei in /opt/lampp/webdav drin.

Jetzt brauchen wir einen WebDAV Client, ich benutze Linux Mint, da ist als Explorer "Nemo" dabei, der kann webdav. Die meisten Explorer in Linux können es. Jetzt kann ich natürlich nicht sehen, was Du benutzt. Bei Nemo (und einigen anderen Datei Explorern) klickst Du oben links auf "Datei" und dort im Menu auf "Mit Server verbinden...". Ach so - natürlich als erstes Xampp resp. Apache starten. Wenn Du einen Fehler in der Konfiguration hast, könnte es sein, dass der Start fehlschlägt. Ich habe fast immer irgendeinen Tippfehler drin...

So, dann machen wir im Nemo oder so weiter. Im Folgedialog (Serverdetails) musst Du den Server angeben, das ist "localhost" (ohne Gänsefüsschen). Der Port sollte 80 sein. Als Typ musst Du "WebDAV (HTTP)" wählen (so oder ähnlich muss das heißen, wenn da gar nichts in der Art steht, kann das Dein Explorer nicht, dann installiere Nemo aus dem Repository). Dann noch Benutzernamen (admin) und Passwort (admin, oder eben was Du oben festgelegt hast) und wenn alles fertig ist, abschicken. "Passwort merken" natürlich aktivieren, sonst musst Du es immer neu eingeben.

Wenn alles richtig ist, zeigt Dir Nemo jetzt den Ordnerinhalt von /opt/lampp/webdav an, aber unter der Adresse dav://admin@localhost/webdav (dav: ist das Protokoll, admin der Benutzername, das Passwort natürlich nicht gezeigt, localhost ist der Server und webdav der Ordner). Jetzt kannst Du beispielsweise mal in einen anderen Datei Ordner wechseln, markierst und kopierst irgendeine Datei und wechselst zurück auf den WebDAV Ordner (der steht bei mir links in der Leiste). Und dann mit Ctrl.V (Strg.V) die Datei da einfügen. Das sollte jetzt gehen, das ist jetzt Einfügen via WebDAV. Die Browser können das alle nicht (nur der Konqueror Browser, habe ich aber nicht getestet).
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Enabling Webdav on Lampp-Server

Postby christian42 » 26. September 2020 14:12

Vielen Dank für die ausführliche Antwort und Hilfe, Nobbie!

Ein paar Sachen, die du angemerkt hast, hatte ich schon versucht, aber nie in Kombination bzw. dann war eine andere Kleinigkeit falsch. Jetzt hat es aber dank deiner Hilfe funktioniert. :)

Jetzt hatte ich noch das Problem, dass ich mich mit dem Programm, für das ich WebDav nutzen möchte (Joplin) trotzdem keinen Zugriff bekam, im Error-Log des Apache-Srvers stand was von "Wrong authentication type: Basic". Nach etwas Recherche bin dann drauf gekommen, dass Joplin kein Digest unterstützt. Hab das jetzt auf dem Server entsprechend umgestellt und jetzt läuft es. Für meine Zwecke sollte die Sicherheit der Basic Authentication ausreichen. ;)

Nochmal vielen Dank für die Hilfe.
Christian
christian42
 
Posts: 3
Joined: 19. September 2020 11:49
XAMPP version: 7.4.10
Operating System: MX Linux

Re: Enabling Webdav on Lampp-Server

Postby Nobbie » 26. September 2020 21:57

christian42 wrote:Für meine Zwecke sollte die Sicherheit der Basic Authentication ausreichen. ;)


Selbstverständlich, ich würde auch nichts andere benutzen. Keine Ahnung, warum da in der Beispieldou digest genommen wird, das ist weder sicherer noch besser. Basic ist eigentlich der de fakto Standard.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04


Return to XAMPP for Linux

Who is online

Users browsing this forum: No registered users and 62 guests