WebDAV
WebDAV (Web Distributed Authoring and Versioning) is an extension of HTTP/1.1 and therefore can be considered to be a protocol. It contains a set of concepts and accompanying extension methods to allow read and write across the HTTP/1.1 protocol. Instead of using NFS or SMB, WebDAV offers file transfers via HTTP.
The goal of this article is to setup a simple WebDAV configuration using a web server.
Server
Apache
Install the Apache HTTP Server.
Uncomment the modules for DAV:
LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so
Add the following line to /etc/httpd/conf/httpd.conf
:
DAVLockDB /home/httpd/DAV/DAVLock
Make sure you add it outside of any other directives, for instance right under the DocumentRoot
definition.
Next, add the following (also outside of any directives):
Alias /dav "/home/httpd/html/dav" <Directory "/home/httpd/html/dav"> DAV On AllowOverride None Options Indexes FollowSymLinks Require all granted </Directory>
Create the directory:
# mkdir -p /home/httpd/DAV
Check the permissions of DavLockDB's directory and ensure it is writable by the webserver user http
:
# chown -R http:http /home/httpd/DAV # mkdir -p /home/httpd/html/dav # chown -R http:http /home/httpd/html/dav
nginx
Install nginx-mainline (the mainline variant of nginx) and nginx-mainline-mod-dav-extAUR.
At the top of your /etc/nginx/nginx.conf
and outside any blocks, add:
load_module /usr/lib/nginx/modules/ngx_http_dav_ext_module.so;
Add a new location
for WebDAV to your server
block, for example:
location /dav { root /srv/http; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; # Adjust as desired: dav_access user:rw group:rw all:r; client_max_body_size 0; create_full_put_path on; client_body_temp_path /srv/client-temp; autoindex on; allow 192.168.178.0/24; deny all; }
The above example requires the directories /srv/http/dav
and /srv/client-temp
to exist.
You may want to use bind mounts to make other directories accessible via WebDAV.
rclone
Install the rclone package. It supports exporting a remote or local directory using webdav.
To serve the contents of /srv/http
with no authentication:
$ rclone serve webdav /srv/http
Client
Cadaver
After installation, test the WebDAV server:
$ cadaver http://localhost/dav dav:/dav/> mkcol test Creating `test': succeeded. dav:/dav/> ls Listing collection `/dav/': succeeded. Coll: test
Dolphin
To create a permanent WebDAV folder in Dolphin select Network in the remotes section of the places sidebar, then press the Add Network Folder button. The network folder wizard will appear. Select WebFolder (webdav), and fill in the subsequent form.
Alternately just click the path bar and then enter the url with webdav:// protocol specifier.
Nautilus
In Nautilus just choose "connect to server" and enter the address with dav://
or davs://
protocol specified:
dav://127.0.0.1/dav
dav://
, try to use davs://
as the protocol instead.rclone
rclone is a command line tool that lets you sync to/from, or mount (with many caching options), remote file systems including WebDAV.
Thunar
In Thunar just press Ctrl+l
and enter the address with dav or davs protocol specified:
davs://webdav.yandex.ru
Authentication
There are numerous different protocols you can use:
- plain
- digest
- others
Apache
Using htdigest(1) (remove the -c
option if the file exists):
# htdigest -c /etc/httpd/conf/passwd WebDAV username
httpd.conf
by the presence of this entry: LoadModule auth_digest_module modules/mod_auth_digest.so
Using plain htpasswd(1) (remove the -c
option if the file exists):
# htpasswd -c /etc/httpd/conf/passwd username
Next, httpd.conf
must be edited to enable authentication. One method would be to require the user foo
for everything:
<Directory "/home/httpd/html/dav"> DAV On AllowOverride None Options Indexes FollowSymLinks AuthType Digest # substitute "Basic" for "Digest" if you used htpasswd above AuthName "WebDAV" AuthUserFile /etc/httpd/conf/passwd Require user foo </Directory>
AuthName
must match the realm name passed when using the htdigest
command for digest authentication. For basic/plain authentication, this line may be removed. Also, make sure that the AuthUserFile
path matches that used with the htdigest
or htpasswd
commands above.If you want to permit everybody to read, you could use this in your httpd.conf
<Directory "/home/httpd/html/dav"> DAV On AllowOverride None Options Indexes FollowSymLinks AuthType Digest # substitute "Basic" for "Digest" if you used htpasswd above AuthName "WebDAV" AuthUserFile /etc/httpd/conf/passwd Require all granted <LimitExcept GET HEAD OPTIONS PROPFIND> Require user foo </LimitExcept> </Directory>
Do not forget to restart httpd.service
after making changes.
DirectoryIndex disabled
to your Directory
section.