Apache 模块 mod_dav

Description:分布式创作和版本控制(WebDAV)功能
Status:Extension
Module Identifier:dav_module
Source File:mod_dav.c

Summary

该模块为 Apache 提供了 1 类和 2 类WebDAV(“基于 Web 的分布式创作和版本控制”)功能。 HTTP 协议的此扩展允许在远程 Web 服务器上创建,移动,复制和删除资源和集合。

Enabling WebDAV

要启用mod_dav,请将以下内容添加到httpd.conf文件中的容器中:

Dav On

这将启用由mod_dav_fs模块实现的 DAV 文件系统提供程序。因此,必须使用LoadModule指令将该模块编译到服务器中或在运行时加载。

此外,必须使用DavLockDB指令在httpd.conf文件的全局部分中指定 DAV 锁数据库的位置:

DavLockDB /usr/local/apache2/var/DavLock

包含锁数据库文件的目录必须可由运行 Apache 的UserGroup写入。

您可能希望在<Location>指令内添加<Limit>子句,以限制对启用 DAV 的位置的访问。如果要设置 DAV Client 端可应一个请求发送的最大字节数,则必须使用LimitXMLRequestBody指令。 “正常” LimitRequestBody指令对 DAV 请求无效。

Full Example

DavLockDB "/usr/local/apache2/var/DavLock"

<Directory "/usr/local/apache2/htdocs/foo">
    Require all granted
    Dav On

    AuthType Basic
    AuthName DAV
    AuthUserFile "user.passwd"

    <LimitExcept GET POST OPTIONS>
        Require user admin
    </LimitExcept>
</Directory>

Security Issues

由于 DAV 访问方法允许远程 Client 端操作服务器上的文件,因此在启用mod_dav之前,必须格外小心以确保服务器安全。

服务器上启用 DAV 的任何位置都应通过身份验证进行保护。不建议使用 HTTP 基本身份验证。您至少应使用mod_auth_digest模块提供的 HTTP 摘要验证。几乎所有的 WebDAV Client 端都支持此身份验证方法。另一种方法是通过启用了SSL的连接进行基本身份验证。

为了使mod_davManagement 文件,它必须能够使用运行 Apache 的UserGroup写入其控制下的目录和文件。创建的新文件也将由此UserGroup拥有。因此,控制对该帐户的访问非常重要。 DAV 存储库被视为 Apache 私有的;禁止修改 Apache 外部的文件(例如使用 FTP 或文件系统级工具)。

mod_dav可能会遭受各种拒绝服务攻击。 LimitXMLRequestBody指令可用于限制在解析大型 DAV 请求时消耗的内存量。 DavDepthInfinity指令可用于防止非常大的存储库上的PROPFIND请求占用大量内存。另一种可能的拒绝服务攻击涉及 Client 端简单地用许多大文件填充所有可用磁盘空间。在 Apache 中没有直接的方法可以防止这种情况,因此您应避免将 DAV 访问权限授予不受信任的用户。

Complex Configurations

一种常见的请求是使用mod_dav来操纵动态文件(PHP 脚本,CGI 脚本等)。这很困难,因为GET请求将始终运行脚本,而不是下载其内容。避免这种情况的一种方法是将两个不同的 URL Map 到内容,其中一个将运行脚本,而另一个将允许使用 DAV 进行下载和操作。

Alias "/phparea" "/home/gstein/php_files"
Alias "/php-source" "/home/gstein/php_files"
<Location "/php-source">
    Dav On
    ForceType text/plain
</Location>

通过此设置,http://example.com/phparea可用于访问 PHP 脚本的输出,而http://example.com/php-source可与 DAV Client 端一起使用以对其进行操作。

Dav Directive

Description:启用 WebDAV HTTP 方法
Syntax:Dav On|Off|provider-name
Default:Dav Off
Context:directory
Status:Extension
Module:mod_dav

使用Dav指令为给定容器启用 WebDAV HTTP 方法:

<Location "/foo">
    Dav On
</Location>

On实际上是由mod_dav_fs模块提供服务的默认提供程序filesystem的别名。请注意,一旦为某个位置启用了 DAV,就不能为子位置禁用它。有关完整的配置示例,请查看section above

Warning

在保护服务器安全之前,请勿启用 WebDAV。否则,每个人都可以在您的系统上分发文件。

DavDepthInfinity Directive

Description:允许 PROPFIND,深度:无限请求
Syntax:DavDepthInfinity on|off
Default:DavDepthInfinity off
Context:服务器配置,虚拟主机,目录
Status:Extension
Module:mod_dav

使用DavDepthInfinity指令可处理包含 Headers'Depth:Infinity'的PROPFIND请求。由于这种类型的请求可能构成拒绝服务攻击,因此默认情况下是不允许的。

DavMinTimeout Directive

Description:服务器在 DAV 资源上保持锁定的最短时间
Syntax:DavMinTimeout seconds
Default:DavMinTimeout 0
Context:服务器配置,虚拟主机,目录
Status:Extension
Module:mod_dav

当 Client 端请求 DAV 资源锁时,它也可以指定服务器自动删除该锁的时间。该值只是一个请求,服务器可以忽略它,也可以将任意值通知 Client 端。

使用DavMinTimeout指令以秒为单位指定返回 Client 端的最小锁定超时。默认情况下,Microsoft Web Folders 的超时时间为 120 秒。 DavMinTimeout可以将此值 Rewrite 为更高的值(例如 600 秒),以减少 Client 端由于网络延迟而丢失锁的机会。

Example

<Location "/MSWord">
    DavMinTimeout 600
</Location>