一、问题现象:明明有权限却无法写入

最近帮朋友处理一个棘手的问题:他在Windows Server 2019上配置了WebDAV服务,客户端可以成功挂载网络驱动器,但所有写入操作都失败。有趣的是,客户端使用的域账户在服务器NTFS权限中明明有"完全控制"权限,但每次尝试创建文件都会弹出"拒绝访问"的提示框。

这种情况特别容易发生在混合权限体系中——既配置了NTFS权限,又设置了WebDAV授权规则。就像你家大门有两把锁(指纹锁和钥匙锁),哪怕指纹识别通过了,钥匙没带照样进不去。

二、权限双重检查:NTFS与WebDAV的博弈

2.1 NTFS权限验证

首先我们用PowerShell检查NTFS权限(技术栈:Windows Server + PowerShell):

# 获取共享文件夹的NTFS权限
$path = "D:\WebDAV_Share"
$acl = Get-Acl $path

# 输出所有访问规则
$acl.Access | Format-Table IdentityReference, FileSystemRights, AccessControlType -AutoSize

# 检查特定用户的权限
$user = "DOMAIN\webdav_user"
$acl.Access | Where-Object { $_.IdentityReference -eq $user } | Select-Object FileSystemRights

如果输出显示用户有"Modify"或"FullControl"权限,说明NTFS层面没问题。

2.2 WebDAV授权规则验证

接着检查IIS中的WebDAV授权设置(技术栈:IIS管理):

  1. 打开IIS管理器 → 选择WebDAV站点
  2. 双击"WebDAV授权规则"
  3. 确保存在允许写入的规则,例如:
    • 允许:所有用户
    • 权限:读取、写入、源

如果没有配置写入权限,就像给了你家钥匙但没给卧室钥匙,还是没法真正"入住"。

三、服务配置深水区:那些容易被忽略的细节

3.1 WebDAV服务模块配置

在应用程序Host.config文件中(默认路径:C:\Windows\System32\inetsrv\config),需要检查这些关键项:

<system.webServer>
    <webdav>
        <authorization>
            <add users="*" path="*" access="Read,Write,Source" />
        </authorization>
        <properties allowAnonymousPropfind="false" allowInfinitePropfindDepth="true">
            <fileSystem allowHiddenFiles="true" />
        </properties>
    </webdav>
</system.webServer>

注意access="Read,Write,Source"这个配置,少了"Write"就会导致写入失败。

3.2 请求筛选限制

IIS默认会阻止某些文件扩展名:

# 查看被阻止的扩展名列表
Get-WebConfigurationProperty -Filter "/system.webServer/security/requestFiltering/fileExtensions" -Name "." | Select-Object -ExpandProperty Collection

如果发现".exe"等扩展名被阻止,可以通过以下命令添加允许规则:

Add-WebConfigurationProperty -Filter "/system.webServer/security/requestFiltering/fileExtensions" -Name "." -Value @{fileExtension='.exe';allowed='true'}

四、终极解决方案:四步排查法

根据多年运维经验,我总结出以下排查流程:

  1. 权限叠加验证
    在服务器上直接用问题账户登录,测试能否在共享目录手动创建文件。如果不行,说明是NTFS权限问题。

  2. WebDAV规则测试
    使用cURL模拟WebDAV请求:

    curl -X PROPFIND http://server/webdav -u "user:password" --ntlm
    

    观察返回的权限标记是否包含"w"(write)。

  3. 服务组件检查
    确保以下Windows功能已启用:

    • WebDAV发布
    • IIS管理脚本和工具
    • Windows身份验证
  4. 注册表关键项
    检查注册表路径:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
    

    确保这些值设置正确:

    • BasicAuthLevel = 2
    • FileSizeLimitInBytes = 4294967295 (4GB)

五、应用场景与注意事项

这种问题常见于以下场景:

  • 企业文档共享系统迁移到WebDAV
  • 开发团队需要远程访问版本控制资源
  • 跨平台文件共享解决方案

技术优缺点:

  • 优点:比FTP更安全,支持HTTP协议穿透防火墙
  • 缺点:配置复杂度高,Windows客户端有4096字节URL限制

特别注意:

  1. WebDAV默认使用UTF-8编码,遇到中文文件名乱码时需要检查客户端编码设置
  2. Windows资源管理器对WebDAV的支持有限,推荐使用专业客户端如Cyberduck
  3. 在HTTPS环境下,可能需要调整Schannel加密套件顺序

六、总结

WebDAV权限问题就像洋葱,需要一层层剥开。通过本文的四步排查法,你应该能解决大多数写入权限问题。记住关键点:NTFS权限是基础,WebDAV授权是必要条件,服务配置是保障。下次遇到类似问题时,不妨按照这个检查清单逐步排查,相信一定能找到问题根源。