我们经常需要客户向我们发送大型备份集。我们目前使用 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,以便我可以将数据上传到服务器,但不能下载?如果无法实现我想要的功能,请也告诉我,我可能会编写一个脚本,在传输完成时将其移出上传文件夹。
答案1
使用共享登录帐户,这是不可能的。BITS 的一部分是重新启动中断的文件传输的能力,它通过读取文件末尾来知道从哪里重新启动。因此,放置文件的能力始终需要读取文件的能力。
一个选项可能是不使用一个帐户登录,而是创建一个将发送文件的所有机器的组。授予该组修改文件夹的权限(但不是子文件夹和文件)。还授予创建者所有者对文件和子文件夹的完全访问权限。使用机器凭据登录。有了这些权限,只有上传文件的机器才能读取该文件。
答案2
回答得有点晚,但这可能对其他人有帮助:BITS 使用动词 BITS_POST 完成所有上传工作。 (下载按预期使用 HEAD 和 GET)。
您可以在上传目录上使用请求过滤来阻止所有未列出的动词,并仅列出 BITS_POST。我还发现禁止匿名访问、将 SSL 设置设置为需要 SSL 和需要客户端证书以及将证书附加到上传请求中很有用。