Thursday, March 22, 2007

File sharing with Apache and WebDAV

If you want to share files from a Linux box to Windows clients, Samba is a popular solution. However, it can also be done with Apache and WebDAV. Here is a short HOWTO.

1) Let's say we want to share files in a directory named /usr/share/myfiles. I created a sub-directory called dav in that directory, and then I ran:
# chmod 775 dav
# chgrp apache dav
2) Make sure httpd.conf loads the mod_dav modules:
LoadModule dav_module modules/
LoadModule dav_fs_module modules/
3) Create an Apache password file (if you want to use basic authentication) and a user -- let's call it webdav:
# htpasswd -c /etc/httpd/conf/.htpasswd webdav

4) Create a virtual host entry in httpd.conf, similar to this one:
<VirtualHost *>
DocumentRoot "/usr/share/myfiles"
<Directory "/usr/share/myfiles">
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
ErrorLog share-error.log
CustomLog share-access.log combined

DavLockDB /tmp/DavLock

<Location /dav>
Dav On
AuthType Basic
AuthName DAV
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user

5) Restart httpd, verify that if you go to you are prompted for a user name and password, and that once you get past the security dialog you can see something like 'Index of /dav'.

Now it's time to configure your Windows client to see the shared WebDAV resource. On the Windows client, either:
  • go to "My network connections" and add a new connection, or
  • go to Windows Explorer->Tools->Map Network Drive, then click on "Signup for online storage or connect to a network server"
Either option will bring up the "Add Network Place Wizard".
  • Click Next, then select "Choose another network location", then click Next.
  • For "Internet or network address", set At this point you'll be prompted for a user name/password; specify the ones you defined above.
  • After mapping the resource, you should be able to read/write to it.

Sometimes the Windows dialog asking for a user name and password will say "connecting to" and will keep asking you for the user name/password. The dialog is supposed to show the text you set in AuthName (DAV in my case). If it doesn't, click Cancel, then try again. You can also try to force HTTP basic authentication (as opposed to Windows authentication, which is what Windows tries to do) by specifying as the URL. See also this entry on the WebDAV Wikipedia page.



mike bayer said...

DAV is cool. though the experience we had with it, is that it doesnt scale for very large directories...if you hit a dir with many hundreds of files in it, either the client/server/both would basically crash. client application support for it was spotty as well.

i think its just a little immature because its not widely used as a generic filesharing system right now (like your password dialogue issue).

Grig Gheorghiu said...

zzzeek -- you're right, it seems flaky to me too. It's been around for a while in terms of the mod_dav module, so I tend to blame the Microsoft client implementation for it :-)


Unknown said...

hey grig, I know this article is a little dated, but it recently helped me move from Samba and domain issues to WebDav.

All windows clients have the issue about basic authentication (as you point out) but wanted to add that there is a registry key that you can modify to force basic auth:

Also I wanted to add that I have had no issues related to performance. We have a 6TB file share and speeds are vastly improved from SAMBA


Modifying EC2 security groups via AWS Lambda functions

One task that comes up again and again is adding, removing or updating source CIDR blocks in various security groups in an EC2 infrastructur...