通常我们需要让客户向我们发送大型备份集。我们目前使用 ftp,但是在传输完成之前,我们遇到了 ftp 客户端在客户端计算机上关闭的问题。
我们想使用后台智能传输服务 (BITS),但是我在创建与 FTP 上相同的“UploadOnly”样式帐户时遇到了问题。
到目前为止,我已经通过 SSL 使用 NTLM 身份验证,它非常适合能够上传和下载的正常用例。但是,如果我删除对上传帐户的虚拟目录的“修改”权限(特别是删除“列出文件夹/读取数据”、“读取扩展属性”或“删除”权限),当我尝试从客户端执行上传:
Start-BitsTransfer : Access is denied.
At line:1 char:19
+ Start-BitsTransfer <<<< -TransferType Upload -Source E:\test.bin -Destination https://www.example.com/BitsUpload/test.bin -Credential $c -Authentication NTLM
+ CategoryInfo : InvalidOperation: (:) [Start-BitsTransfer], Exception
+ FullyQualifiedErrorId : StartBitsTransferCOMException,Microsoft.BackgroundIntelligentTransfer.Management.NewBits
TransferCommand
此外,如果未选中“删除”权限,它会在上传文件夹中留下一个 0KB 文件,bitssrv_{RANDOM_GUID}_statefile
其中 RANDOM_GUID 是每个文件的不同 guid。
我需要做什么来设置 BITS,以便我可以将数据上传到服务器,但不能下载?如果那不可能做我想做的事情,也请告诉我,我可能只是制作一个脚本,在传输完成时将其移出上传文件夹。
使用共享登录帐户,这是不可能的。BITS 的一部分是重新启动中断的文件传输的能力,它通过读取文件的末尾来知道从哪里重新开始。所以放置文件的能力总是需要读取文件的能力。
一个选项可能是创建一组将发送文件的所有机器,而不是使用一个帐户登录。授予组修改文件夹(但不是子文件夹和文件)的权限。还授予 CREATOR OWNER 对文件和子文件夹的完全访问权限。使用机器凭据登录。有了这些权限,只有上传文件的机器才能读取文件。
有点迟到的答案,但这可能对其他人有帮助:BITS 使用动词 BITS_POST 完成所有上传工作。(下载按预期使用 HEAD 和 GET)。
您可以在上传目录上使用请求过滤来阻止所有未列出的动词,并仅列出 BITS_POST。我还发现禁止匿名访问、将 SSL 设置设置为需要 SSL 和客户端证书以及附加证书以上传请求很有用。