WebDAV服务器部署指南
引语
话说WebDAV(Web-based Distributed Authoring and Versioning )是"网络分布式创作与版本管理"的简称,个人感觉WebDAV更像是以"HTTP请求"形式工作的文件服务器。更成熟的版本控制系统可以考虑基于 WebDAV协议开发的Subversion,近些时日折腾WebDAV纯属兴趣之作。如果你阅读了这篇技术文章有什么疑问可以随时留言询问。我会尽量在 最短的时间内予以作答的。
概要
这篇文章阐述了如何在windows平台Apache服务器上部署WebDAV及与其访问权限控制。逐步介绍了两种认证类型及与其两种认证支持模块和目录 及文件访问控制、操作权限的配置方法:两种HTTP认证类型分别为"基本认证(Basic Authentication)"和"摘要认证(Digest Authentication)";两种认证类型的认证支持分别为file和dbm,当然还有其他认证支持(比如DBD和LDAP);目录访问控制主要介 绍了Directory和Location配置指令,文件访问控制则介绍Files配置指令,验证介绍了require配置指令;目录和文件的操作权限则 介绍limit、limitExcept配置指令和HTTP协议所定义的各种操作方法。最后将其所有综合应用来实现我们的各种需求。
所需资源
Apache Web服务器
以下列出所需使用的Apache模块
认证类型模块
mod_auth_basic 提供HTTP基本认证支持
指令集简要
- AuthBasicAuthoritative 指令指定是否将(基本)认证和授权操作交由更底层的模块来处理
- AuthBasicProvider指令设置该区域的(基本)认证支持者(Provider)
mod_auth_digest 提供HTTP摘要认证支持
指令集简要
- AuthDigestAlgorithm 指令选择在摘要认证中用于计算请求和应答的散列值的算法
- AuthDigestDomain 指令在同一保护区域中需要进行摘要认证的URI
- AuthDigestNcCheck 指令禁用或启用检查服务器nonce-count发送
- AuthDigestNonceFormat 指令定义nonce如何生成
- AuthDigestNonceLifetime 指令服务器nonce(当前值)的有效秒数
- AuthDigestProvider 指令设置该区域的(摘要)认证支持者(Provider)
- AuthDigestQop 指令 指定 摘要认证的保护质量
- AuthDigestShmemSize 指令为了跟踪客户端而分配的共享内存字节数
认证支持模块
mod_authn_dbm 使用DBM文件数据库为认证提供支持
指令集简要
- AuthDBMType 指令 设置DBM文件数据库类型
- AuthDBMUserFile 指令设定一个含有认证使用的用户名/密码列表的DBM文件
mod_authn_default 在未正确配置认证模块mod_auth_basic的情况下简单拒绝一切认证信息
指令集简要
- AuthDefaultAuthoritative 指令指定是否将认证操作交由更底层的模块来处理
mod_authn_file 使用纯文本文件为认证提供支持
指令集简要
- AuthUserFile 指令设定一个含有认证使用的用户名/密码列表的纯文本文件
授权支持模块
mod_authz_dbm 使用DBM数据库文件为组提供授权支持
指令集简要
- AuthDBMGroupFile 指令设定一个包含用于执行用户认证的用户组列表的DBM文件
- AuthzDBMAuthoritative 指令指定是否将授权操作交由更底层的模块来处理
- AuthzDBMType 指令 设置DBM文件数据库类型
mod_authz_default 在未正确配置授权支持模块mod_authz_user或mod_authz_groupfile的情况下简单拒绝一切授权请求
指令集简要
- AuthzDefaultAuthoritative 指令指定是否将授权操作交由更底层的模块来处理
mod_authz_groupfile 使用纯文本文件为组提供授权支持
指令集简要
- AuthGroupFile 指令设定一个包含用于执行用户认证的用户组列表的纯文本文件
- AuthzGroupFileAuthoritative 指令指定是否将授权操作交由更底层的模块来处理
mod_authz_user 基于require配置指令为每个用户提供授权支持。
指令集简要
- AuthzUserAuthoritative 指令指定是否将授权操作交由更底层的模块来处理
WebDAV支持模块
mod_dav 允许Apache提供DAV协议支持
指令集简要
- Dav 指令启用WebDAV HTTP协议
- DavDepthInfinity 指令允许propfind方法请求深度为无限
- DavMinTimeout 指令 服务器为DAV资源保留锁定时间数
mod_dav_fs 为mod_dav访问服务器上的文件系统提供支持
指令集简要
- DavLockDB 指令 DAV文件锁定数据库位置
mod_dav_lock 为mod_dav锁定服务器上的文件提供支持
指令集简要
- DavGenericLockDB 指令 DAV文件锁定数据库位置(与DavLockDB指令区别是该指令可以作用域于Directory)
其他模块
mod_alias提供从文件系统的不同部分到文档树的映射和URL重定向
指令集简要
- Alias 指令 映射URL到文件系统的特定区域
- AliasMatch 指令 使用正则表达式映射URL到文件系统
- Redirect 指令 发送一个外部重定向使客户端重定向到一个不同的URL
- RedirectMatch 指令基于正则表达式匹配对当前的URL发送一个外部重定向
- RedirectPermanent 指令发送一个外部永久重定向使客户端重定向到一个不同的URL
- RedirectTemp 指令发送一个外部临时重定向使客户端重定向到一个不同的URL
- ScriptAlias 指令 映射一个URL到文件系统并视之为CGI脚本
- ScriptAliasMatch 指令使用正则表达式映射一个URL到文件系统并视之为CGI脚本
mod_authz_host供基于主机名、IP地址、请求特征的访问控制
指令集简要
- Allow 指令 控制哪些主机能够访问服务器的该区域
- Deny 指令 控制哪些主机被禁止访问服务器
- Order 指令 控制默认的访问状态与Allow和Deny指令生效的顺序
配置流程
在进入配置流程之前你需要自行下载并安装好apache服务器,以及确保我们所需的apache模块存在于apache根目录中默认模块目录modules里等待加载,现在我们直接进入编辑配置文件这个步骤。
启用模块
你需要在apache服务器配置文件中启用所需模块。因为我们即将使用它们。典型的加载模块示例:
# Example:
# LoadModule foo_module modules/mod_foo.so
认证和授权
首先介绍使用纯文本文件来做认证支持,分别列举基本认证和摘要认证的各自做法,以下分别用Basic和Digest标识,接着会介绍使用DBM文件数据库做认证支持。
认证支持
建立用户密码文件
添加或更新用户
若是第一次使用请添加-c选项
- provider of file for Basic:htpasswd –b passwordFile username password
- provider of file for Digest:htdigest passwordFile realm username
- provider of DBM for Basic: htdbm –b –TDBMtype dababase username password
删除用户
- provider of file for Basic: htpasswd –D passwordFile username
- provider of file for Digest: 同上
- provider of DBM for Basic: htdbm –x -TDBMtype database username
查看用户列表
- provider of file for Basic: for /f "usebackq tokens=1 delims=:" %n in ("passwordFile") do @ echo %n
- provider of file for Digest: 同上
- provider of DBM for Basic: htdbm –l -TDBMtype database
建立用户组文件
添加或更新用户组
- provider of file for Basic:htpasswd –bp groupFile groupName "group1 group2 group3 …"
- provider of file for Digest:同上
- provider of DBM for Basic or Digest: htdbm –bp dbgroup groupName "group1,group2,group3,…"
删除用户组
- provider of file for Basic: htpasswd –D groupFile groupName
- provider of file for Digest: 同上
- provider of DBM for Basic or Digest: htdbm –x -TDBMtype dbgroup groupName
查看用户组列表
- provider of file for Basic: for /f "usebackq tokens=1 delims=:" %n in ("groupName") do @ echo %n
- provider of file for Digest: 同上
- provider of DBM for Basic or Digest: htdbm –l -TDBMtype dbgroup
认证和授权支持
使用Directory、 DirectoryMatch、Location、Files、 FilesMatch指令来分别来指定目录、位置、文件以便于制定认证和授权规则,使用Require、Allow、Deny、Limit、LimitExcept和辅助Satisfy指令来制定具体的认证和授权规则。
配置段(容器)
指令简要
- Directory封装一组指令,使之仅对文件空间中的某个目录及其子目录生效
- DirectoryMatch封装一些指令并作用于文件系统中匹配正则表达式的所有目录及其子目录
- Location将封装的指令作用于匹配的URL
- LocationMatch 将封装的指令作用于正则表达式匹配的URL
- Files包含作用于匹配指定文件名的指令
- FilesMatch包含作用于与正则表达式匹配的文件名的指令
核心指令
指令简要
- Options 指令配置在特定目录中可以使用哪些特性
- AuthName指令用于HTTP认证的授权域
- Require指定哪些认证用户允许访问该资源
- Allow控制哪些主机能够访问服务器的该区域
- Deny控制哪些主机被禁止访问服务器
- Order控制默认的访问状态与Allow和Deny指令生效的顺序
- Limit仅对指定的HTTP方法进行访问控制
- LimitExcept对除了指定方法以外的所有HTTP方法进行访问控制
- Satisfy 指定Allow、Deny的访问控制和Require之间的相互关系
操作授权支持
HTTP方法
协议定义的HTTP方法
- HTTP协议中定义的方法http://tools.ietf.org/html/rfc2616#section-5.1.1
- WebDAV HTTP扩展定义的方法 http://tools.ietf.org/html/rfc2518#section-8
- WebDAV访问控制协议中定义的方法权限表http://tools.ietf.org/html/rfc3744#appendix-B
- 微软Exchange Server 2003 WebDAV HTTP方法定义请参见http://msdn.microsoft.com/en-us/library/aa142917(v=EXCHG.65).aspx
常用HTTP方法简要说明
- GET, 请求指定的页面信息,并返回实体主体
- HEAD,只请求页面的首部。
- POST, 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体
- PUT, 从客户端向服务器传送的数据取代指定的文档的内容
- DELETE, 请求服务器删除指定的页面
- OPTIONS, 请求获取或检索uri资源相关信息,
- PROPFIND, 获取与指定资源有关的信息,如作者、大小与内容类型
- PROPPATCH, 设置与指定资源有关的信息,如作者、大小与内容类型
- MKCOL, 用于创建新集合。使用此方法可避免过载 PUT 方法
- COPY, 用于复制资源
- MOVE, 用于移动资源
- LOCK, 为资源添加锁
- UNLOCK删除资源的锁
- TRACE追溯请求
应用实例配置参考
使用配置段指令时应遵循其合并顺序来写配置文件。
基本认证配置向导
#指定锁定列表文件路径
#DavLockDB "/path/to/file
#创建别名"
#Alias /webdav "/path/to/dir"
#指定需认证授权的目录
#<Directory "/path/to/dir">
#Options [+|-]option [[+|-]option] ... 配置在特定目录中可以使用哪些特性
#典型配置
#Options Indexes
#Order ordering 控制默认的访问状态与Allow和Deny指令生效的顺序
#典型配置
#Order Deny,Allow
#Allow|Deny from all|host|env=env-variable [host|env=env-variable] ... 控制哪些主机能够访问服务器的该区域
#典型配置
#Allow from all
#开启或关闭WebDAV
#Dav On|Off
#认证窗口的名称
#AuthName name
#使用基本或摘要认证
#AuthType Basic|Digest
#指定认证支持,纯文本或DBM
#基本认证的指令
#AuthBasicProvider file|dbm
#摘要认证的指令
#AuthDigestProvider file|dbm
#使用纯文本文件认证支持
#用户
#AuthUserFile "/path/to/passwdFile"
#用户组
#AuthGroupFile "/path/to/groupFile"
#使用DBM文件数据库认证支持
#DBM类型
#AuthDBMType SDBM
#用户
#AuthDBMUserFile "/path/to/passwdFile"
#用户组
#AuthDBMGroupFile "/path/to/groupFile"
#Require user|group|valid-user username 可以指定用户或用户组或只满足有效用户即可的指令,使用valid-user时不应该指定username
#典型配置
#Require valid-user
#</ Directory >
附加授权配置向导
#仅对当前资源URI限制某个用户组可用的一组HTTP方法
#<Location "URI">
#<Limit|LimitExcept HEAD GET OPTIONS PROPFIND>
# Require group groupName
#</Limit|LimitExcept>
#</Location>
#对目录的文件操作控制
#<Directory "/path">
# #这里可以结合使用核心指令进行目录控制
# #典型配置
# Require group groupName
# <Files filename>
# #可以结合使用核心指令进行文件控制
# #典型配置
# Deny from all
# #或者限制HTTP方法
# <LimitExcept HEAD GET OPTIONS SEARCH PROPFIND WRAPPED>
# Require group Admin
# Allow from ip
# #以上Require或Allow满足其中一个条件即可
# Satisfy Any
# </LimitExcept>
# </Files>
#</Directory>
以上只是列举常用配置参考,掌握好理论基础后,便可灵活配置来解决实际应用所需。
注意事项
- DBM 文件数据库暂无法完全兼容 Digest 认证,解决方案请参见 http://www.berenddeboer.net/rest/apache_dbm_digest.html
- TRACE方法不能被使用在Limit配置指令中。
- Files配置段不可用于Location配置段,理论上文件系统和网络空间容器毫无关系。
- 启用SSL访问让WebDAV传输更加安全。
总结
在apache中WebDAV配置的基本顺序就是获取所需模块并启用,准备认证支持文件,选择配置段容器,填写相关核心指令,重新启动apache使之生效。
在解决实际应用所需时,建议先规划好资源权限赋予表,转换成具体配置指令时,多多看看官方手册,多做些测试。
Finally,Enjoy you self!