mod_dav
描述: | 分布式创作和版本控制(WebDAV)功能 |
状态: | 延期 |
模块标识符: | dav_module |
源文件: | mod_dav.c |
摘要
该模块为 Apache 提供了 class 1 和 class 2 WebDAV('Web-based 分布式创作和版本控制')功能。 HTTP 协议的此扩展允许在 remote web 服务器上创建,移动,复制和删除资源和集合。
启用 WebDAV
要启用mod_dav,请将以下内容添加到httpd.conf
文件中的容器中:
Dav On
这启用了由mod_dav_fs模块实现的 DAV 文件系统提供程序。因此,必须使用LoadModule指令将该模块编译到服务器中或在运行时加载。
此外,必须使用DavLockDB指令在httpd.conf
文件的 global 部分中指定 DAV 锁定数据库的位置:
DavLockDB /usr/local/apache2/var/DavLock
包含锁数据库文件的目录必须可由_A和组写入 Apache running。
您可能希望在<Location>指令中添加<Limit>子句以限制对 DAV-enabled 位置的访问。如果要设置 DAV client 可以在一个请求中发送的最大字节数,则必须使用LimitXMLRequestBody指令。“normal”LimitRequestBody指令对 DAV 请求没有影响。
完整示例
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>
安全问题
由于 DAV 访问方法允许 remote clients 操作服务器上的 files,因此在启用mod_dav之前必须特别注意确保服务器是安全的。
服务器上启用 DAV 的任何位置都应通过身份验证进行保护。建议不要使用 HTTP 基本身份验证。您应该至少使用由mod_auth_digest模块提供的 HTTP 摘要式身份验证。几乎所有 WebDAV clients 都支持此身份验证方法。另一种方法是在启用SSL的连接上进行基本身份验证。
在mod_dav管理 files 的 order 中,它必须能够使用 Apache running 下的用户和组写入其控制下的目录和 files。创建的新 files 也将归用户和组所有。因此,控制对此帐户的访问权限非常重要。 DAV repository 被认为是 Apache 的私有;不应允许在 Apache 之外修改 files(对于使用 FTP 或 filesystem-level 工具的 example)。
mod_dav可能受到各种 denial-of-service 攻击。LimitXMLRequestBody指令可用于限制解析大型 DAV 请求时消耗的 memory 数量。DavDepthInfinity指令可以用来防止_consume 中存在大量 memory 的PROPFIND
请求。另一种可能的 denial-of-service 攻击涉及 client 简单地用许多大 files 填充所有可用磁盘空间。在 Apache 中没有直接的方法来阻止这种情况,因此您应该避免向不受信任的用户提供 DAV 访问权限。
复杂配置
一个 common 请求是使用mod_dav来操作动态 files(PHP 脚本,CGI 脚本等)。这很难,因为GET
请求总是 run 脚本,而不是下载其内容。避免这种情况的一种方法是将两个不同的 URL 映射到内容,其中一个将运行脚本,其中一个将允许使用 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 指令
描述: | 启用 WebDAV HTTP 方法 |
句法: | Dav On\|Off\|provider-name |
默认: | Dav Off |
Context: | 目录 |
状态: | 延期 |
模块: | mod_dav |
使用Dav
指令为给定容器启用 WebDAV HTTP 方法:
<Location "/foo"> Dav On </Location>
value On
实际上是mod_dav_fs模块提供的默认提供程序filesystem
的别名。请注意,一旦为某个位置启用了 DAV,就无法为子位置禁用它。有关完整的 configuration example,请查看以上部分。
在保护服务器之前,请不要启用 WebDAV。否则,每个人都可以在您的系统上分发 files。
DavDepthInfinity 指令
描述: | 允许 PROPFIND,深度:无限请求 |
句法: | DavDepthInfinity on\|off |
默认: | DavDepthInfinity off |
Context: | server config,virtual host,目录 |
状态: | 延期 |
模块: | mod_dav |
使用DavDepthInfinity
指令允许处理包含标题'Depth:Infinity'的PROPFIND
请求。由于此类请求可能构成 denial-of-service 攻击,因此默认情况下不允许。
DavMinTimeout 指令
描述: | 服务器保持对 DAV 资源的锁定的最小 time 时间 |
句法: | DavMinTimeout seconds |
默认: | DavMinTimeout 0 |
Context: | server config,virtual host,目录 |
状态: | 延期 |
模块: | mod_dav |
当 client 请求 DAV 资源锁定时,它还可以指定服务器自动删除锁定时的 time。此 value 只是一个请求,服务器可以忽略它或通知 client 任意 value。
使用DavMinTimeout
指令以秒为单位指定 return 到 client 的最小锁定超时。 Microsoft Web 文件夹默认为 120 秒的超时;DavMinTimeout
可以将此值覆盖到更高的 value(例如 600 秒),以减少 client 因网络延迟而失去锁定的可能性。
例
<Location "/MSWord"> DavMinTimeout 600 </Location>